diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/RemoteDeviceService.java b/op-api/op-api-system/src/main/java/com/op/system/api/RemoteDeviceService.java index 95aa6590d..11d8c2f4c 100644 --- a/op-api/op-api-system/src/main/java/com/op/system/api/RemoteDeviceService.java +++ b/op-api/op-api-system/src/main/java/com/op/system/api/RemoteDeviceService.java @@ -3,6 +3,7 @@ package com.op.system.api; import com.op.common.core.constant.ServiceNameConstants; import com.op.common.core.domain.R; import com.op.system.api.domain.DataSourcePropertyDTO; +import com.op.system.api.domain.device.WorkOrderTangentDTO; import com.op.system.api.factory.RemoteDeviceFallbackFactory; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -41,4 +42,8 @@ public interface RemoteDeviceService { @PostMapping("/deviceTask/removeDatasource") public R removeDatasource(@RequestBody DataSourcePropertyDTO dataSourceProperty); + + //切线后创建当日新的点检工单 + @PostMapping("/deviceTask/createSpotCheckWorkOrder") + public R createSpotCheckWorkOrder(@RequestBody WorkOrderTangentDTO workOrderTangentDTO); } diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/domain/device/WorkOrderTangentDTO.java b/op-api/op-api-system/src/main/java/com/op/system/api/domain/device/WorkOrderTangentDTO.java new file mode 100644 index 000000000..4f437509c --- /dev/null +++ b/op-api/op-api-system/src/main/java/com/op/system/api/domain/device/WorkOrderTangentDTO.java @@ -0,0 +1,97 @@ +package com.op.system.api.domain.device; + +import com.op.common.core.web.domain.BaseEntity; +import java.util.List; + +/** + * 工单切线传输对象 workOrderTangent + * + * @author jgy + * @date 2024-11-7 + */ +public class WorkOrderTangentDTO extends BaseEntity { + private static final long serialVersionUID = 1L; + + private String planProdLine;//产线 + private String equipmentName;//设备名称 + private String equipmentCode;//设备编码 + private String factoryCode;//工厂 + + //jgy 新增 切线调拨 工单切线能用到的参数 + private String lineCode; + private List addLineCodes; + private String workOrderCode;//工单号 + private String changeLineType;//切线类型 + private List previousLineCodes;//之前的产线 + private List currentLineCodes;//现在的产线 + + public void setPlanProdLine(String planProdLine) { + this.planProdLine = planProdLine; + } + public String getPlanProdLine() { + return planProdLine; + } + + public void setEquipmentName(String equipmentName) { + this.equipmentName = equipmentName; + } + public String getEquipmentName() { + return equipmentName; + } + + public void setEquipmentCode(String equipmentCode) { + this.equipmentCode = equipmentCode; + } + public String getEquipmentCode() { + return equipmentCode; + } + + public void setFactoryCode(String factoryCode) { + this.factoryCode = factoryCode; + } + public String getFactoryCode() { + return factoryCode; + } + + public void setLineCode(String lineCode) { + this.lineCode = lineCode; + } + public String getLineCode() { + return lineCode; + } + + public void setAddLineCodes(List addLineCodes) { + this.addLineCodes = addLineCodes; + } + public List getAddLineCodes() { + return addLineCodes; + } + + public void setWorkOrderCode(String workOrderCode) { + this.workOrderCode = workOrderCode; + } + public String getWorkOrderCode() { + return workOrderCode; + } + + public void setChangeLineType(String changeLineType) { + this.changeLineType = changeLineType; + } + public String getChangeLineType() { + return changeLineType; + } + + public void setPreviousLineCodes(List previousLineCodes) { + this.previousLineCodes = previousLineCodes; + } + public List getPreviousLineCodes() { + return previousLineCodes; + } + + public void setCurrentLineCodes(List currentLineCodes) { + this.currentLineCodes = currentLineCodes; + } + public List getCurrentLineCodes() { + return currentLineCodes; + } +} diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteDeviceFallbackFactory.java b/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteDeviceFallbackFactory.java index 866b659c3..b36bf7cf7 100644 --- a/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteDeviceFallbackFactory.java +++ b/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteDeviceFallbackFactory.java @@ -57,6 +57,11 @@ public class RemoteDeviceFallbackFactory implements FallbackFactory addSpotCheckTask = new ArrayList<>(); + /** * 根据点检计划生成点检任务 **/ @@ -263,6 +280,102 @@ public class DeviceTaskServiceImpl implements IDeviceTaskService { logger.info("++++++++++++" + poolName + "++++点检结束++++++++++"); } + //切线后 创建点检工单 + public AjaxResult createSpotCheckWorkOrder(com.op.system.api.domain.device.WorkOrderTangentDTO workOrderTangentDTO) { + DynamicDataSourceContextHolder.push(workOrderTangentDTO.getFactoryCode());// 这是数据源的key + logger.info(workOrderTangentDTO.getFactoryCode() + "工厂切线接口传输参数:" + JSONArray.toJSONString(workOrderTangentDTO)); + DynamicDataSourceContextHolder.push(workOrderTangentDTO.getFactoryCode());// 这是数据源的key + EquPlan equPlan = new EquPlan(); + equPlan.setPlanType("spotInspection"); + List plans = deviceTaskMapper.getPlans(equPlan);//所有的 + List changeLineCodeList = workOrderTangentDTO.getAddLineCodes();//切线后的实际传过来的要新增的产线信息 + List addProducePlans = new ArrayList<>();//切线后,真正能生成的生产线 下面的设备的点检计划 + List addProduceLine = new ArrayList<>();//真正能生成的切线生产线 + + if(!CollectionUtils.isEmpty(changeLineCodeList) && !CollectionUtils.isEmpty(plans)){ + for(String lineCode : changeLineCodeList){ + for(EquPlan plan : plans){ + if(!StringUtils.isBlank(plan.getLineCode())){ + if(plan.getLineCode().equals(lineCode)){ + addProducePlans.add(plan); + logger.info(workOrderTangentDTO.getFactoryCode() + "工厂切线后新生成计划信息:" + JSONArray.toJSONString(plan)); + addProduceLine.add(lineCode); + } + } + } + } + } + addProduceLine = addProduceLine.stream().distinct().collect(Collectors.toList()); + logger.info(workOrderTangentDTO.getFactoryCode() + "工厂切线后新生成产线:" + JSONArray.toJSONString(addProduceLine)); + addSpotCheckTask = new ArrayList<>(); + + for (EquPlan plan : addProducePlans) { + EquOrder hasTask = deviceTaskMapper.getNewTaskOrder(plan); + if (hasTask == null || Integer.parseInt(plan.getPlanLoop()) <= hasTask.getDays() || checkHourTask(hasTask, plan)) { + //生成点检计划 + int m = this.createOrderPlan(plan); + if (m == 0) { + error("equ_order相关添加失败"); + return error(); + }else{ + + } + } + } + + logger.info("++++++++++++" + workOrderTangentDTO.getFactoryCode() + "++++切线后创建微信提醒开始++++++++++"); + this.spotCheckSendWeChat(addProduceLine,workOrderTangentDTO); + logger.info("++++++++++++" + workOrderTangentDTO.getFactoryCode() + "++++切线后创建微信提醒结束++++++++++"); + logger.info("++++++++++++" + workOrderTangentDTO.getFactoryCode() + "++++切线后创建点检工单流程结束++++++++++"); + return success(); + } + + private void spotCheckSendWeChat(List addProduceLine, WorkOrderTangentDTO workOrderTangentDTO) { + //发企业微信--------------------开始(跟班组有关) + SimpleDateFormat myFmt=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); //规范时间格式 + SysNoticeGroup noticeQo = new SysNoticeGroup(); + noticeQo.setNoticeId(24L); //id写死了? + List notices = equRepairOrderMapper.getNoticesGroup(noticeQo); + if(!CollectionUtils.isEmpty(notices)) { + List wecharts = new ArrayList<>(); + List userCodes = notices.stream() + .map(SysNoticeGroup::getUserCode) + .collect(Collectors.toList()); + for (SysNoticeGroup noticeDto : notices) { + WechartDTO wechart0 = new WechartDTO(); + wechart0.setUserId(noticeDto.getWxId()); + String contentInfo = noticeDto.getNoticeContent(); + + //在前端填的时候,需要判空!!!!!! + contentInfo = contentInfo + .replace("${n}", "\n") + .replace("${previousLines}", workOrderTangentDTO.getPreviousLineCodes() + "\n")//切线前产线 + .replace("${currentLines}", workOrderTangentDTO.getCurrentLineCodes() + "\n")//切线后产线 + .replace("${addLines}", addProduceLine + "\n")//新增产线 + .replace("${changeLineType}", workOrderTangentDTO.getChangeLineType())//切线类型 + .replace("${orderCode}", addSpotCheckTask + "")//点检工单号 + .replace("${workOrderCode}", workOrderTangentDTO.getWorkOrderCode());//工单号 + + //替换标签 + Pattern p= Pattern.compile("<[^>]+>"); + Matcher m = p.matcher(contentInfo); + contentInfo = m.replaceAll(""); + + wechart0.setText(contentInfo); + wecharts.add(wechart0); + } + logger.info(workOrderTangentDTO.getChangeLineType()+ "后,企业微信提醒维修请求:" + JSONObject.toJSONString(wecharts)); + if (!CollectionUtils.isEmpty(wecharts)) { + new Thread(() -> { + AjaxResult wxResult = remoteOpenService.sendWeChartMessage(wecharts); + logger.info("企业微信返回结果:" + JSONObject.toJSONString(wxResult)); + }).start(); + + } + logger.info("企业微信发送维修信息成功!"); + } + } + public void createPatrolCheckPlanFunc(String poolName) { DynamicDataSourceContextHolder.push(poolName);// 这是数据源的key /**equ_plan equ_plan_equ**/ @@ -345,6 +458,7 @@ public class DeviceTaskServiceImpl implements IDeviceTaskService { /**equ_order**/ sce = equOrderMapper.insertEquOrder(order); + addSpotCheckTask.add(orderCode);//新增点检任务 System.out.println(plan.getPlanCode() + "========equ_order:" + sce); /**equ_plan_equ_spare->equ_spare_apply*************************************************************/ EquPlanEquSpare equPlanEquSpare = new EquPlanEquSpare(); @@ -564,17 +678,11 @@ public class DeviceTaskServiceImpl implements IDeviceTaskService { List produceLine = new ArrayList<>(); for(String str : planProduceLine){ - str = str.substring(1, str.length() - 1); - String[] subArrays = str.split("],\\["); - for (String subArrayStr : subArrays) { - subArrayStr = subArrayStr.substring(1, subArrayStr.length() - 1); - String[] parts = subArrayStr.split("\",\""); - for (int i = 1 ; i < parts.length ; i++) { - if(i == parts.length - 1){ - planProduceLineCode.add(parts[i].replaceAll("\"", "")); - }else{ - planProduceLineCode.add(parts[i]); - } + JSONArray array = JSONArray.parseArray(str); + for (int i = 0; i < array.size(); i++) { + JSONArray subArray = (JSONArray) array.get(i); + for (int j = 1; j < subArray.size(); j++) { + planProduceLineCode.add(subArray.get(j).toString()); } } } @@ -595,8 +703,8 @@ public class DeviceTaskServiceImpl implements IDeviceTaskService { } produceLine = produceLine.stream().distinct().collect(Collectors.toList()); - logger.info(poolName + "工厂今日生成的产线:" + JSONArray.toJSONString(produceLine)); - logger.info(poolName + "工厂返回生成今日生产的产线点检计划信息:" + JSONArray.toJSONString(returnPlanList)); + logger.info("工厂:" + poolName + ",时间:" + DateUtils.getDate() + ",今日生产的产线:" + JSONArray.toJSONString(produceLine)); + logger.info("工厂:" + poolName + ",时间:" + DateUtils.getDate() + "凌晨,返回今日生成的点检计划信息:" + JSONArray.toJSONString(returnPlanList)); return returnPlanList; } diff --git a/op-modules/op-energy/src/main/java/com/op/energy/report/service/impl/DataAnalysisServiceImpl.java b/op-modules/op-energy/src/main/java/com/op/energy/report/service/impl/DataAnalysisServiceImpl.java index d0a40e1b6..d3954431a 100644 --- a/op-modules/op-energy/src/main/java/com/op/energy/report/service/impl/DataAnalysisServiceImpl.java +++ b/op-modules/op-energy/src/main/java/com/op/energy/report/service/impl/DataAnalysisServiceImpl.java @@ -1017,7 +1017,7 @@ public class DataAnalysisServiceImpl implements IDataAnalysisService { List reportOrderEnergyDTOList = reportPointDnbMapper.OrderEnergyList(reportOrderEnergyDTO); if (reportOrderEnergyDTOList != null && reportOrderEnergyDTOList.size() > 0) { for (int i = 0; i < reportOrderEnergyDTOList.size(); i++) { - if (reportOrderEnergyDTOList.get(i).getElectricityNo() != null && reportOrderEnergyDTOList.get(i).getStartWorkTime() != null && reportOrderEnergyDTOList.get(i).getEndWorkTime() != null) { + if ((reportOrderEnergyDTOList.get(i).getElectricityNo() != null && !reportOrderEnergyDTOList.get(i).getElectricityNo().isEmpty()) && reportOrderEnergyDTOList.get(i).getStartWorkTime() != null && reportOrderEnergyDTOList.get(i).getEndWorkTime() != null) { //获取这个工单所在产线的电表编号 String monitorid = reportOrderEnergyDTOList.get(i).getElectricityNo(); //获取这个工单的开始日期和结束日期 diff --git a/op-modules/op-mes/src/main/java/com/op/mes/service/impl/MesReportWorkServiceImpl.java b/op-modules/op-mes/src/main/java/com/op/mes/service/impl/MesReportWorkServiceImpl.java index b765b4650..fac6bee2d 100644 --- a/op-modules/op-mes/src/main/java/com/op/mes/service/impl/MesReportWorkServiceImpl.java +++ b/op-modules/op-mes/src/main/java/com/op/mes/service/impl/MesReportWorkServiceImpl.java @@ -490,19 +490,30 @@ public class MesReportWorkServiceImpl implements IMesReportWorkService { dto.setTotalWorkTime(sonMesReport.getTotalWorkTime().toString()); // 标准人均效率 实际产量/标准用人/标准工时 - BigDecimal manAvgStandard = new BigDecimal(realQua) - .divide(new BigDecimal(dto.getManStandard()),4,BigDecimal.ROUND_HALF_UP) - .divide(workTimeStandard,2,BigDecimal.ROUND_HALF_UP); - dto.setManAvgStandard(manAvgStandard.toString()); + BigDecimal manAvgStandard = null; + if(StringUtils.isNotBlank(dto.getManStandard())){ + manAvgStandard = new BigDecimal(realQua) + .divide(new BigDecimal(dto.getManStandard()),4,BigDecimal.ROUND_HALF_UP) + .divide(workTimeStandard,2,BigDecimal.ROUND_HALF_UP); + dto.setManAvgStandard(manAvgStandard.toString()); + }else{ + dto.setManAvgStandard("0"); + } + // 实际人均效率 实际产量/总工时 BigDecimal manAvgActual = new BigDecimal(realQua) .divide(sonMesReport.getTotalWorkTime(),2,BigDecimal.ROUND_HALF_UP); dto.setManAvgActual(manAvgActual.toString()); // 人均效率达成率 实际人均效率/标准人均效率 - BigDecimal manAvgDo = manAvgActual - .multiply(new BigDecimal("100.00")) - .divide(manAvgStandard,2,BigDecimal.ROUND_HALF_UP); - dto.setManAvgDo(manAvgDo.toString()+"%"); + if(manAvgStandard!=null){ + BigDecimal manAvgDo = manAvgActual + .multiply(new BigDecimal("100.00")) + .divide(manAvgStandard,2,BigDecimal.ROUND_HALF_UP); + dto.setManAvgDo(manAvgDo.toString()+"%"); + }else{ + dto.setManAvgDo("0%"); + } + } } diff --git a/op-modules/op-mes/src/main/resources/mapper/mes/MesPrepareDetailMapper.xml b/op-modules/op-mes/src/main/resources/mapper/mes/MesPrepareDetailMapper.xml index 64b4f86aa..3d415db2a 100644 --- a/op-modules/op-mes/src/main/resources/mapper/mes/MesPrepareDetailMapper.xml +++ b/op-modules/op-mes/src/main/resources/mapper/mes/MesPrepareDetailMapper.xml @@ -99,6 +99,7 @@ left join mes_prepare_detail mpd on mp.prepare_id = mpd.prepare_id where ow.product_date = #{productDateStr} and mpd.material_name not like '%白坯%' and mpd.material_name not like '%药液%' + and mpd.material_code not like '0000000208%' and mpd.recoil = #{recoil} and mp.del_flag = '0' and mpd.del_flag = '0' GROUP BY mpd.material_code, mpd.material_name, diff --git a/op-modules/op-mes/src/main/resources/mapper/mes/MesReportWorkMapper.xml b/op-modules/op-mes/src/main/resources/mapper/mes/MesReportWorkMapper.xml index 172db8696..e6891b733 100644 --- a/op-modules/op-mes/src/main/resources/mapper/mes/MesReportWorkMapper.xml +++ b/op-modules/op-mes/src/main/resources/mapper/mes/MesReportWorkMapper.xml @@ -689,9 +689,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bp.report_rate reportRate from base_equipment be left join pro_order_workorder pow on be.equipment_code = pow.workorder_name - left join mes_line_product mlp on pow.workorder_name = mlp.line_code and pow.product_code = mlp.product_code + left join mes_line_product mlp on pow.workorder_name = mlp.line_code and pow.product_code = mlp.product_code and mlp.del_flag='0' left join base_product bp on bp.product_code = pow.product_code - where be.del_flag = '0' and be.sap_code is not null and pow.status = 'w3' and mlp.del_flag='0' + where be.del_flag = '0' and be.sap_code is not null and pow.status in ('w2','w3') and pow.parent_order = '0' and pow.del_flag='0' and be.sap_name like concat('%', #{sapName}, '%') and be.workshop_code = #{workCenter} diff --git a/op-modules/op-open/src/main/java/com/op/open/service/impl/OpenServiceImpl.java b/op-modules/op-open/src/main/java/com/op/open/service/impl/OpenServiceImpl.java index 0627c90b9..a06451f94 100644 --- a/op-modules/op-open/src/main/java/com/op/open/service/impl/OpenServiceImpl.java +++ b/op-modules/op-open/src/main/java/com/op/open/service/impl/OpenServiceImpl.java @@ -1,8 +1,10 @@ package com.op.open.service.impl; +import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; +import com.alibaba.fastjson2.JSONWriter; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; import com.op.common.core.constant.Constants; import com.op.common.core.utils.DateUtils; @@ -792,23 +794,7 @@ public class OpenServiceImpl implements OpenService { return false; } - public static void main(String args[]){ -// // 创建两个日期时间对象 -// LocalDateTime dateTime1 = LocalDateTime.of(2024, 4, 18, 9, 33); // 2023年1月1日 10:30 -// LocalDateTime dateTime2 = LocalDateTime.now(); // 2023年1月2日 11:45 -// // 计算分钟差 -// long minutesBetween = Duration.between(dateTime1, dateTime2).toMinutes(); -// if(minutesBetween<=1){ -// System.out.println("++++++++++++检验任务1分钟内生成过,不再重复创建++++++++++++++"); -// } - int f = -100; - if(f != -100){ - System.out.println("-100"); - }else{ - System.out.println("0"); - } - } @Override public AjaxResult getDeliveryNoteDetail(Map paramMap) { diff --git a/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProOrderWorkorderMapper.java b/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProOrderWorkorderMapper.java index 6bdac342b..7e538326d 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProOrderWorkorderMapper.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProOrderWorkorderMapper.java @@ -260,5 +260,9 @@ public interface ProOrderWorkorderMapper { List getBatchList(String workorderId); int bpAddBatch(@Param("list") List orders); + + String getPreviousLineCode(String workorderId);//查询之前的产线 + + String getPlanLineCodes(String workorderId); } diff --git a/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderWorkorderServiceImpl.java b/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderWorkorderServiceImpl.java index 70055aa01..284857d25 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderWorkorderServiceImpl.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProOrderWorkorderServiceImpl.java @@ -21,8 +21,9 @@ import com.op.plan.domain.dto.SplitOrderDTO; import com.op.plan.domain.vo.CascaderDTO; import com.op.plan.mapper.*; import com.op.plan.service.IProOrderWorkorderService; +import com.op.system.api.RemoteDeviceService; import com.op.system.api.RemoteSapService; -import com.op.system.api.domain.SysSapLog; +import com.op.system.api.domain.device.WorkOrderTangentDTO; import com.op.system.api.domain.dto.MesPrepareDTO; import com.op.system.api.domain.dto.MesPrepareDetailDTO; import com.op.system.api.domain.sap.*; @@ -73,6 +74,9 @@ public class ProOrderWorkorderServiceImpl implements IProOrderWorkorderService { @Autowired private ProWhiteOrderMapper proWhiteOrderMapper; + @Autowired + private RemoteDeviceService remoteDeviceService; + /** * 查询生产工单 * @@ -926,6 +930,9 @@ public class ProOrderWorkorderServiceImpl implements IProOrderWorkorderService { @DS("#header.poolName") @Transactional public AjaxResult subChangeWorkOrderPro(SplitOrderDTO splitOrderDTO) { + //jgy 设备新增 + String planLineCodes = proOrderWorkorderMapper.getPlanLineCodes(splitOrderDTO.getProOrderWorkorder().getWorkorderId());//查询之前计划的产线范围 + // 获得子工单对象——(这里没有用BeanUtils是因为若依与这个冲突造成死循环得到错误的结果) ProOrderWorkorder proWorkOrder = splitOrderDTO.getProOrderWorkorder(); @@ -1095,10 +1102,14 @@ public class ProOrderWorkorderServiceImpl implements IProOrderWorkorderService { run = false; } } + + /*************************************设备模块 - 判断是否要生成新的点检工单开始************************************/ + String changeLineType = "工单切线"; + this.checkWhetherGenerateNewWorkOrder(splitOrderDTO , planLineCodes , changeLineType); + /*************************************设备模块 - 判断是否要生成新的点检工单结束************************************/ return success("变更成功"); } - return error(500, "批次号不能重复"); } @@ -1731,6 +1742,10 @@ public class ProOrderWorkorderServiceImpl implements IProOrderWorkorderService { @DS("#header.poolName") @Transactional public AjaxResult subChangeWorkOrderM(SplitOrderDTO splitOrderDTO) { + //jgy 设备新增 + //String previousLineCode = proOrderWorkorderMapper.getPreviousLineCode(splitOrderDTO.getProOrderWorkorder().getWorkorderId());//查询之前真正生产的产线 + String planLineCodes = proOrderWorkorderMapper.getPlanLineCodes(splitOrderDTO.getProOrderWorkorder().getWorkorderId());//查询之前计划的产线范围 + ProOrderWorkorder proWorkOrder = splitOrderDTO.getProOrderWorkorder(); proWorkOrder.setProdLineCode(JSONArray.toJSONString(splitOrderDTO.getProdLineCodeArray())); proWorkOrder.setUpdateBy(SecurityUtils.getUsername()); @@ -1750,9 +1765,74 @@ public class ProOrderWorkorderServiceImpl implements IProOrderWorkorderService { sonWorkOrder = proOrderWorkorderMapper.getSonWorkOrder(sonWorkOrder); } } + + /*************************************设备模块 - 判断是否要生成新的点检工单开始************************************/ + String changeLineType = "切线调拨"; + this.checkWhetherGenerateNewWorkOrder(splitOrderDTO,planLineCodes,changeLineType); + /*************************************设备模块 - 判断是否要生成新的点检工单结束************************************/ return success("变更成功"); } + private void checkWhetherGenerateNewWorkOrder(SplitOrderDTO splitOrderDTO, String planLineCodes,String changeLineType) { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String key = "#header.poolName"; + String poolName = request.getHeader(key.substring(8)); + + String [][] currentLineCodes = splitOrderDTO.getProdLineCodeArray();//现在的产线列表 + List currentLines = new ArrayList<>(); + List previousLines = new ArrayList<>(); + List addLines = new ArrayList<>();//新增的需要生成的产线 + + //处理现在的产线信息 prod_line_code + if(currentLineCodes.length > 0){ + for (int i = 0; i < currentLineCodes.length; i++) { + for (int j = 1; j < currentLineCodes[i].length; j++) { + currentLines.add(currentLineCodes[i][j]); + } + } + } + + //解析之前的 prod_line_code + if(!StringUtils.isBlank(planLineCodes)){ + JSONArray array = JSONArray.parseArray(planLineCodes); + for (int i = 0; i < array.size(); i++) { + JSONArray subArray = (JSONArray) array.get(i); + for (int j = 1; j < subArray.size(); j++) { + previousLines.add(subArray.get(j).toString()); + } + } + } + + //找出新增的 + for (String item : currentLines) { + if (!previousLines.contains(item)) { + addLines.add(item); + } +// if(StringUtils.isNotBlank(previousLineCode)){ +// if(!previousLineCode.equals(item)){ +// addLines.add(item); +// } +// } + } + + //去重 + addLines = addLines.stream().distinct().collect(Collectors.toList()); + + if(!CollectionUtils.isEmpty(addLines)){//如果 现在的产线是空 以前可能是空的 也可能不是空的 证明没有进行切线 + WorkOrderTangentDTO workOrderTangentDTO = new WorkOrderTangentDTO(); + workOrderTangentDTO.setWorkOrderCode(splitOrderDTO.getProOrderWorkorder().getWorkorderCode()); + workOrderTangentDTO.setFactoryCode(poolName); + workOrderTangentDTO.setAddLineCodes(addLines); + workOrderTangentDTO.setChangeLineType(changeLineType); + workOrderTangentDTO.setPreviousLineCodes(previousLines); + workOrderTangentDTO.setCurrentLineCodes(currentLines); + logger.info(poolName + "工厂进行切线,生成产线" + addLines + "的新点检信息"); + remoteDeviceService.createSpotCheckWorkOrder(workOrderTangentDTO); + }else{ + logger.info(poolName + "工厂进行切线,没有新产线需要点检。"); + } + } + public static void main(String args[]) { String s = "000800003044"; System.out.println(s.substring(3)); diff --git a/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderWorkorderMapper.xml b/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderWorkorderMapper.xml index 3f8b83cd6..0d8e8edfc 100644 --- a/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderWorkorderMapper.xml +++ b/op-modules/op-plan/src/main/resources/mapper/plan/ProOrderWorkorderMapper.xml @@ -1093,4 +1093,18 @@ and del_flag = '0' + + + + diff --git a/op-modules/op-quality/src/main/resources/mapper/quality/QcCheckTaskInventoryMapper.xml b/op-modules/op-quality/src/main/resources/mapper/quality/QcCheckTaskInventoryMapper.xml index fd1f31f9f..b33242223 100644 --- a/op-modules/op-quality/src/main/resources/mapper/quality/QcCheckTaskInventoryMapper.xml +++ b/op-modules/op-quality/src/main/resources/mapper/quality/QcCheckTaskInventoryMapper.xml @@ -304,7 +304,8 @@ and t.materialName like concat('%',#{materialName}, '%') and t.supplierCode like concat('%',#{supplierCode}, '%') and t.supplierName like concat('%',#{supplierName},'%') - + and CONVERT(varchar(10),t.incomeTime, 120) >= #{incomeTimeStart} + and #{incomeTimeEnd} > CONVERT(varchar(10),t.incomeTime, 120) order by t.incomeTime desc,t.materialCode diff --git a/op-modules/op-wms/src/main/java/com/op/wms/controller/OdsProcureOutOrderController.java b/op-modules/op-wms/src/main/java/com/op/wms/controller/OdsProcureOutOrderController.java index 5537ed77c..1ea09b221 100644 --- a/op-modules/op-wms/src/main/java/com/op/wms/controller/OdsProcureOutOrderController.java +++ b/op-modules/op-wms/src/main/java/com/op/wms/controller/OdsProcureOutOrderController.java @@ -147,4 +147,13 @@ public class OdsProcureOutOrderController extends BaseController { List list = odsProcureOutOrderService.listReturnDY(odsProcureOutOrder); return success(list); } + + + //特殊出库 + @PostMapping("/listckTS") + public TableDataInfo listckTS( OdsProcureOutOrder odsProcureOutOrder) { + startPage(); + List list = odsProcureOutOrderService.listckTS(odsProcureOutOrder); + return getDataTable(list); + } } diff --git a/op-modules/op-wms/src/main/java/com/op/wms/controller/WmsOdsMateStorageNewsController.java b/op-modules/op-wms/src/main/java/com/op/wms/controller/WmsOdsMateStorageNewsController.java index 53555a0c4..76db48a43 100644 --- a/op-modules/op-wms/src/main/java/com/op/wms/controller/WmsOdsMateStorageNewsController.java +++ b/op-modules/op-wms/src/main/java/com/op/wms/controller/WmsOdsMateStorageNewsController.java @@ -111,4 +111,10 @@ public class WmsOdsMateStorageNewsController extends BaseController { List list = wmsOdsMateStorageNewsService.selectWmsOdsMateStorageNewslsList(wmsOdsMateStorageNews); return getDataTable(list); } + @GetMapping("/listWmsOdsMateStorageNews") + public TableDataInfo listWmsOdsMateStorageNews(WmsOdsMateStorageNews wmsOdsMateStorageNews) { + startPage(); + List list = wmsOdsMateStorageNewsService.listWmsOdsMateStorageNews(wmsOdsMateStorageNews); + return getDataTable(list); + } } diff --git a/op-modules/op-wms/src/main/java/com/op/wms/mapper/OdsProcureOutOrderMapper.java b/op-modules/op-wms/src/main/java/com/op/wms/mapper/OdsProcureOutOrderMapper.java index ecfc8a14f..c4feace5e 100644 --- a/op-modules/op-wms/src/main/java/com/op/wms/mapper/OdsProcureOutOrderMapper.java +++ b/op-modules/op-wms/src/main/java/com/op/wms/mapper/OdsProcureOutOrderMapper.java @@ -151,4 +151,6 @@ public interface OdsProcureOutOrderMapper { List CKlist(OdsProcureOutOrder odsProcureOutOrder); void updateWMSOdsProcureOutOrdersapById(OdsProcureOutOrder order1); + + List listckTS(OdsProcureOutOrder odsProcureOutOrder); } diff --git a/op-modules/op-wms/src/main/java/com/op/wms/service/IOdsProcureOutOrderService.java b/op-modules/op-wms/src/main/java/com/op/wms/service/IOdsProcureOutOrderService.java index a3fa683c6..350190342 100644 --- a/op-modules/op-wms/src/main/java/com/op/wms/service/IOdsProcureOutOrderService.java +++ b/op-modules/op-wms/src/main/java/com/op/wms/service/IOdsProcureOutOrderService.java @@ -76,4 +76,6 @@ public interface IOdsProcureOutOrderService { List listReturnSC(OdsProcureOutOrder odsProcureOutOrder); List listReturnDY(OdsProcureOutOrder odsProcureOutOrder); + + List listckTS(OdsProcureOutOrder odsProcureOutOrder); } diff --git a/op-modules/op-wms/src/main/java/com/op/wms/service/IWmsOdsMateStorageNewsService.java b/op-modules/op-wms/src/main/java/com/op/wms/service/IWmsOdsMateStorageNewsService.java index 281209ae1..921468e30 100644 --- a/op-modules/op-wms/src/main/java/com/op/wms/service/IWmsOdsMateStorageNewsService.java +++ b/op-modules/op-wms/src/main/java/com/op/wms/service/IWmsOdsMateStorageNewsService.java @@ -62,4 +62,6 @@ public interface IWmsOdsMateStorageNewsService { String addBS(WmsOdsMateStorageNews wmsOdsMateStorageNews); List selectWmsOdsMateStorageNewslsList(WmsOdsMateStorageNews wmsOdsMateStorageNews); + + List listWmsOdsMateStorageNews(WmsOdsMateStorageNews wmsOdsMateStorageNews); } diff --git a/op-modules/op-wms/src/main/java/com/op/wms/service/impl/OdsProcureOrderServiceImpl.java b/op-modules/op-wms/src/main/java/com/op/wms/service/impl/OdsProcureOrderServiceImpl.java index fd6e55936..1b4dd2682 100644 --- a/op-modules/op-wms/src/main/java/com/op/wms/service/impl/OdsProcureOrderServiceImpl.java +++ b/op-modules/op-wms/src/main/java/com/op/wms/service/impl/OdsProcureOrderServiceImpl.java @@ -2462,86 +2462,89 @@ public class OdsProcureOrderServiceImpl implements IOdsProcureOrderService { public String NewConMaterialOutSCNew(List orderList, List gzList) { //orderList标识卡这个要·注意重复过账,,gzList注意重复过账--就判断是否有对应标识卡未过账,如果未过账就进行过账 String result="操作成功"; - String factoryCode = orderList.get(0).getFactoryCode(); - DynamicDataSourceContextHolder.push("ds_" + factoryCode); - //我可以在这个循环里面 - for (OdsProcureOutOrder odsProcureOutOrder : - orderList) { - //领料单,物料编号,领料单批次,物料名称,托盘号,出库数量,库位号, - String produceCode= odsProcureOutOrder.getProduceCode();//生产领料单号 - String createBy= odsProcureOutOrder.getCreateBy();//操作人 - String mateOrderInSnId= odsProcureOutOrder.getMateOrderInSnId(); - String waCode= odsProcureOutOrder.getWaCode(); - String whCode= odsProcureOutOrder.getWhCode(); - String wlCode= odsProcureOutOrder.getWlCode(); - String sn= odsProcureOutOrder.getSn(); - String materialCode= odsProcureOutOrder.getMaterialCode(); - String materialDesc= odsProcureOutOrder.getMaterialDesc(); - BigDecimal amount= odsProcureOutOrder.getAmount();//数量 - String userDefined1= odsProcureOutOrder.getUserDefined1();//单位 - String userDefined2= odsProcureOutOrder.getUserDefined2();//批次 - //包材明细表 - WmsOdsMateStorageNewsSn wmsOdsMateStorageNewsSn = wmsOdsMateStorageNewsSnMapper.selectWmsOdsMateStorageNewsSnByMateOrderInSnIdk(mateOrderInSnId); - //wms_raw_mission_out--保存 - //ods_procure_out_order--修改 + if(orderList.size()>0){ + String factoryCode = orderList.get(0).getFactoryCode(); + DynamicDataSourceContextHolder.push("ds_" + factoryCode); + //我可以在这个循环里面 + for (OdsProcureOutOrder odsProcureOutOrder : + orderList) { + //领料单,物料编号,领料单批次,物料名称,托盘号,出库数量,库位号, + String produceCode= odsProcureOutOrder.getProduceCode();//生产领料单号 + String createBy= odsProcureOutOrder.getCreateBy();//操作人 + String mateOrderInSnId= odsProcureOutOrder.getMateOrderInSnId(); + String waCode= odsProcureOutOrder.getWaCode(); + String whCode= odsProcureOutOrder.getWhCode(); + String wlCode= odsProcureOutOrder.getWlCode(); + String sn= odsProcureOutOrder.getSn(); + String materialCode= odsProcureOutOrder.getMaterialCode(); + String materialDesc= odsProcureOutOrder.getMaterialDesc(); + BigDecimal amount= odsProcureOutOrder.getAmount();//数量 + String userDefined1= odsProcureOutOrder.getUserDefined1();//单位 + String userDefined2= odsProcureOutOrder.getUserDefined2();//批次 + //包材明细表 + WmsOdsMateStorageNewsSn wmsOdsMateStorageNewsSn = wmsOdsMateStorageNewsSnMapper.selectWmsOdsMateStorageNewsSnByMateOrderInSnIdk(mateOrderInSnId); + //wms_raw_mission_out--保存 + //ods_procure_out_order--修改 // WCSInventoryPlan wcsInventoryPlan = new WCSInventoryPlan(); // wcsInventoryPlan.setSku(odsProcureOutOrder.getMaterialCode()); - // WmsOdsMateStorageNews wmsOdsMateStorageNews = wmsOdsMateStorageNewsMapper.selectBaseProductByCode(wcsInventoryPlan); - OdsProcureOutOrder order = new OdsProcureOutOrder(); - order.setProduceCode(produceCode);//领料单 - order.setMaterialCode(materialCode);// - order.setMaterialDesc(materialDesc); - order.setUserDefined1(userDefined2);//批次 - order.setUserDefined2(whCode); - order.setUserDefined3(wlCode); - order.setSn(sn); - order.setPlanNumber(amount); - order.setLocCode(waCode);//库区 - order.setID(IdUtils.fastSimpleUUID()); - order.setUnit(userDefined1); - order.setFactoryCode(factoryCode); - order.setActive("1"); - order.setCreateBy(createBy); - order.setCreateDate(new Date()); - OdsProcureOutOrder odsProcureOutOrder1=new OdsProcureOutOrder(); - odsProcureOutOrder1.setProduceCode(produceCode); - odsProcureOutOrder1.setMaterialCode(materialCode); - List odsProcureOutOrders = odsProcureOutOrderMapper.selectWmsOdsProcureOutOrder(odsProcureOutOrder1); - //包材出库单----会有特殊的那种二次过账的单子--就看前端会不会传对应的标识卡了 - OdsProcureOutOrder order1= odsProcureOutOrders.get(0); - order.setUserDefined4(order1.getUserDefined4()); - //出库明细 - odsProcureOutOrderMapper.insertWmsRawMissionOut(order); - //BigDecimal sapNumber =order1.getSapNumber(); - BigDecimal realityNumber1 = order1.getOutNumber();//累出库数 - BigDecimal realityNumber = order1.getPlanNumber();//计划 - BigDecimal planNumber = amount;//本次实际数量 - BigDecimal tem = realityNumber1.add(planNumber); - if (tem.compareTo(realityNumber)>= 0) { - order1.setOrderStatus("3");//3是满足出库数量 - } else { - order1.setOrderStatus("2"); - } - order1.setOutNumber(tem);//这样的话,就可以用已经过账的数量来计算要过账的数量,用出库数量减去已经过账的数量,就是要过账的数量,只要不为0,就可以进行 + // WmsOdsMateStorageNews wmsOdsMateStorageNews = wmsOdsMateStorageNewsMapper.selectBaseProductByCode(wcsInventoryPlan); + OdsProcureOutOrder order = new OdsProcureOutOrder(); + order.setProduceCode(produceCode);//领料单 + order.setMaterialCode(materialCode);// + order.setMaterialDesc(materialDesc); + order.setUserDefined1(userDefined2);//批次 + order.setUserDefined2(whCode); + order.setUserDefined3(wlCode); + order.setSn(sn); + order.setPlanNumber(amount); + order.setLocCode(waCode);//库区 + order.setID(IdUtils.fastSimpleUUID()); + order.setUnit(userDefined1); + order.setFactoryCode(factoryCode); + order.setActive("1"); + order.setCreateBy(createBy); + order.setCreateDate(new Date()); + OdsProcureOutOrder odsProcureOutOrder1=new OdsProcureOutOrder(); + odsProcureOutOrder1.setProduceCode(produceCode); + odsProcureOutOrder1.setMaterialCode(materialCode); + List odsProcureOutOrders = odsProcureOutOrderMapper.selectWmsOdsProcureOutOrder(odsProcureOutOrder1); + //包材出库单----会有特殊的那种二次过账的单子--就看前端会不会传对应的标识卡了 + OdsProcureOutOrder order1= odsProcureOutOrders.get(0); + order.setUserDefined4(order1.getUserDefined4()); + //出库明细 + odsProcureOutOrderMapper.insertWmsRawMissionOut(order); + //BigDecimal sapNumber =order1.getSapNumber(); + BigDecimal realityNumber1 = order1.getOutNumber();//累出库数 + BigDecimal realityNumber = order1.getPlanNumber();//计划 + BigDecimal planNumber = amount;//本次实际数量 + BigDecimal tem = realityNumber1.add(planNumber); + if (tem.compareTo(realityNumber)>= 0) { + order1.setOrderStatus("3");//3是满足出库数量 + } else { + order1.setOrderStatus("2"); + } + order1.setOutNumber(tem);//这样的话,就可以用已经过账的数量来计算要过账的数量,用出库数量减去已经过账的数量,就是要过账的数量,只要不为0,就可以进行 // order1.setSapNumber(sapNumber.add(planNumber));//原本的过账数量 - odsProcureOutOrderMapper.updateWmsOdsProcureOutOrder(order1);//订单修改--会超 - //明细 + odsProcureOutOrderMapper.updateWmsOdsProcureOutOrder(order1);//订单修改--会超 + //明细 // BigDecimal temk= wmsOdsMateStorageNewsSn.getAmount().subtract(amount); - wmsOdsMateStorageNewsSn.setOutNumber(amount); - wmsOdsMateStorageNewsSn.setLastModifiedBy(createBy); - wmsOdsMateStorageNewsSnMapper.updateWmsOdsMateStorageNewsSnAddoutNumber(wmsOdsMateStorageNewsSn);//库存明细--包材库存 - WmsOdsEmStorageNews wmsOdsEmStorageNews = new WmsOdsEmStorageNews(); - wmsOdsEmStorageNews.setWhCode(wmsOdsMateStorageNewsSn.getWhCode());//仓库编码 - wmsOdsEmStorageNews.setWlCode(wmsOdsMateStorageNewsSn.getWlCode());//库位编码 - wmsOdsEmStorageNews.setWaCode(wmsOdsMateStorageNewsSn.getWaCode()); - wmsOdsEmStorageNews.setProductBatch(wmsOdsMateStorageNewsSn.getUserDefined2()); - wmsOdsEmStorageNews.setMaterialCode(wmsOdsMateStorageNewsSn.getMaterialCode()); - wmsOdsEmStorageNews.setAmount(odsProcureOutOrder.getPlanNumber());//库存 - wmsOdsEmStorageNews.setLastModifiedBy(createBy); - wmsOdsMateStorageNewsSnMapper.updatekdd(wmsOdsEmStorageNews);//库存调整 + wmsOdsMateStorageNewsSn.setOutNumber(amount); + wmsOdsMateStorageNewsSn.setLastModifiedBy(createBy); + wmsOdsMateStorageNewsSnMapper.updateWmsOdsMateStorageNewsSnAddoutNumber(wmsOdsMateStorageNewsSn);//库存明细--包材库存 + WmsOdsEmStorageNews wmsOdsEmStorageNews = new WmsOdsEmStorageNews(); + wmsOdsEmStorageNews.setWhCode(wmsOdsMateStorageNewsSn.getWhCode());//仓库编码 + wmsOdsEmStorageNews.setWlCode(wmsOdsMateStorageNewsSn.getWlCode());//库位编码 + wmsOdsEmStorageNews.setWaCode(wmsOdsMateStorageNewsSn.getWaCode()); + wmsOdsEmStorageNews.setProductBatch(wmsOdsMateStorageNewsSn.getUserDefined2()); + wmsOdsEmStorageNews.setMaterialCode(wmsOdsMateStorageNewsSn.getMaterialCode()); + wmsOdsEmStorageNews.setAmount(odsProcureOutOrder.getPlanNumber());//库存 + wmsOdsEmStorageNews.setLastModifiedBy(createBy); + wmsOdsMateStorageNewsSnMapper.updatekdd(wmsOdsEmStorageNews);//库存调整 + } + // } - // + OdsProcureOutOrder order=new OdsProcureOutOrder(); List orderList1 = odsProcureOutOrderMapper.selectWmsOdsProcureOutOrderByOrderStatus(order); @@ -2550,6 +2553,10 @@ public class OdsProcureOrderServiceImpl implements IOdsProcureOrderService { OutboundPostingzcSAPGY(orderList1); } if (gzList.size()>0) { + for (OdsProcureOutOrder order1: + gzList) { + System.out.print("---------"+order1.getID()); + } OutboundPostingzcSAPGY(gzList); // List odsProcureOutOrders = odsProcureOutOrderMapper.selectWmsOdsProcureOutOrderByIDs(gzList); // if (odsProcureOutOrders.size()>0){ diff --git a/op-modules/op-wms/src/main/java/com/op/wms/service/impl/OdsProcureOutOrderServiceImpl.java b/op-modules/op-wms/src/main/java/com/op/wms/service/impl/OdsProcureOutOrderServiceImpl.java index 645862174..22b182444 100644 --- a/op-modules/op-wms/src/main/java/com/op/wms/service/impl/OdsProcureOutOrderServiceImpl.java +++ b/op-modules/op-wms/src/main/java/com/op/wms/service/impl/OdsProcureOutOrderServiceImpl.java @@ -241,4 +241,11 @@ public class OdsProcureOutOrderServiceImpl implements IOdsProcureOutOrderService List orderList = odsProcureOutOrderMapper.selectOdsProcureReturnOrderListZC(odsProcureOutOrder); return orderList; } + //特殊出库 + @Override + @DS("#header.poolName") + public List listckTS(OdsProcureOutOrder odsProcureOutOrder) { + List orderList = odsProcureOutOrderMapper.listckTS(odsProcureOutOrder); + return orderList; + } } diff --git a/op-modules/op-wms/src/main/java/com/op/wms/service/impl/WmsOdsMateStorageNewsServiceImpl.java b/op-modules/op-wms/src/main/java/com/op/wms/service/impl/WmsOdsMateStorageNewsServiceImpl.java index 49a7d28b2..a34ff4c56 100644 --- a/op-modules/op-wms/src/main/java/com/op/wms/service/impl/WmsOdsMateStorageNewsServiceImpl.java +++ b/op-modules/op-wms/src/main/java/com/op/wms/service/impl/WmsOdsMateStorageNewsServiceImpl.java @@ -212,6 +212,11 @@ public class WmsOdsMateStorageNewsServiceImpl implements IWmsOdsMateStorageNewsS return wmsOdsMateStorageNewsMapper.selectWmsOdsMateStorageNewslsList(wmsOdsMateStorageNews); } + @Override + public List listWmsOdsMateStorageNews(WmsOdsMateStorageNews wmsOdsMateStorageNews) { + return null; + } + public String dayin( List orderList) { // 定义请求的URL地址 String url = dayinUrl1; diff --git a/op-modules/op-wms/src/main/java/com/op/wms/service/impl/WmsProductPutServiceImpl.java b/op-modules/op-wms/src/main/java/com/op/wms/service/impl/WmsProductPutServiceImpl.java index e10cea4f8..d83c9614b 100644 --- a/op-modules/op-wms/src/main/java/com/op/wms/service/impl/WmsProductPutServiceImpl.java +++ b/op-modules/op-wms/src/main/java/com/op/wms/service/impl/WmsProductPutServiceImpl.java @@ -480,10 +480,7 @@ public class WmsProductPutServiceImpl implements IWmsProductPutService { wmsProductPutRecords.setCreateBy(SecurityUtils.getUsername()); wmsProductPutRecords.setCreateTime(new Date()); wmsProductPutRecordsMapper.insertWmsProductPutRecords(wmsProductPutRecords); - - WmsFpStorageNews wmsFpStorageNews = new WmsFpStorageNews(); - wmsFpStorageNews.setWhCode(mesReportWork.getWhCode());//仓库编码 // wmsFpStorageNews.setWlCode(mesReportWork.getWlCode()); wmsFpStorageNews.setStorageType("成品"); diff --git a/op-modules/op-wms/src/main/resources/mapper/wms/OdsProcureOutOrderMapper.xml b/op-modules/op-wms/src/main/resources/mapper/wms/OdsProcureOutOrderMapper.xml index b2b837f95..af5b5f935 100644 --- a/op-modules/op-wms/src/main/resources/mapper/wms/OdsProcureOutOrderMapper.xml +++ b/op-modules/op-wms/src/main/resources/mapper/wms/OdsProcureOutOrderMapper.xml @@ -1521,4 +1521,79 @@ set Sap_Number = #{order.sapNumber} where ID = #{order.ID} +