喻忠伟 1 year ago
commit dfd487a266
  1. 40
      ant-design-vue-jeecg/src/views/productrecord/ProductRecordList1.vue
  2. 21
      ant-design-vue-jeecg/src/views/sensorrecord/SensorRecordList1.vue
  3. 5
      ant-design-vue-jeecg/src/views/shopping/assets/common.css
  4. 28
      ant-design-vue-jeecg/src/views/shopping/pages/clothType.vue
  5. 75
      ant-design-vue-jeecg/src/views/shopping/shopHome.vue
  6. 163
      ant-design-vue-jeecg/src/views/team/modules/StationModal1.vue
  7. 48
      ant-design-vue-jeecg/src/views/zyplanprocess/ZyPlanProcessList.vue
  8. 3
      jeecg-boot/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
  9. 21
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/largeScreen/controller/ProductionLargeScreenController.java
  10. 2
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/largeScreen/service/ProductionLargeService.java
  11. 223
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/largeScreen/service/impl/ProductionLargeServiceImpl.java
  12. 9
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/largeScreen/vo/ProductRecordVo.java
  13. 2
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/controller/ZySpeechMessageController.java
  14. 9
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/productplan/controller/ZyPlanProcessController.java
  15. 9
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/productplan/entity/ZyPlanProcess.java
  16. 14
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/productplan/entity/vo/ZyPlanProcessVo.java
  17. 30
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/workorder/controller/WorkOrderController.java

