diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/OptionRecord.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/OptionRecord.java index aee0154a..d0d081e0 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/OptionRecord.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/utils/OptionRecord.java @@ -37,10 +37,10 @@ public class OptionRecord { bean.save(qlOption); } public static void recordAsync(OptionEnum type,String status, Buss classname, String order, T option){ - ThreadPoolExecutor EXECUTOR = SpringContextHolder.getBean("meshandlerPool"); - EXECUTOR.execute(()->{ - record(type,status,classname,order,option); - }); +// ThreadPoolExecutor EXECUTOR = SpringContextHolder.getBean("meshandlerPool"); +// EXECUTOR.execute(()->{ +// record(type,status,classname,order,option); +// }); } public static List getRecord(OptionRecordQuery query,final Class clazz){ IPdmQlOptionService bean = SpringContextHolder.getBean(IPdmQlOptionService.class); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/PdmProduceWorkorderController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/PdmProduceWorkorderController.java index 8de9ae34..d80c3fc0 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/PdmProduceWorkorderController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/PdmProduceWorkorderController.java @@ -3,6 +3,7 @@ package org.nl.wms.product_manage.controller.workorder; import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.github.pagehelper.Page; @@ -10,6 +11,7 @@ import com.github.pagehelper.PageHelper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.nl.common.TableDataInfo; import org.nl.common.anno.Log; import org.nl.common.domain.query.PageQuery; @@ -20,6 +22,7 @@ import org.nl.common.utils.RedissonUtils; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.wms.product_manage.service.device.IPdmBiDeviceService; +import org.nl.wms.product_manage.service.device.dao.PdmBiDevice; import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService; import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; import org.nl.wms.product_manage.service.workorder.dto.ReportQuery; @@ -48,7 +51,7 @@ import java.util.stream.Collectors; */ @RestController @RequiredArgsConstructor - + @RequestMapping("/api/produceWorkorder") @Slf4j @SaIgnore @@ -88,7 +91,7 @@ public class PdmProduceWorkorderController{ @PostMapping("/create") @Log("新增工单管理") - //("新增工单管理") + //("新增工单管理"):添加下发顺序 public ResponseEntity submit(@Validated @RequestBody JSONObject dto) { iPdmProduceWorkorderService.create(dto); return new ResponseEntity<>(HttpStatus.CREATED); @@ -123,12 +126,18 @@ public class PdmProduceWorkorderController{ @DeleteMapping public ResponseEntity delete(@RequestBody String[] ids) { if(ids != null && ids.length > 0) { - List workOrderList = iPdmProduceWorkorderService.list(new LambdaUpdateWrapper().in(PdmProduceWorkorder::getWorkorder_id, Arrays.asList(ids))); + List workOrderList = iPdmProduceWorkorderService + .list(new LambdaUpdateWrapper() + .in(PdmProduceWorkorder::getWorkorder_id, Arrays.asList(ids))); int size = workOrderList.stream().filter(r -> Objects.equals(r.getCreate_type(), StatusEnum.APSINTO.getCode())).collect(Collectors.toList()).size(); if(size > 0) { throw new BadRequestException("不允许删除aps工单"); } - iPdmProduceWorkorderService.update(new UpdateWrapper().set("is_delete", true).in("workorder_id", Arrays.asList(ids))); + long count = workOrderList.stream().filter(a -> !a.getWorkorder_status().equals(WorkerOrderEnum.CREATE.getCode())).count(); + if (count>0){ + throw new BadRequestException("删除失败:只能删除创建状态的工单"); + } + iPdmProduceWorkorderService.removeByIds(Arrays.asList(ids)); } return new ResponseEntity<>(HttpStatus.OK); } @@ -140,6 +149,22 @@ public class PdmProduceWorkorderController{ return new ResponseEntity<>(TableDataInfo.build(deviceService.getNotWorkDeviceByWorkproceduceId(param)), HttpStatus.CREATED); } + + @PostMapping("/getWorkDeviceByWorkproceduceId") + @Log("根据工序查询没有工单的设备") + //("根据工序查询没有工单的设备") + public ResponseEntity getWorkDeviceByWorkproceduceId(@RequestBody JSONObject param) { + QueryWrapper query = new QueryWrapper() + .eq("is_delete", '0'); + if (StringUtils.isNotEmpty(param.getString("workprocedure_id"))){ + query.eq("workprocedure_id",param.getString("workprocedure_id")); + } + if (StringUtils.isNotEmpty(param.getString("product_area"))){ + query.eq("product_area",param.getString("product_area")); + } + return new ResponseEntity<>(TableDataInfo.build(deviceService.list(query)), HttpStatus.CREATED); + } + @PostMapping("/forceFinish") @Log("工单强制完成") //("工单强制完成") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.java index c9dc3cda..355dee38 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.java @@ -2,17 +2,19 @@ package org.nl.wms.product_manage.service.workorder.dao.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; import org.nl.wms.analysis_manage.productCapacity.service.dto.ProductCapQuery; import org.nl.wms.analysis_manage.qlmanage.dto.QualityQuery; import org.nl.wms.analysis_manage.scrapRate.service.dto.ScrapRateQuery; import org.nl.wms.analysis_manage.workingGoods.service.dto.ByProcessQuery; -import org.nl.wms.device_manage.ios.service.structIvt.dto.StructIvtEmQuery; import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; import org.nl.wms.product_manage.service.workorder.dto.PdmProduceWorkorderDto; import org.nl.wms.product_manage.service.workorder.dto.WorkorderQuery; import java.util.List; import java.util.Map; +import java.util.Set; /** *

@@ -44,6 +46,16 @@ public interface PdmProduceWorkorderMapper extends BaseMapper entities); + Integer getMaxNo(@Param("device_code")String device_code,@Param("workorder_code")String workorder_code); + @Select("select min(aps_workorder_no) from pdm_produce_workorder " + + "where device_code = #{device_code} and workorder_status = #{workorder_status} ") + Integer getMinNo(@Param("device_code")String device_code,@Param("workorder_status")String workorder_status); + + List getMaxNos(Set devices); + + @Update("update pdm_produce_workorder set aps_workorder_no = aps_workorder_no-1 where device_code = #{device_code} and workorder_status = '1'") + void recursionNo(String device_code); + /** * 在制品分析 * diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.xml index 1e1e5b07..af28386e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderMapper.xml @@ -23,8 +23,8 @@ LEFT JOIN sys_user users ON users.user_id = ShiftOrder.current_produce_person_id LEFT JOIN pdm_bi_device device ON ShiftOrder.device_code = device.device_code WHERE - ShiftOrder.device_code is not null and ShiftOrder.current_produce_person_id is not null and - ShiftOrder.is_delete = '0' AND ShiftOrder.aps_work_type != 'S' + ShiftOrder.device_code is not null and + ShiftOrder.is_delete = '0' and ShiftOrder.workorder_code like concat('%',#{query.workorder_code},'%') @@ -275,7 +275,7 @@ and workorder.current_produce_person_id = #{optuser} - order by workorder_code desc + order by device_code desc,aps_workorder_no asc + + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java index 7b07b274..863baad2 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java @@ -78,6 +78,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.text.ParseException; import java.util.*; +import java.util.function.Predicate; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -173,10 +174,14 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl().eq("workorder_id", form.getString("workorder_id")).in("workorder_status", "1", "2", "4")); @@ -207,6 +214,10 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl list = this.list(new QueryWrapper() + .eq("device_code", device_code) + .eq("workorder_status", WorkerOrderEnum.CREATE.getCode()) + .ne("aps_workorder_no", 0) + .select("workorder_id") + .orderByAsc("aps_workorder_no")); + if (!CollectionUtils.isEmpty(list)){ + for (int i = 0; i < list.size(); i++) { + this.update(new UpdateWrapper() + .set("aps_workorder_no",i+1).eq("workorder_id",list.get(i).getWorkorder_id())); + } + } + } /** * 工单下发 */ @Override - public void down(List ids) { + @Transactional + public void + down(List ids) { if (ids == null || ids.size() == 0) { return; } List workorders = this.list(new QueryWrapper().in("workorder_id", ids)); //工单下发校验 checkWorkOrder(workorders); - List list = this.list(new QueryWrapper().nested(i -> i.isNull("workorder_code").or().eq("workorder_code", "0").or().eq("workorder_code", "").or().eq("material_id", "0").or().eq("workprocedure_id", "0").or().eq("create_type", "3")).in("workorder_id", ids)); - //aps排产完成的工单,生成工单编号再下发 - if (list.size() > 0) { - list.forEach(r -> { - UpdateWrapper updateWrapper = new UpdateWrapper(); - updateWrapper.eq("workorder_id", r.getWorkorder_id()); - //updateWrapper.set("workorder_code", CodeUtil.getNewCode("PDM_SHIFTORDER")); - updateWrapper.set("device_code", r.getDevice_code()); - updateWrapper.set("workprocedure_id", r.getWorkprocedure_id()); - updateWrapper.set("aps_update_flag", "M"); - updateWrapper.set("aps_update_inner_flag", "M"); - updateWrapper.set("aps_update_time", DateUtil.now()); - updateWrapper.set("update_time", DateUtil.now()); - updateWrapper.set("update_id", SecurityUtils.getCurrentUserId()); - updateWrapper.set("update_name", SecurityUtils.getCurrentNickName()); - this.update(updateWrapper); - }); - } +// List list = this.list(new QueryWrapper().nested(i -> i.isNull("workorder_code").or().eq("workorder_code", "0").or().eq("workorder_code", "").or().eq("material_id", "0").or().eq("workprocedure_id", "0").or().eq("create_type", "3")).in("workorder_id", ids)); +// //aps排产完成的工单,生成工单编号再下发 +// if (list.size() > 0) { +// list.forEach(r -> { +// UpdateWrapper updateWrapper = new UpdateWrapper(); +// updateWrapper.eq("workorder_id", r.getWorkorder_id()); +// //updateWrapper.set("workorder_code", CodeUtil.getNewCode("PDM_SHIFTORDER")); +// updateWrapper.set("device_code", r.getDevice_code()); +// updateWrapper.set("workprocedure_id", r.getWorkprocedure_id()); +// updateWrapper.set("aps_update_flag", "M"); +// updateWrapper.set("aps_update_inner_flag", "M"); +// updateWrapper.set("aps_update_time", DateUtil.now()); +// updateWrapper.set("update_time", DateUtil.now()); +// updateWrapper.set("update_id", SecurityUtils.getCurrentUserId()); +// updateWrapper.set("update_name", SecurityUtils.getCurrentNickName()); +// this.update(updateWrapper); +// }); +// } this.update(new UpdateWrapper().set("workorder_status", WorkerOrderEnum.SEND.getCode()).set("down_id", SecurityUtils.getCurrentUserId()).set("down_name", SecurityUtils.getCurrentNickName()).set("update_time", new Date()).set("down_time", new Date()).in("workorder_id", ids)); - this.recordWorkOrder(OptionRecord.OptionEnum.UPDATE, ids.toArray(new String[0])); + Set deviceCodes = workorders.stream().map(PdmProduceWorkorder::getDevice_code).collect(Collectors.toSet()); + for (String deviceCode : deviceCodes) { + this.sortNo(deviceCode); + } } //工单下发前校验 public void checkWorkOrder(List workorders) { //1.校验批量下发工单中是否存在已完成的/未绑定设备的工单/未绑定人员的 - boolean isFinished = workorders.stream().anyMatch(workorder -> Integer.parseInt(workorder.getWorkorder_status()) > 5 || Integer.parseInt(workorder.getWorkorder_status()) == 2 || StringUtils.isBlank(workorder.getDevice_code()) || StringUtils.isBlank(workorder.getCurrent_produce_person_id())); + boolean isFinished = workorders.stream().anyMatch(workorder -> Integer.parseInt(workorder.getWorkorder_status()) > 5 || Integer.parseInt(workorder.getWorkorder_status()) == 2|| workorder.getAps_workorder_no() == 0 || StringUtils.isBlank(workorder.getDevice_code())); if (isFinished) { - throw new BadRequestException("存在未分派人员或已下发或已完成或的工单,无法下发"); + throw new BadRequestException("当前工单未调整下发顺序或者已经下发,无法下发"); } //2.校验批量工单中是否有绑定相同设备 //工作顺序号排序 @@ -272,7 +303,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl> groupedWorkorders = workorders.stream().collect(Collectors.groupingBy(workorder -> workorder.getWorkprocedure_id() + "-" + workorder.getDevice_code())); @@ -283,7 +314,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl workorderList = this.list(new QueryWrapper().eq("workprocedure_id", workprocedureId).eq("workorder_status", WorkerOrderEnum.CREATE.getCode()).eq("create_type", 3).eq("device_code", deviceCode)); - Optional minWorkorder = workorderList.stream().min(Comparator.comparing(PdmProduceWorkorder::getAps_workorder_no)); - if (minWorkorder.isPresent()) { - min = minWorkorder.get().getAps_workorder_no(); - if (!Objects.equals(max, min)) { - if (max > min) { - throw new BadRequestException("存在下发顺序更小的工单,请优先下发"); + private void compareWorkorderNo(Integer max, String status, String deviceCode) { + Integer minNo = this.baseMapper.getMinNo(deviceCode,status); + if (minNo!=null){ + if (minNo == 0){ + throw new BadRequestException("设备"+deviceCode+"存在未调整的工单,请先调整在下发"); + } + if (!Objects.equals(max, minNo)) { + if (max > minNo) { + throw new BadRequestException("存在下发顺序更小的工单,请优先操作该工单"); } } } @@ -330,16 +361,26 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl ids) { if (ids == null || ids.size() == 0) { return; } - List list = this.list(new QueryWrapper().ne("workorder_status", WorkerOrderEnum.SEND.getCode()).in("workorder_id", ids)); - if (list.size() > 0) { + List list = this.list(new QueryWrapper().in("workorder_id", ids)); + boolean present = list.stream().filter(order -> !order.getWorkorder_status().equals(WorkerOrderEnum.SEND.getCode())).findAny().isPresent(); + if (present) { throw new BadRequestException("只有下发状态的工单才能取消下发"); } - this.update(new UpdateWrapper().set("workorder_status", WorkerOrderEnum.CREATE.getCode()).set("down_id", SecurityUtils.getCurrentUserId()).set("down_name", SecurityUtils.getCurrentNickName()).set("down_time", new Date()).in("workorder_id", ids)); - this.recordWorkOrder(OptionRecord.OptionEnum.UPDATE, ids.toArray(new String[0])); + this.update(new UpdateWrapper() + .set("workorder_status", WorkerOrderEnum.CREATE.getCode()) + .set("down_id", SecurityUtils.getCurrentUserId()) + .set("down_name", SecurityUtils.getCurrentNickName()) + .set("down_name", SecurityUtils.getCurrentNickName()) + .set("aps_workorder_no", 0) + .in("workorder_id", ids)); + for (PdmProduceWorkorder pdmProduceWorkorder : list) { + sortNo(pdmProduceWorkorder.getDevice_code()); + } } /** @@ -397,7 +438,8 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl 0) { one = reportList.get(0); } else { - throw new BadRequestException(param.getString("workorder_id") + "当前工单没有生成状态的报工记录"); + throw new BadRequestException("当前工单没有生成状态的报工记录"); } //Assert.notNull(one, param.getString("workorder_id") + "当前工单没有生成状态的报工记录"); workorder.setReport_qty(workorder.getReport_qty() == null ? BigDecimal.ZERO : workorder.getReport_qty()); @@ -636,6 +678,11 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl devices = data.stream().map(PdmProduceWorkorder::getDevice_code).collect(Collectors.toSet()); + for (String device_code : devices) { + sortNo(device_code); + } } } @@ -758,6 +810,11 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl devices = data.stream().map(PdmProduceWorkorder::getDevice_code).collect(Collectors.toSet()); + for (String device_code : devices) { + sortNo(device_code); + } } } } @@ -846,6 +907,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl() + .eq("workorder_id", param.getString("workorder_id"))); + compareWorkorderNo(workOrder.getAps_workorder_no(), WorkerOrderEnum.SEND.getCode(), workOrder.getDevice_code()); + JSONArray array = new JSONArray(); JSONObject order = packageForm(param); //开工时更新设备生产的物料规格 @@ -874,7 +940,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl().eq("workorder_id", param.getString("workorder_id"))); + workOrder.setWorkorder_status(WorkerOrderEnum.PRODUCTING.getCode()); workOrder.setRealproducestart_date(DateUtil.now().replace("-", "/")); //触发APS修改指令 diff --git a/mes/qd/src/views/wms/product_manage/workorder/index.vue b/mes/qd/src/views/wms/product_manage/workorder/index.vue index 132bce63..7c403439 100644 --- a/mes/qd/src/views/wms/product_manage/workorder/index.vue +++ b/mes/qd/src/views/wms/product_manage/workorder/index.vue @@ -365,7 +365,7 @@ clearable size="mini" style="width: 200px;" - @change="getNotWorkDeviceByWorkproceduceId(form.workprocedure_id)" + @change="getWorkDeviceByWorkproceduceId(form.workprocedure_id)" > - + + +