@ -93,6 +93,12 @@
下载
</a-button>
</template>
<template slot="gw" slot-scope="text, record">
<a @click="gw(record.stationId)">{{text}}</a>
</template>
<template slot="gd" slot-scope="text, record">
<a @click="gd(record.orderCode)">{{text}}</a>
</template>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
@ -122,6 +128,8 @@
</a-tab-pane>
</a-tabs>
<product-record-modal ref="modalForm" @ok="modalFormOk"></product-record-modal>
<station-modal1 ref="modalFormgw"></station-modal1>
<work-order-modal ref="modalFormgd"></work-order-modal>
</a-card>
</template>
@ -133,13 +141,18 @@
import ProductRecordModal from './modules/ProductRecordModal'
import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
import SensorRecordList1 from '../sensorrecord/SensorRecordList1'
import {deleteAction, getAction} from "@api/manage";
import StationModal1 from '../team/modules/StationModal1'
import WorkOrderModal from '../workorder/modules/WorkOrderModal'
export default {
name: 'ProductRecordList',
mixins:[JeecgListMixin, mixinDevice],
components: {
SensorRecordList1,
ProductRecordModal
ProductRecordModal,
StationModal1,
WorkOrderModal
},
data () {
return {
@ -159,12 +172,14 @@
{
title:'工位',
align:"center",
dataIndex: 'stationId_dictText'
dataIndex: 'stationId_dictText',
scopedSlots: {customRender: 'gw'}
},
{
title:'工单编号',
align:"center",
dataIndex: 'orderCode'
dataIndex: 'orderCode',
scopedSlots: {customRender: 'gd'}
},
{
title:'生产开始时间',
@ -216,6 +231,25 @@
},
},
methods: {
gw(stationId){
getAction("/team/station/queryById", {id: stationId}).then((res) => {
if (res.success) {
this.$refs.modalFormgw.edit(res.result);
this.$refs.modalFormgw.title="详情";
} else {
}
})
},
gd(orderCode){
getAction("/workOrder/workOrder/queryByOrderCode", {orderCode: orderCode}).then((res) => {
if (res.success) {
this.$refs.modalFormgd.edit(res.result);
this.$refs.modalFormgd.title="详情";
this.$refs.modalFormgd.disableSubmit = true;
} else {
}
})
},
initDictConfig(){
},
getSuperFieldList(){

@ -66,6 +66,9 @@
下载
</a-button>
</template>
<template slot="gw" slot-scope="text, record">
<a @click="gw(record.stationId)">{{text}}</a>
</template>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
@ -90,6 +93,7 @@
</div>
<sensor-record-modal ref="modalForm" @ok="modalFormOk"></sensor-record-modal>
<station-modal1 ref="modalFormgw"></station-modal1>
</a-card>
</template>
@ -100,12 +104,15 @@
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import SensorRecordModal from './modules/SensorRecordModal'
import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
import StationModal1 from '../team/modules/StationModal1'
import {deleteAction, getAction} from "@api/manage";
export default {
name: 'SensorRecordList1',
mixins:[JeecgListMixin, mixinDevice],
components: {
SensorRecordModal
SensorRecordModal,
StationModal1
},
data () {
return {
@ -135,7 +142,8 @@
{
title:'工位',
align:"center",
dataIndex: 'stationId_dictText'
dataIndex: 'stationId_dictText',
scopedSlots: {customRender: 'gw'}
},
{
title:'进出标记',
@ -182,6 +190,15 @@
},
},
methods: {
gw(stationId){
getAction("/team/station/queryById", {id: stationId}).then((res) => {
if (res.success) {
this.$refs.modalFormgw.edit(res.result);
this.$refs.modalFormgw.title="详情";
} else {
}
})
},
initDictConfig(){
},
getSuperFieldList(){

@ -99,4 +99,7 @@ a {
.c_31 {
color: #313131;
}
.textfield {overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}
.textfield {overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}
*{
font-family: PingFang SC-Semibold, PingFang SC;
}

@ -59,10 +59,10 @@
</div>
<div class="clothTitle">
<p class="price d-flex">
<span class="f_16 c_333">{{ item.currentPrice }}</span>
<span class="f_18 c_333">{{ item.currentPrice }}</span>
<span class="f_12 c_999">{{ item.historicalPrice }}</span>
</p>
<p class="f_12 c_333">{{ item.title }}</p>
<p class="f_16 c_333">{{ item.title }}</p>
<p class="f_12 c_9a9b9b">热度{{ item.heat }}</p>
</div>
</div>
@ -452,15 +452,21 @@
flex-wrap: wrap;
align-items: center;
.item {
width: 308px;
width: 288px;
height: 562px;
margin-bottom: 30px;
padding: 10px;
margin-bottom: 0px;
margin-right: 10px;
/*border: 0.5px solid #ccc;*/
/*background-color: rgba(246, 246, 246, 1);*/
.imgDiv {
position: relative;
img {
width: 308px;
height: 462px;
/*width: 308px;*/
/*height: 462px;*/
width: 268px;
height: 380px;
object-fit: cover;
}
&:hover .button {
opacity: 1;
@ -484,17 +490,23 @@
width: 100%;
height: 100px;
.price {
margin-top: 16px;
align-items: center;
margin-bottom: 8px;
padding-left: 6px;
.f_16 {
.f_18 {
margin-right: 10px;
}
.f_12 {
text-decoration: line-through;
}
}
& > .f_12 {
& > .f_16 {
font-weight: 600;
height: 46px;
margin-bottom: 10px;
/*overflow: hidden;text-overflow: ellipsis;white-space: nowrap;*/
overflow: hidden;display: -webkit-box;text-overflow: ellipsis;-webkit-line-clamp:2;-webkit-box-orient: vertical;white-space:normal;
}
}
}

@ -42,31 +42,32 @@
</div>
</div>
</div>
<div class="section3">
<div class="jz">
<div class="titleCont">
<p class="title">最新定制</p>
<div class="orange"></div>
<p class="desc">Latest customization</p>
</div>
<div class="itemDiv d-flex">
<div class="item" v-for="(item, index) in clothList" :key="index">
<img :src="item.imgUrl" alt="" />
<p class="titleDiv">
{{ item.title1 }}<span>|</span>{{ item.title2 }}
</p>
<p class="price">
价格¥<span>{{ item.price }}</span
>
</p>
</div>
</div>
<div class="more d-flex">
<a href="#">了解更多</a>
<img src="./assets/youjiantou.png" alt="" />
</div>
</div>
</div>
<!-- 最新定制-->
<!-- <div class="section3">-->
<!-- <div class="jz">-->
<!-- <div class="titleCont">-->
<!-- <p class="title">最新定制</p>-->
<!-- <div class="orange"></div>-->
<!-- <p class="desc">Latest customization</p>-->
<!-- </div>-->
<!-- <div class="itemDiv d-flex">-->
<!-- <div class="item" v-for="(item, index) in clothList" :key="index">-->
<!-- <img :src="item.imgUrl" alt="" />-->
<!-- <p class="titleDiv">-->
<!-- {{ item.title1 }}<span>|</span>{{ item.title2 }}-->
<!-- </p>-->
<!-- <p class="price">-->
<!-- 价格¥<span>{{ item.price }}</span-->
<!-- >-->
<!-- </p>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="more d-flex">-->
<!-- <a href="#">了解更多</a>-->
<!-- <img src="./assets/youjiantou.png" alt="" />-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<div class="section4">
<div class="jz">
<div class="titleCont d-flex">
@ -161,7 +162,7 @@
@click="tjspxq(item.id,item.title2)"
>
<img :src="item.imgUrl" alt="" />
<p>
<p class="title_6">
{{ item.title1 }}<span class="line">|</span>{{ item.title2 }}
</p>
<div>
@ -189,7 +190,7 @@
@click="tjspxq(item.id,item.title2)"
>
<img :src="item.imgUrl" alt="" />
<p>
<p class="title_6">
{{ item.title1 }}<span class="line">|</span>{{ item.title2 }}
</p>
<div>
@ -948,23 +949,31 @@
min-width: 270px;
flex-direction: column;
align-items: center;
padding-bottom: 30px;
padding-bottom: 10px;
padding-top: 10px;
margin-bottom: 30px;
margin-right: 11px;
}
.section5 .tabs .jz .item img {
width: 80%;
width: 90%;
height: 309px;
object-fit: cover;
}
.section5 .tabs .jz .item p {
width: 100%;
box-sizing: border-box;
text-overflow: ellipsis;
padding-left: 28px;
padding-right: 28px;
padding: 15px;
overflow: hidden;
text-align: left;
white-space: nowrap;
}
.section5 .tabs .jz .item p.title_6{
border-bottom: 1px dashed rgba(116,105,87,0.3) ;
color: #333;
font-size: 20px;
padding: 20px;
}
.section5 .tabs .jz .item p .line {
margin-left: 8px;
margin-right: 8px;
@ -973,8 +982,8 @@
width: 100%;
padding-left: 28px;
box-sizing: border-box;
margin-top: 30px;
margin-bottom: 20px;
/*margin-top: 30px;*/
/*margin-bottom: 20px;*/
}
.section5 .tabs .jz .item div .el-tag {
margin-right: 10px;

@ -0,0 +1,163 @@
<template>
<j-modal
:title="title"
:width="800"
:visible="visible"
:confirmLoading="confirmLoading"
switchFullscreen
@cancel="handleCancel"
@ok="handleCancel"
cancelText="关闭">
<a-spin :spinning="confirmLoading">
<j-form-container :disabled="formDisabled">
<a-form-model ref="form" :model="model" :rules="validatorRules">
<a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="departId" label="车间名称">
<!-- <j-dict-select-tag type="list" v-model="model.departId" dictCode="sys_depart,depart_name,id,org_category='2'" placeholder="请选择车间" />-->
<!-- <j-tree-select v-model="model.departId"
dict="sys_depart,depart_name,id"
pidField="parent_id"
placeholder="请选择车间"
condition='{"org_category":"2"}'
hasChildField="1"
>
</j-tree-select>-->
<j-dict-select-tag type="list" v-model="model.departId"
dictCode="sys_depart,depart_name,id,org_category='2'"
placeholder="请选择车间"/>
</a-form-model-item>
<a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="stationName" label="工位名称">
<a-input placeholder="请输入工位名称" v-model="model.stationName"/>
</a-form-model-item>
<a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="stationNum" label="工位序号">
<a-input-number v-model="model.stationNum"/>
</a-form-model-item>
<a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="description" label="备注">
<a-input placeholder="请输入备注" v-model="model.description"/>
</a-form-model-item>
</a-form-model>
</j-form-container>
</a-spin>
</j-modal>
</template>
<script>
import {getAction, httpAction} from '@/api/manage'
import moment from "moment"
export default {
name: "StationModal",
data() {
return {
title: "操作",
visible: false,
formDisabled:true,
model: {},
labelCol: {
xs: {span: 24},
sm: {span: 5},
},
wrapperCol: {
xs: {span: 24},
sm: {span: 16},
},
confirmLoading: false,
validatorRules: {
departId: [
{required: true, message: "部门不能为空"},
],
stationName: [
{required: true,message:"工位名称不能为空"},
{pattern: /(^[\u4e00-\u9fa5_a-zA-Z0-9_]{1,10}$)/, message: '工位名称为空且长度不能超过10!'}
],
stationNum: [
{required: true,message:"工位序号不能不空"},
{pattern: /^[1-9]{0,100}$/, message: '工位序号不能为空且长度为(1-100)间正整数'}
],
},
url: {
add: "/team/station/add",
edit: "/team/station/edit",
},
}
},
created() {
},
methods: {
async bianhao() {
//var n=6
getAction(this.url.sort, {id: this.model.clothsTypeId}).then((res) => {
//let num = res.result;
console.log("+6++++aaa: " + res.result)
//num=num.toString()
//while(num.length<n){
//num="0"+num
//}
//console.log(num)
this.model.nums = res.result;
})
},
add() {
//
this.edit({});
},
edit(record) {
this.model = Object.assign({}, record);
this.visible = true;
},
close() {
this.$emit('close');
this.visible = false;
this.$refs.form.clearValidate();
},
handleOk() {
const that = this;
//
this.$refs.form.validate(valid => {
if (valid) {
that.confirmLoading = true;
let httpurl = '';
let method = '';
if (!this.model.id) {
httpurl += this.url.add;
method = 'post';
} else {
httpurl += this.url.edit;
method = 'put';
}
httpAction(httpurl, this.model, method).then((res) => {
if (res.success) {
that.$message.success(res.message);
that.$emit('ok');
} else {
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
that.close();
})
} else {
return false;
}
})
},
handleCancel() {
this.close()
},
}
}
</script>
<style lang="less" scoped>
</style>

@ -55,6 +55,12 @@
<template slot="htmlSlot" slot-scope="text">
<div v-html="text"></div>
</template>
<template slot="gw" slot-scope="text, record">
<a @click="gw(record.stationId)">{{text}}</a>
</template>
<template slot="gd" slot-scope="text, record">
<a @click="gd(record.productNo)">{{text}}</a>
</template>
<template slot="nodata" slot-scope="text, record">
<span v-if="!text" style="font-size: 14px;font-style: italic;"></span>
<span v-else style="font-size: 14px;font-style: italic;">{{record.proProcessName}}</span>
@ -103,6 +109,8 @@
</div>
<zy-plan-process-modal ref="modalForm" @ok="modalFormOk"></zy-plan-process-modal>
<station-modal1 ref="modalFormgw"></station-modal1>
<work-order-modal ref="modalFormgd"></work-order-modal>
</a-card>
</template>
@ -113,12 +121,17 @@
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import ZyPlanProcessModal from './modules/ZyPlanProcessModal'
import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
import StationModal1 from "../team/modules/StationModal1";
import WorkOrderModal from "../workorder/modules/WorkOrderModal";
import {deleteAction, getAction} from "@api/manage";
export default {
name: 'ZyPlanProcessList',
mixins:[JeecgListMixin, mixinDevice],
components: {
ZyPlanProcessModal
ZyPlanProcessModal,
StationModal1,
WorkOrderModal
},
data () {
return {
@ -135,6 +148,17 @@
return parseInt(index)+1;
}
},
{
title:'工单编号',
align:"center",
dataIndex: 'productNo',
scopedSlots: {customRender: 'gd'}
},
{
title:'产品名称',
align:"center",
dataIndex: 'productCode_dictText'
},
{
title:'工序名称',
align:"center",
@ -143,7 +167,8 @@
{
title:'工位名称',
align:"center",
dataIndex: 'stationName'
dataIndex: 'stationName',
scopedSlots: {customRender: 'gw'}
},
{
title:'工位序号',
@ -223,6 +248,25 @@
},
},
methods: {
gw(stationId){
getAction("/team/station/queryById", {id: stationId}).then((res) => {
if (res.success) {
this.$refs.modalFormgw.edit(res.result);
this.$refs.modalFormgw.title="详情";
} else {
}
})
},
gd(orderCode){
getAction("/workOrder/workOrder/queryByOrderCode", {orderCode: orderCode}).then((res) => {
if (res.success) {
this.$refs.modalFormgd.edit(res.result);
this.$refs.modalFormgd.title="详情";
this.$refs.modalFormgd.disableSubmit = true;
} else {
}
})
},
initDictConfig(){
},
}

@ -128,7 +128,10 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/zyShopOrder/shopOrder/**","anon");
//大屏数据
filterChainDefinitionMap.put("/largeScreen/**","anon");
//生产大屏
filterChainDefinitionMap.put("/productionLargeScreen/**","anon");
filterChainDefinitionMap.put("/org.jeecg.modules.message/zySpeechMessage/**","anon");
//人员管理
filterChainDefinitionMap.put("/zyPerson/**","anon");

@ -26,18 +26,25 @@ public class ProductionLargeScreenController {
*
* @return
*/
@ApiOperation(value = "获取生产设备大屏数据", notes = "获取生产设备大屏数据")
@GetMapping("/getData")
public Result<?> getData() {
Map<String, Object> data = productionLargeService.getData();
return Result.OK(data);
}
// @ApiOperation(value = "获取生产设备大屏数据", notes = "获取生产设备大屏数据")
// @GetMapping("/getData")
// public Result<?> getData() {
// Map<String, Object> data = productionLargeService.getData();
// return Result.OK(data);
// }
@ApiOperation(value = "获取生产设备大屏数据", notes = "获取生产设备大屏数据")
@ApiOperation(value = "生产大屏-生产线实时状态", notes = "生产线实时状态")
@GetMapping("/shengchanxian_data")
public Result<?> shengchanxian_data() {
Map<String, Object> data = productionLargeService.shengchanxian_data();
return Result.OK(data);
}
@ApiOperation(value = "生产大屏-设备信息&吊挂&裁床", notes = "生产大屏-设备信息&吊挂&裁床")
@GetMapping("/shebeixinxi_data")
public Result<?> shebeixinxi_data() {
Map<String, Object> data = productionLargeService.shebeixinxi_data();
return Result.OK(data);
}
}

@ -4,7 +4,7 @@ import java.util.Map;
public interface ProductionLargeService {
Map<String, Object> getData();
Map<String, Object> shebeixinxi_data();
Map<String, Object> shengchanxian_data();
}

@ -1,31 +1,41 @@
package org.jeecg.modules.largeScreen.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.modules.demo.productrecord.entity.ProductRecord;
import org.jeecg.modules.demo.productrecord.service.IProductRecordService;
import org.jeecg.modules.hanger.service.IHangRecordService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.models.auth.In;
import org.jeecg.modules.demo.base.entity.ZyProcess;
import org.jeecg.modules.demo.base.service.IZyProcessService;
import org.jeecg.modules.device.entity.ZyDevice;
import org.jeecg.modules.device.service.IZyDeviceService;
import org.jeecg.modules.largeScreen.service.ProductionLargeService;
import org.jeecg.modules.largeScreen.vo.ProductRecordVo;
import org.jeecg.modules.productplan.entity.ZyPlanProcess;
import org.jeecg.modules.productplan.entity.ZyProductPlan;
import org.jeecg.modules.productplan.entity.vo.ZyPlanProcessVo;
import org.jeecg.modules.productplan.service.IZyPlanProcessService;
import org.jeecg.modules.productplan.service.IZyProductPlanService;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.service.ISysDepartService;
import org.jeecg.modules.team.entity.Groupx;
import org.jeecg.modules.team.entity.Station;
import org.jeecg.modules.team.service.IGroupxService;
import org.jeecg.modules.team.service.IStationService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.time.LocalDate;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
@Service
public class ProductionLargeServiceImpl implements ProductionLargeService {
@Autowired
private IHangRecordService iHangRecordService;
private IZyProcessService iZyProcessService;
@Autowired
private IZyProductPlanService iZyProductPlanService;
@ -34,94 +44,117 @@ public class ProductionLargeServiceImpl implements ProductionLargeService {
private IZyPlanProcessService iZyPlanProcessService;
@Autowired
private IProductRecordService iProductRecordService;
private IGroupxService iGroupxService;
@Autowired
private IStationService iStationService;
@Autowired
private IZyDeviceService iZyDeviceService;
@Autowired
private ISysDepartService iSysDepartService;
// D00010:智能定制生产吊挂系统
private static final String DIAOGUA = "D00010";
// D00002:智能定制裁床
private static final String CAICHUANG = "D00002";
/**
* 获取百分率 %
*
* @param number
* @param denominator
* @return eg:33.33%
*/
public static String getRatioStr(double number, double denominator) {
String ratio = "0.0%";
if (denominator != 0) {
DecimalFormat decimalFormat = new DecimalFormat("#0.0%");
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
ratio = decimalFormat.format(number / denominator);
}
return ratio;
}
public static void main(String[] args) {
String ratioStr = getRatioStr(78, 100);
System.out.println("ratioStr = " + ratioStr);
}
/**
* 1统计当天时间内生产工序 zy_plan_process
* 2根据工序确定该工序所属工位
* 3,根据工位确定所需设备各类设备吊挂裁床信息
*
* @return
*/
@Override
public Map<String, Object> getData() {
public Map<String, Object> shebeixinxi_data() {
Map<String, Object> resultMap = new HashMap<>();
/*//1,吊挂
// 分组统计,获取最新时间5条吊挂运行记录
List<HangRecord> recordList = iHangRecordService.list(new LambdaQueryWrapper<HangRecord>().groupBy(HangRecord::getHangCode));
Map<String, Object> diaoguaData = new HashMap<>();
if (!ObjectUtils.isEmpty(recordList)) {
recordList.stream().forEach(e -> {
List<HangRecord> records = iHangRecordService.list(new LambdaQueryWrapper<HangRecord>()
.eq(HangRecord::getHangCode, e.getHangCode())
.orderByDesc(HangRecord::getCreateTime)
.last("limit 5")
);
diaoguaData.put(e.getHangCode(), records);
});
Map<String, Object> resultMap = new HashMap<>();
// List<ZyProductPlan> productPlanList = iZyProductPlanService.list(new QueryWrapper<ZyProductPlan>().eq("DATE_FORMAT (create_time,'%Y-%m-%d ')", LocalDate.now()));
List<ZyProductPlan> productPlanList = iZyProductPlanService.list(new QueryWrapper<ZyProductPlan>().eq("DATE_FORMAT (create_time,'%Y-%m-%d ')", "2023-06-03"));
if (!ObjectUtils.isEmpty(productPlanList)) {
Map<String, Object> diaoguaData = new HashMap<>();
Map<String, Object> caichuangData = new HashMap<>();
//1,吊挂
ZyDevice diaogua = iZyDeviceService.getOne(new LambdaQueryWrapper<ZyDevice>().eq(ZyDevice::getTypeCode, DIAOGUA).last("limit 1"));
//当天生产计划列表
diaoguaData.put("productPlanList", productPlanList);
//吊挂编码
diaoguaData.put("code", diaogua.getCode());
//负载
String ratioStr = getRatioStr(productPlanList.size(), diaogua.getVal());
diaoguaData.put("ratio", ratioStr);
resultMap.put("diaogua_", diaoguaData);
//2,裁床
ZyDevice caichuang = iZyDeviceService.getOne(new LambdaQueryWrapper<ZyDevice>().eq(ZyDevice::getTypeCode, CAICHUANG).last("limit 1"));
//当天生产计划列表
caichuangData.put("productPlanList", productPlanList);
//吊挂编码
caichuangData.put("code", caichuang.getCode());
//负载
caichuangData.put("ratio", getRatioStr(productPlanList.size(), caichuang.getVal()));
resultMap.put("caichuang_", caichuangData);
}
resultMap.put("diaogua_data", diaoguaData);*/
// //2,生产线实时状态
// List<Station> stationGroup = iStationService.list(new LambdaQueryWrapper<Station>().groupBy(Station::getDepartId));
// Map<String, Object> shengchanxianMap = new LinkedHashMap<>();
// if (!ObjectUtils.isEmpty(stationGroup)) {
// stationGroup.stream().forEach(station -> {
// Map<String, Object> departMap = new LinkedHashMap<>();
// //每个车间的工位
// List<Station> stationList = iStationService.list(new LambdaQueryWrapper<Station>()
// .eq(Station::getDepartId, station.getDepartId())
// .orderByAsc(Station::getStationNum)
// );
// /**
// * 取每个工位的,生产记录状态0(生产中)的最新一条数据
// */
// List<ProductRecordVo> productRecordVos = new LinkedList<>();
// Optional.ofNullable(stationList).orElse(new LinkedList<>()).forEach(obj -> {
// ProductRecord productRecord = iProductRecordService.getOne(new LambdaQueryWrapper<ProductRecord>()
// .eq(ProductRecord::getStationId, obj.getId())
// .eq(ProductRecord::getStatus, "0")
// .orderByDesc(ProductRecord::getCreateTime)
// .last("limit 1")
// );
// if (!ObjectUtils.isEmpty(productRecord)) {
// ZyProductPlan productPlan = iZyProductPlanService.getOne(new LambdaQueryWrapper<ZyProductPlan>().eq(ZyProductPlan::getProductCode, productRecord.getOrderCode()));
// Optional.ofNullable(productPlan).orElseThrow(() -> new JeecgBootException("工单编号:" + productRecord.getOrderCode() + "不存在!"));
// List<ZyPlanProcess> zyPlanProcessList = iZyPlanProcessService.list(new LambdaQueryWrapper<ZyPlanProcess>()
// .eq(ZyPlanProcess::getPlanId, productPlan.getId())
// .eq(ZyPlanProcess::getStationId, obj.getId())
// );
// if (!ObjectUtils.isEmpty(zyPlanProcessList)) {
// ZyPlanProcess zyPlanProcess = zyPlanProcessList.get(0);
// ProductRecordVo vo = new ProductRecordVo();
// vo.setProductCode(productRecord.getOrderCode());
// vo.setProcessName(zyPlanProcess.getProcessName());
// vo.setStationName(zyPlanProcess.getStationName());
// vo.setMachineNames(zyPlanProcess.getMachineNames());
// vo.setStationNum(zyPlanProcess.getStationNum());
// productRecordVos.add(vo);
// } else {
// ProductRecordVo vo = new ProductRecordVo();
// vo.setStationName(obj.getStationName());
// vo.setStationNum(obj.getStationNum());
// productRecordVos.add(vo);
// }
// } else {
// ProductRecordVo vo = new ProductRecordVo();
// vo.setStationName(obj.getStationName());
// vo.setStationNum(obj.getStationNum());
// productRecordVos.add(vo);
// }
// });
// SysDepart depart = iSysDepartService.getOne(new LambdaQueryWrapper<SysDepart>().eq(SysDepart::getId, station.getDepartId()));
//// productRecordVos.stream().map(o -> o.getStationNum()).collect(Collectors.toList());
// departMap.put(depart.getDepartName(), productRecordVos);
// shengchanxianMap.putAll(departMap);
// });
// }
// resultMap.put("shengchanxian_data", shengchanxianMap);
// List<ZyPlanProcess> zyPlanProcessList = iZyPlanProcessService.list(new QueryWrapper<ZyPlanProcess>().eq("DATE_FORMAT (create_time,'%Y-%m-%d ')", LocalDate.now()));
List<ZyPlanProcess> zyPlanProcessList = iZyPlanProcessService.list(new QueryWrapper<ZyPlanProcess>().eq("DATE_FORMAT (create_time,'%Y-%m-%d ')", "2023-06-03"));
Map<String, Integer> countMachineIdMap = new HashMap<>();
Map<String, Object> deviceData = new HashMap<>();
Optional.ofNullable(zyPlanProcessList).orElse(new LinkedList<>()).forEach(e -> {
String machineIds = e.getMachineIds();
if (machineIds.contains(",")) {
//该工序有多个设备
String[] machineIdArrs = machineIds.split(",");
for (String machineId : machineIdArrs) {
Integer countByMachineId = countMachineIdMap.getOrDefault(machineId, 0);
countMachineIdMap.put(machineId, countByMachineId.intValue() + 1);
}
} else {
Integer countByMachineIds = countMachineIdMap.getOrDefault(machineIds, 0);
countMachineIdMap.put(machineIds, countByMachineIds.intValue() + 1);
}
});
countMachineIdMap.forEach((k, v) -> {
ZyDevice zyDevice = iZyDeviceService.getById(k);
if (!ObjectUtils.isEmpty(zyDevice)) {
Map<String, Object> deviceMap = new LinkedHashMap<>();
deviceMap.put("code", zyDevice.getCode());
deviceMap.put("name", zyDevice.getName());
deviceMap.put("status", "正常");
//负载
deviceMap.put("ratio", getRatioStr(v, zyDevice.getVal()));
deviceData.put(zyDevice.getCode(), deviceMap);
}
});
resultMap.put("shebeixinxi_", deviceData);
return resultMap;
}
@ -139,21 +172,11 @@ public class ProductionLargeServiceImpl implements ProductionLargeService {
.eq(Station::getDepartId, station.getDepartId())
.orderByAsc(Station::getStationNum)
);
/**
* 取每个工位的生产记录状态0(生产中)的最新一条数据
*/
List<ProductRecordVo> productRecordVos = new LinkedList<>();
Optional.ofNullable(stationList).orElse(new LinkedList<>()).forEach(obj -> {
// ProductRecord productRecord = iProductRecordService.getOne(new LambdaQueryWrapper<ProductRecord>()
// .eq(ProductRecord::getStationId, obj.getId())
// .eq(ProductRecord::getStatus, "0")
// .orderByDesc(ProductRecord::getCreateTime)
// .last("limit 1")
// );
//查询生产计划工序表,对应设备状态 为生产中的数据
//取每个工位上最新一条工序信息
ZyPlanProcess zyPlanProcess = iZyPlanProcessService.getOne(new LambdaQueryWrapper<ZyPlanProcess>()
.eq(ZyPlanProcess::getStationId, obj.getId())
// .eq(ZyPlanProcess::getStatus,"1"))
.orderByDesc(ZyPlanProcess::getUpdateTime)
.last("limit 1"));
if (!ObjectUtils.isEmpty(zyPlanProcess)) {
@ -162,15 +185,23 @@ public class ProductionLargeServiceImpl implements ProductionLargeService {
ProductRecordVo vo = new ProductRecordVo();
if (!ObjectUtils.isEmpty(productPlan)) {
vo.setWorkOrder(productPlan.getProductNo());
Groupx groupx = iGroupxService.getById(productPlan.getTeamId());
vo.setTeamName(groupx.getGroupName());
}
vo.setProcessName(zyPlanProcess.getProcessName());
vo.setStationName(zyPlanProcess.getStationName());
vo.setMachineNames(zyPlanProcess.getMachineNames());
vo.setStationNum(zyPlanProcess.getStationNum());
vo.setProcessStatus(zyPlanProcess.getStatus());
vo.setPlanProcessInfo(zyPlanProcess);
ZyPlanProcessVo zyPlanProcessVo = new ZyPlanProcessVo();
BeanUtils.copyProperties(zyPlanProcess, zyPlanProcessVo);
ZyProcess zyProcess = iZyProcessService.getById(zyPlanProcess.getProcessId());
if (!ObjectUtils.isEmpty(zyProcess)) {
zyPlanProcessVo.setImage(zyProcess.getImage());
}
vo.setZyPlanProcessVo(zyPlanProcessVo);
productRecordVos.add(vo);
} else {
} else { //没有工序返回工位信息
ProductRecordVo vo = new ProductRecordVo();
vo.setStationName(obj.getStationName());
vo.setStationNum(obj.getStationNum());
@ -182,7 +213,7 @@ public class ProductionLargeServiceImpl implements ProductionLargeService {
shengchanxianMap.putAll(departMap);
});
}
resultMap.put("shengchanxian_data", shengchanxianMap);
resultMap.put("shengchanxian_", shengchanxianMap);
return resultMap;
}
}

@ -3,7 +3,7 @@ package org.jeecg.modules.largeScreen.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecg.modules.productplan.entity.ZyPlanProcess;
import org.jeecg.modules.productplan.entity.vo.ZyPlanProcessVo;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.io.Serializable;
@ -50,11 +50,14 @@ public class ProductRecordVo implements Serializable {
@ApiModelProperty(value = "工单编号")
private String workOrder;
@ApiModelProperty(value = "班组")
private String teamName;
private Integer stationNum;
@ApiModelProperty(value = "工位工序状态")
private Integer processStatus;
@ApiModelProperty(value = "工序信息")
private ZyPlanProcess planProcessInfo;
@ApiModelProperty(value = "工序信息Vo")
private ZyPlanProcessVo zyPlanProcessVo;
}

@ -52,7 +52,7 @@ public class ZySpeechMessageController extends JeecgController<ZySpeechMessage,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<ZySpeechMessage> queryWrapper = QueryGenerator.initQueryWrapper(zySpeechMessage, req.getParameterMap());
queryWrapper.orderByAsc("create_time");
queryWrapper.orderByDesc("create_time");
Page<ZySpeechMessage> page = new Page<ZySpeechMessage>(pageNo, pageSize);
IPage<ZySpeechMessage> pageList = zySpeechMessageService.page(page, queryWrapper);
return Result.OK(pageList);

@ -19,8 +19,10 @@ import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.productplan.entity.ZyPlanProcess;
import org.jeecg.modules.productplan.entity.ZyProductPlan;
import org.jeecg.modules.productplan.entity.vo.ProcessDataVo;
import org.jeecg.modules.productplan.service.IZyPlanProcessService;
import org.jeecg.modules.productplan.service.IZyProductPlanService;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.ISysUserService;
import org.jeecg.modules.team.entity.Station;
@ -59,6 +61,8 @@ public class ZyPlanProcessController extends JeecgController<ZyPlanProcess, IZyP
private IStationMachineService iStationMachineService;
@Autowired
private IStationToolService iStationToolService;
@Autowired
private IZyProductPlanService zyProductPlanService;
private static Map<String,String> useridstationid = new HashMap<String,String>(){{
put("GW01","1600683844590194690");
@ -379,6 +383,11 @@ public class ZyPlanProcessController extends JeecgController<ZyPlanProcess, IZyP
queryWrapper.eq("station_id",stationid);
Page<ZyPlanProcess> page = new Page<ZyPlanProcess>(pageNo, pageSize);
IPage<ZyPlanProcess> pageList = zyPlanProcessService.page(page, queryWrapper);
for(int i = 0 ; i < pageList.getRecords().size() ; i++){
ZyProductPlan zyProductPlan = zyProductPlanService.getById(pageList.getRecords().get(i).getPlanId());
pageList.getRecords().get(i).setProductCode(zyProductPlan.getProductNo());
pageList.getRecords().get(i).setProductNo(zyProductPlan.getProductCode());
}
return Result.OK(pageList);
}

@ -96,6 +96,15 @@ public class ZyPlanProcess implements Serializable {
@TableField(exist = false)
private List<GroupxMemeberVo> userIdList;
@TableField(exist = false)
private String productNo;
@TableField(exist = false)
@Dict(dictTable = "zy_product", dicText = "product_name", dicCode = "product_code")
private String productCode;
/**
* 设备id列表
*/

@ -0,0 +1,14 @@
package org.jeecg.modules.productplan.entity.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecg.modules.productplan.entity.ZyPlanProcess;
@Data
@ApiModel(value="ZyPlanProcessVo", description="ZyPlanProcessVo")
public class ZyPlanProcessVo extends ZyPlanProcess {
@ApiModelProperty(value = "工序图片")
private String image;
}

@ -112,7 +112,7 @@ public class WorkOrderController extends JeecgController<WorkOrder, IWorkOrderSe
IPage<WorkOrder> pageList = workOrderService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
@ -126,7 +126,7 @@ public class WorkOrderController extends JeecgController<WorkOrder, IWorkOrderSe
workOrderService.save(workOrder);
return Result.OK("添加成功!");
}
/**
* 编辑
*
@ -140,7 +140,7 @@ public class WorkOrderController extends JeecgController<WorkOrder, IWorkOrderSe
workOrderService.updateById(workOrder);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
@ -154,7 +154,7 @@ public class WorkOrderController extends JeecgController<WorkOrder, IWorkOrderSe
workOrderService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
@ -168,7 +168,7 @@ public class WorkOrderController extends JeecgController<WorkOrder, IWorkOrderSe
this.workOrderService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
@ -186,6 +186,26 @@ public class WorkOrderController extends JeecgController<WorkOrder, IWorkOrderSe
return Result.OK(workOrder);
}
/**
* 通过orderCode查询
*
* @param orderCode
* @return
*/
@AutoLog(value = "工单订单完工-通过id查询")
@ApiOperation(value="工单订单完工-通过id查询", notes="工单订单完工-通过id查询")
@GetMapping(value = "/queryByOrderCode")
public Result<?> queryByOrderCode(@RequestParam(name="orderCode",required=true) String orderCode,HttpServletRequest req) {
WorkOrder workOrder = new WorkOrder();
QueryWrapper<WorkOrder> queryWrapper = QueryGenerator.initQueryWrapper(workOrder, req.getParameterMap());
queryWrapper.eq("product_code",orderCode);
workOrder = workOrderService.list(queryWrapper).get(0);
if(workOrder==null) {
return Result.error("未找到对应数据");
}
return Result.OK(workOrder);
}
/**
* 导出excel
*

Loading…
Cancel
Save