Merge branch 'dev-wuhan' into dev-wuhan-temp

tags/yfai-pcn-ext-v2.3
王杰 9 months ago
commit ab8cb55e4a

@ -0,0 +1,20 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
public interface IDcsForEquipmentService {
String doGetConsoleItemCode(String organizeCode,String barcode,String custCode,String custPlantCode,String workCenterCode, String workCellCode);
/**
*
* @param organizeCode
* @param barcode
* @param partNo
* @param result
* @param workCenterCode
* @param workCellCode
* @param custCode
* @return
*/
String doFillConsoleResultExt(String organizeCode,String barcode,String partNo,String result,String workCenterCode, String workCellCode,String custCode);
}

@ -14,6 +14,11 @@
<packaging>jar</packaging> <packaging>jar</packaging>
<dependencies> <dependencies>
<!-- CXF依赖 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
</dependency>
<dependency> <dependency>
<groupId>com.google.guava</groupId> <groupId>com.google.guava</groupId>
<artifactId>guava</artifactId> <artifactId>guava</artifactId>

@ -0,0 +1,59 @@
///**
// * Licensed to the Apache Software Foundation (ASF) under one
// * or more contributor license agreements. See the NOTICE file
// * distributed with this work for additional information
// * regarding copyright ownership. The ASF licenses this file
// * to you under the Apache ImppLicense, Version 2.0 (the
// * "ImppLicense"); you may not use this file except in compliance
// * with the ImppLicense. You may obtain a copy of the ImppLicense at
// *
// * http://www.apache.org/licenses/LICENSE-2.0
// *
// * Unless required by applicable law or agreed to in writing,
// * software distributed under the ImppLicense is distributed on an
// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// * KIND, either express or implied. See the ImppLicense for the
// * specific language governing permissions and limitations
// * under the ImppLicense.
// */
//package cn.estsh.i3plus.ext.mes.pcn.apiservice.config;
//
//
//
//import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.webservice.DcsForEquipmentServer;
//import org.apache.cxf.Bus;
//import org.apache.cxf.jaxws.EndpointImpl;
//import org.apache.cxf.transport.servlet.CXFServlet;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.web.servlet.ServletRegistrationBean;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import javax.xml.ws.Endpoint;
//
///**
// * @Description : WebService Server 服务配置
// * WSDL URL: /block/softswitch/server/web-service?wsdl
// * @Reference :
// * @Author : wei.peng
// * @CreateDate : 2019/9/10 下午3:13
// * @Modify:
// **/
//@Configuration
//public class WebServiceConfig {
//
// @Autowired
// private Bus bus;
//
// @Bean("cxfServletRegistration")
// public ServletRegistrationBean dispatcherServlet() {
// return new ServletRegistrationBean(new CXFServlet(), "/*");
// }
//
// @Bean
// public Endpoint endpoint() {
// EndpointImpl endpoint = new EndpointImpl(bus, new DcsForEquipmentServer());
// endpoint.publish("/DCSForEquipmentService");
// return endpoint;
// }
//}

@ -12,10 +12,7 @@ import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/** /**
* @Description: * @Description:
@ -32,7 +29,8 @@ public class MesCutRawErrorProofingController {
@PostMapping("/scan-sn") @PostMapping("/scan-sn")
@ApiOperation(value = "扫描裁片工单/原材料条码") @ApiOperation(value = "扫描裁片工单/原材料条码")
public ResultBean doScanSn(MesCutRawErrorProofingModel model) { public ResultBean doScanSn(@RequestBody MesCutRawErrorProofingModel model) {
try { try {
MesCutRawErrorProofingModel result = cutRawErrorProofingService.doScanSn(model); MesCutRawErrorProofingModel result = cutRawErrorProofingService.doScanSn(model);
return ResultBean.success(StringUtils.isEmpty(result.getShowInfo()) ? "扫描成功" : result.getShowInfo()).setResultObject(result); return ResultBean.success(StringUtils.isEmpty(result.getShowInfo()) ? "扫描成功" : result.getShowInfo()).setResultObject(result);
@ -74,7 +72,7 @@ public class MesCutRawErrorProofingController {
@PostMapping("/update-raw-length") @PostMapping("/update-raw-length")
@ApiOperation(value = "修改原材料条码长度") @ApiOperation(value = "修改原材料条码长度")
public ResultBean doUpdateLengthByScanSn(MesCutUpdateRawLengthModel model) { public ResultBean doUpdateLengthByScanSn(@RequestBody MesCutUpdateRawLengthModel model) {
try { try {
cutRawErrorProofingService.doUpdateLengthByScanSn(model); cutRawErrorProofingService.doUpdateLengthByScanSn(model);

@ -0,0 +1,23 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.model;
import lombok.Data;
/**
* GetConsoleItemCodeExt
*/
@Data
public class MesConsoleItemCodeExt {
//条码
private String barcode;
//客户编码
private String custCode;
//客户工厂
private String custPlantCode;
//装配线
private String assemblyLine;
//工位
private String location;
//工厂代码
private String organizeCode;
}

@ -0,0 +1,15 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.model;
import lombok.Data;
@Data
public class MesConsoleResultExt {
private String barcode;
private String partNO;
private String result;
private String assemblyLine;
private String location;
private String custCode;
private String organizeCode;
}

@ -3,19 +3,16 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionRecordService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionRecordService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService;
import cn.estsh.i3plus.platform.common.tool.JsonUtilTool;
import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.base.schedule.BaseImppScheduleJob; import cn.estsh.i3plus.pojo.model.wms.WmsJobParamModel;
import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.init.ApplicationProperties; import cn.estsh.impp.framework.boot.init.ApplicationProperties;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
@ -25,7 +22,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -55,25 +51,24 @@ public class MesReportNoSortJob extends BaseMesScheduleJob {
@Override @Override
@Transactional @Transactional
public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) {
JSONObject jsonObject= new JSONObject(); List<WmsJobParamModel> wmsJobParamModelList = JsonUtilTool.toList(this.getJobParam(), WmsJobParamModel.class);
if (!CollectionUtils.isEmpty(wmsJobParamModelList)) {
jsonObject.putIfAbsent("organizeCode", "CK01"); for (WmsJobParamModel wmsJobParamModel : wmsJobParamModelList) {
jsonObject.putIfAbsent("userName", "job"); try {
long startTime = System.currentTimeMillis();
String organizeCode = jsonObject.getStr("organizeCode");
String userName = jsonObject.getStr("userName");
if (null == organizeCode){
log.error("请添加需要报工的工厂代码!");
return;
}
if (null == userName){
userName = "JOB";
}
// 处理无工单 // 处理无工单
handlerNoOrder(organizeCode, userName); handlerNoOrder(wmsJobParamModel.getOrganizeCode(), "JOB");
// 处理有工单 // 处理有工单
handlerHasOrder(organizeCode, userName); handlerHasOrder(wmsJobParamModel.getOrganizeCode(), "JOB");
// } long endTime = System.currentTimeMillis();
log.info("工厂{}非排序报工JOB --- END --- 耗时: {} ms", wmsJobParamModel.getOrganizeCode(), endTime - startTime);
} catch (Exception e) {
log.info("工厂{}非排序报工JOB 执行失败{}", wmsJobParamModel.getOrganizeCode(), e);
}
}
}else{
log.info("非排序报工JOB 参数不能为空");
}
} }
private void handlerNoOrder(String organizeCode, String userName) { private void handlerNoOrder(String organizeCode, String userName) {

@ -48,6 +48,8 @@ public class MesReportSortJob extends BaseMesScheduleJob {
log.info("工厂{}排序报工job 执行失败{}", wmsJobParamModel.getOrganizeCode(), e); log.info("工厂{}排序报工job 执行失败{}", wmsJobParamModel.getOrganizeCode(), e);
} }
} }
}else{
log.info("排序报工job 参数不能为空");
} }
} }
} }

@ -0,0 +1,141 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IDcsForEquipmentService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.repository.*;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class DcsForEquipmentServiceImpl implements IDcsForEquipmentService {
@Autowired
private MesCustomerSnTransformService mesCustomerSnTransformService;
@Autowired
private MesProduceSnRepository mesProduceSnRao;
@Autowired
private MesConfigRepository mesConfigRao;
@Autowired
private MesPcScanLogRepository scanLogRao;
@Autowired
private MesCustomerPartRepository customerPartRao;
@Override
public String doGetConsoleItemCode(String organizeCode,String barcode, String custCode, String custPlantCode, String workCenterCode, String workCellCode) {
//通用二维码组成部分('RS'为记录分隔符ASCII:30'GS'为分组符ASCII:29,'EOT'为传输结束符ASCII:04)
//[)>+'RS'+06+'GS'+Y+vpps+'GS'+P+8位客户零件号+'GS'+12V+DUNS+'GS'+T+1位line num+1位班次号+2位年份+3位天数+1位追溯(精确追溯A批次追溯@)+2工程更改记录+2位自定义+4位流水号+'RS'+'EOT'
//如:[)>+'RS'+06+'GS'+Y+4110000000000X+'GS'+P+12345678+'GS'+12V+545295227+'GS'+T+1A13304A2B4C0001+'RS'+'EOT'
//包含ASCII码的条码 65位不包含的 58位
barcode = mesCustomerSnTransformService.transformBarCodeGm(barcode);
//todo 读取配置文件 获取工厂
if (StringUtils.isBlank(organizeCode)) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getStringEqualPack("ORGANIZE_CODE","cfgCode",ddlPackBean);
List<MesConfig> organizeConfig = mesConfigRao.findByHqlWhere(ddlPackBean);
if (!organizeConfig.isEmpty()) {
organizeCode = organizeConfig.get(0).getCfgValue();
}
}
//2.根据条码表查询一条,排序条码表条码唯一
DdlPackBean producePackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(barcode,"custSn",producePackBean);
DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), producePackBean);
List<MesProduceSn> produceSnList = mesProduceSnRao.findByHqlTopWhere(producePackBean, 1);
//4.如果在条码表中能查询出数据插入到scanMonitor一条记录
if (!produceSnList.isEmpty()) {
MesPcScanLog scanLog = new MesPcScanLog();
scanLog.setScanTime(TimeTool.getNowTime(true));
scanLog.setWorkCenterCode(workCenterCode);
scanLog.setWorkCellCode(workCellCode);
scanLog.setCustSn(barcode);
scanLog.setOrganizeCode(organizeCode);
ConvertBean.saveOrUpdate(scanLog,"JOB");
scanLogRao.insert(scanLog);
//4.返回客户条码
return produceSnList.get(0).getCustPartNo();
}
return "";
}
@Override
public String doFillConsoleResultExt(String organizeCode, String barcode, String partNo, String result, String workCenterCode, String workCellCode, String custCode) {
barcode = mesCustomerSnTransformService.transformBarCodeGm(barcode);
if (StringUtils.isBlank(organizeCode)) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getStringEqualPack("ORGANIZE_CODE","cfgCode",ddlPackBean);
List<MesConfig> organizeConfig = mesConfigRao.findByHqlWhere(ddlPackBean);
if (!organizeConfig.isEmpty()) {
organizeCode = organizeConfig.get(0).getCfgValue();
}
}
MesPcScanLog scanLog = new MesPcScanLog();
scanLog.setScanTime(TimeTool.getNowTime(true));
scanLog.setWorkCenterCode(workCenterCode);
scanLog.setWorkCellCode(workCellCode);
scanLog.setCustSn(barcode);
scanLog.setOrganizeCode(organizeCode);
scanLog.setRemark(partNo+":"+result);
ConvertBean.saveOrUpdate(scanLog,"JOB");
scanLogRao.insert(scanLog);
String erpPartNo = "";
//查询erp零件号 根据客户零件号
DdlPackBean custPartPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partNo,"custPartNo",custPartPackBean);
DdlPreparedPack.getStringEqualPack(custCode,"custCode",custPartPackBean);
List<MesCustomerPart> customerPartList = customerPartRao.findByHqlTopWhere(custPartPackBean, 1);
if (!customerPartList.isEmpty()){
erpPartNo = customerPartList.get(0).getErpPartNo();
}
if (StringUtils.isNotBlank(erpPartNo)){
//更新条码表的状态
//插入生产记录表
//插入装配件生产记录表
}
return "1";
}
private String createBarCode(String barcode){
String barcodeResult = "";
if (StringUtils.isEmpty(barcode)){
return barcodeResult;
}
//缺少了ascii码,根据规则拼接出来
//正常65 [)>06Y4110000000000XP2656085012V545238347T1A24269A2B4C0003
//异常58 [)>06Y4110000000000XP2656085012V545238347T1A24269A2B4C0003
if (barcode.length() == 58){
String part1 = barcode.substring(0, 3);
String part2 = barcode.substring(3, 5);
String part3 = barcode.substring(5, 20);
String part4 = barcode.substring(20, 29);
String part5 = barcode.substring(29,41);
String part6 = barcode.substring(41);
barcodeResult = part1 + (char)30 + part2 +(char)29 + part3 + (char)29 + part4 +(char)29 + part5 +(char)29 + part6 + (char)30 + (char)04;
}
return barcodeResult;
}
}

@ -85,9 +85,8 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
//【排序线】获取生产工单装配件清单 //【排序线】获取生产工单装配件清单
List<MesWorkOrderAssembly> workOrderAssemblyList = filterWorkOrderAssemblyList(getWorkOrderAssemblyList(prodRuleContext), prodRuleContext.getEquipmentCode()); List<MesWorkOrderAssembly> workOrderAssemblyList = filterWorkOrderAssemblyList(getWorkOrderAssemblyList(prodRuleContext), prodRuleContext.getEquipmentCode());
// 显示前道所有工序装配件工步: 不携带工位 // 搜集非已装配的数据
workOrderAssemblyList = !StringUtils.isEmpty(prodRuleContext.getWorkCellCode()) ? workOrderAssemblyList : workOrderAssemblyList = workOrderAssemblyList.stream().filter(o -> (null != o && o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue()) != 0)).collect(Collectors.toList());
workOrderAssemblyList.stream().filter(o -> (null != o && o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue()) != 0)).collect(Collectors.toList());
if (CollectionUtils.isEmpty(workOrderAssemblyList)) return null; if (CollectionUtils.isEmpty(workOrderAssemblyList)) return null;

@ -415,6 +415,14 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
} }
if (Objects.isNull(srcLocateNo)) { if (Objects.isNull(srcLocateNo)) {
srcLocateNo = configService.getCfgValue(org, "LGORT"); srcLocateNo = configService.getCfgValue(org, "LGORT");
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean);
MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean);
if (version != null) {
srcLocateNo = version.getShipInventoryPoint();
}
} }
if (model.getOptType() != 2) { if (model.getOptType() != 2) {
//移库 //移库
@ -480,7 +488,17 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
//移库 //移库
if (model.getOptType() != 2) { if (model.getOptType() != 2) {
MesMove move = createMove(model, configService.getCfgValue(org, "LGORT"), configService.getCfgValue(org, "UMLGO"), org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode()); String srcLocateNo = configService.getCfgValue(org, "LGORT");
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean);
MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean);
if (version != null) {
srcLocateNo = version.getShipInventoryPoint();
}
MesMove move = createMove(model, srcLocateNo, configService.getCfgValue(org, "UMLGO"), org, null == produceSn ? model.getWorkCenterCode() : produceSn.getWorkCenterCode());
moveRepository.save(move); moveRepository.save(move);
} }
@ -734,10 +752,10 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
* @return * @return
*/ */
private MesMove createMove(MesPartInspectionInputModel model, String source, String target, String org, String workCenterCode) { private MesMove createMove(MesPartInspectionInputModel model, String source, String target, String org, String workCenterCode) {
if (StringUtils.isEmpty(model.getUserInfo())) model.setUserInfo("系统");
GenSerialNoModel serialNoModel = new GenSerialNoModel("INPUT_DEFECT_ZRSUM"); GenSerialNoModel serialNoModel = new GenSerialNoModel("INPUT_DEFECT_ZRSUM");
serialNoModel.setPartNo(model.getPart().getPartNo()); serialNoModel.setPartNo(model.getPart().getPartNo());
// ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, AuthUtil.getSessionUser().getUserName(), org, 1); ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, model.getUserInfo(), org, 1);
ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, "系统", org, 1);
String zrsum = ""; String zrsum = "";
if (null != rb && !CollectionUtils.isEmpty(rb.getResultList())) { if (null != rb && !CollectionUtils.isEmpty(rb.getResultList())) {
zrsum = (rb.getResultList().get(0)).toString(); zrsum = (rb.getResultList().get(0)).toString();
@ -758,8 +776,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
move.setMoveType(MesExtEnumUtil.MOVE_TYPE.SUSPICIOUS_MOVE.getValue()); move.setMoveType(MesExtEnumUtil.MOVE_TYPE.SUSPICIOUS_MOVE.getValue());
move.setProductSn(model.getSn()); move.setProductSn(model.getSn());
move.setWorkCenter(prodOrgExtService.getErpWorkCenterCode(org, workCenterCode)); move.setWorkCenter(prodOrgExtService.getErpWorkCenterCode(org, workCenterCode));
// ConvertBean.serviceModelInitialize(move, AuthUtil.getSessionUser().getUserName()); ConvertBean.serviceModelInitialize(move, model.getUserInfo());
ConvertBean.serviceModelInitialize(move, "系统");
return move; return move;
} }
@ -935,7 +952,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
private List<MesPartInspectionDetail> checkPartInspectionDetail(MesPartInspection partInspection, String org) { private List<MesPartInspectionDetail> checkPartInspectionDetail(MesPartInspection partInspection, String org) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); DdlPackBean packBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getNumEqualPack(partInspection.getId(), "pid", packBean); DdlPreparedPack.getNumEqualPack(partInspection.getId(), MesPcnExtConstWords.PID, packBean);
List<MesPartInspectionDetail> detailList = partInspectionDetailRepository.findByHqlWhere(packBean); List<MesPartInspectionDetail> detailList = partInspectionDetailRepository.findByHqlWhere(packBean);
return detailList; return detailList;
@ -945,7 +962,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
public void saveSusPartInspection(MesPartInspectionInputModel model, String org) { public void saveSusPartInspection(MesPartInspectionInputModel model, String org) {
MesPartInspection partInspection = new MesPartInspection(); MesPartInspection partInspection = new MesPartInspection();
BeanUtils.copyProperties(model, partInspection); BeanUtils.copyProperties(model, partInspection, MesPcnExtConstWords.ID);
partInspection.setInspectionStatus(MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue()); partInspection.setInspectionStatus(MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue());
partInspection.setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.CREATE.getValue()); partInspection.setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.CREATE.getValue());
partInspection.setOrganizeCode(org); partInspection.setOrganizeCode(org);
@ -959,8 +976,8 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
partInspection.setDefectTypeCode(defectType.getDefectTypeCode()); partInspection.setDefectTypeCode(defectType.getDefectTypeCode());
partInspection.setDefectTypeId(defectType.getId()); partInspection.setDefectTypeId(defectType.getId());
ConvertBean.serviceModelInitialize(partInspection, model.getUserInfo());
partInspectionRepository.save(partInspection); partInspection = partInspectionRepository.insert(partInspection);
log.info("生成的缺陷记录id ={}", partInspection); log.info("生成的缺陷记录id ={}", partInspection);
MesPartInspectionDetail detail = new MesPartInspectionDetail(); MesPartInspectionDetail detail = new MesPartInspectionDetail();
@ -974,7 +991,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
detail.setDefectTypeName(defectType.getDefectTypeName()); detail.setDefectTypeName(defectType.getDefectTypeName());
detail.setId(null); detail.setId(null);
detail.setOrganizeCode(org); detail.setOrganizeCode(org);
ConvertBean.serviceModelInitialize(detail, "系统"); ConvertBean.serviceModelInitialize(detail, model.getUserInfo());
partInspectionDetailRepository.insert(detail); partInspectionDetailRepository.insert(detail);
// //
String source = configService.getCfgValue(org, "LGORT"); String source = configService.getCfgValue(org, "LGORT");
@ -996,7 +1013,7 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService
} }
} }
MesMove move = createMove(model, source, configService.getCfgValue(org, "UMLGO"), org, model.getWorkCenterCode()); MesMove move = createMove(model, source, configService.getCfgValue(org, "UMLGO"), org, model.getWorkCenterCode());
moveRepository.save(move); moveRepository.insert(move);
} }
@ApiOperation(value = "客退品查询") @ApiOperation(value = "客退品查询")

@ -397,8 +397,17 @@ public class MesNcProcessingService implements IMesNcProcessingService {
partInspectionRepository.save(model.getPartInspection()); partInspectionRepository.save(model.getPartInspection());
String target = configService.getCfgValue(org, "LGORT");
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getStringEqualPack(model.getPart().getPartNo(), "partNo", ddlPackBean);
MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean);
if (version != null) {
target = version.getShipInventoryPoint();
}
//移库 转正常、放行8000移至2000 //移库 转正常、放行8000移至2000
MesMove move = createMove(model, sourceValue, configService.getCfgValue(org, "LGORT"), org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.NORMAL_MOVE); MesMove move = createMove(model, sourceValue, target, org, null == sn ? workCenterCode : sn.getWorkCenterCode(), MesExtEnumUtil.MOVE_TYPE.NORMAL_MOVE);
ConvertBean.serviceModelInitialize(move,model.getUserName()); ConvertBean.serviceModelInitialize(move,model.getUserName());
moveRepository.save(move); moveRepository.save(move);

@ -10,7 +10,6 @@ import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrder; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrder;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
@ -160,10 +159,11 @@ public class MesProduceSnExtService implements IMesProduceSnExtService {
@Override @Override
public void saveProduceSnList(StationRequestBean reqBean, Integer snStatus, List<Long> idList) { public void saveProduceSnList(StationRequestBean reqBean, Integer snStatus, List<Long> idList) {
idList = CollectionUtils.isEmpty(idList) ? idList : idList.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
DdlPackBean packBean = new DdlPackBean(); if (CollectionUtils.isEmpty(idList)) return;
DdlPreparedPack.getStringEqualPack(reqBean.getOrganizeCode(), MesPcnExtConstWords.ORGANIZE_CODE, packBean); DdlPackBean packBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode());
DdlPreparedPack.getInPackList(idList, MesPcnExtConstWords.ID, packBean); if (idList.size() == 1) DdlPreparedPack.getNumEqualPack(idList.get(0), MesPcnExtConstWords.ID, packBean);
else DdlPreparedPack.getInPackList(idList, MesPcnExtConstWords.ID, packBean);
produceSnRepository.updateByProperties( produceSnRepository.updateByProperties(
new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.WORK_CENTER_CODE, MesPcnExtConstWords.WORK_CELL_CODE, MesPcnExtConstWords.SN_STATUS}, new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.WORK_CENTER_CODE, MesPcnExtConstWords.WORK_CELL_CODE, MesPcnExtConstWords.SN_STATUS},
new Object[]{reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), snStatus}, new Object[]{reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), snStatus},

@ -7,6 +7,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPullingOrderInfoService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.Pager;
@ -185,6 +186,7 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService {
pullingOrderInfo.setPullingOrderPartInfos(pullingOrderPartInfos); pullingOrderInfo.setPullingOrderPartInfos(pullingOrderPartInfos);
} }
pullingOrderInfo.setPrintTime(TimeTool.getNowTime(true));
pullingOrderInfo.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); pullingOrderInfo.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue());
ConvertBean.serviceModelUpdate(pullingOrderInfo, userName); ConvertBean.serviceModelUpdate(pullingOrderInfo, userName);
} }

@ -128,11 +128,15 @@ public class MesRawPartChargingServiceImpl implements IMesRawPartChargingService
if (!CollectionUtils.isEmpty(mesRawPartCharging)) { if (!CollectionUtils.isEmpty(mesRawPartCharging)) {
MesPcnException.throwMesBusiException("料筒条码【%s】与原料条码【%s】已绑定", mesRawPartChargingModel.getPackageSn(), mesRawPartCharging.iterator().next().getSn()); MesPcnException.throwMesBusiException("料筒条码【%s】与原料条码【%s】已绑定", mesRawPartChargingModel.getPackageSn(), mesRawPartCharging.iterator().next().getSn());
} }
//保存生产控制加料 //保存生产控制加料 43302 加料防错扫码流程优化
String[] split = mesRawPartChargingModel.getSn().split(",");
for (String sn : split) {
mesRawPartChargingModel.setSn(sn);
MesRawPartCharging charging = insertRawPartCharging(mesRawPartChargingModel); MesRawPartCharging charging = insertRawPartCharging(mesRawPartChargingModel);
//保存日志 //保存日志
saveLog(mesRawPartChargingModel, charging, MesExtEnumUtil.CHARGING_LOG_STATUS.FEEDING); saveLog(mesRawPartChargingModel, charging, MesExtEnumUtil.CHARGING_LOG_STATUS.FEEDING);
} }
}
public void doMesRawPartChargingInit(MesRawPartChargingModel mesRawPartChargingModel) { public void doMesRawPartChargingInit(MesRawPartChargingModel mesRawPartChargingModel) {

@ -179,7 +179,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(org); DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(org);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue(), "status", orderPackBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue(), "status", orderPackBean);
DdlPreparedPack.getStringEqualPack(shippingGroupNo, "shippingGroupCode", orderPackBean); DdlPreparedPack.getStringEqualPack(shippingGroupNo, "shippingGroupCode", orderPackBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"seq"}, orderPackBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"seq"}, orderPackBean);
return shippingOrderManagementRepository.getByProperty(orderPackBean); return shippingOrderManagementRepository.getByProperty(orderPackBean);
} }
@ -395,14 +395,19 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
DdlPackBean packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode()); DdlPackBean packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(orderManagement.getShippingCode(),"shippingCode",packBean); DdlPreparedPack.getStringEqualPack(orderManagement.getShippingCode(),"shippingCode",packBean);
MesLoadingListDetail listDetail = listDetailRepository.getByProperty(packBean); MesLoadingListDetail listDetail = listDetailRepository.getByProperty(packBean);
MesLoadingList loadingList = null;
if(!Objects.isNull(listDetail)){ if(!Objects.isNull(listDetail)){
packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode()); packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(listDetail.getPid(), "id", packBean); DdlPreparedPack.getNumEqualPack(listDetail.getPid(), "id", packBean);
MesLoadingList loadingList = listRepository.getByProperty(packBean); loadingList = listRepository.getByProperty(packBean);
if(!Objects.isNull(loadingList)){ if(!Objects.isNull(loadingList)){
orderManagement.setOrderCode(loadingList.getOrderCode()); orderManagement.setOrderCode(loadingList.getOrderCode());
orderManagement.setLoadingListId(loadingList.getId()); orderManagement.setLoadingListId(loadingList.getId());
} }
//更新装车单明细对应的发运单状态=发运
listDetail.setStatus(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue());
ConvertBean.serviceModelUpdate(listDetail, userInfo);
listDetailRepository.update(listDetail);
} }
//发运单状态修改为校验完成 //发运单状态修改为校验完成
orderManagement.setSystemSyncStatus(CommonEnumUtil.FALSE); orderManagement.setSystemSyncStatus(CommonEnumUtil.FALSE);
@ -422,18 +427,17 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
//根据扫描的条码查询条码是否存在 //根据扫描的条码查询条码是否存在
packBean = DdlPackBean.getDdlPackBean(organizeCode); packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) { if (Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) {
DdlPreparedPack.getStringEqualPack(detail.getBarcode(), "productSn", packBean); DdlPreparedPack.getStringEqualPack(detail.getBarcode(), "custSn", packBean);
} else { } else {
List<MesShippingOrderManagementDetail> mesShippingOrderManagementDetails = custInfoSeqMap.get(detail.getCustInfoSeq()); List<MesShippingOrderManagementDetail> mesShippingOrderManagementDetails = custInfoSeqMap.get(detail.getCustInfoSeq());
MesShippingOrderManagementDetail managementDetail = mesShippingOrderManagementDetails.get(0); MesShippingOrderManagementDetail managementDetail = mesShippingOrderManagementDetails.get(0);
detail.setRemark(managementDetail.getRemark()); detail.setRemark(managementDetail.getRemark());
detail.setStatus(managementDetail.getStatus()); detail.setStatus(managementDetail.getStatus());
detail.setBarcode(managementDetail.getBarcode()); detail.setBarcode(managementDetail.getBarcode());
DdlPreparedPack.getStringEqualPack(detail.getBarcode(), "productSn", packBean); detail.setVisualOrderNo(managementDetail.getVisualOrderNo());
DdlPreparedPack.getStringEqualPack(detail.getBarcode(), "custSn", packBean);
} }
detail.setSystemSyncStatus(CommonEnumUtil.FALSE); //更新条码信息,更新目视单信息
detail.setActualQty(1);
ConvertBean.serviceModelUpdate(detail, userInfo);
if(!StringUtils.isEmpty(detail.getBarcode()) && !Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)){ if(!StringUtils.isEmpty(detail.getBarcode()) && !Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)){
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean);
MesProduceSn produceSn = produceSnRepository.getByProperty(packBean); MesProduceSn produceSn = produceSnRepository.getByProperty(packBean);
@ -447,6 +451,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
if(!StringUtils.isEmpty(detail.getVisualOrderNo())){ if(!StringUtils.isEmpty(detail.getVisualOrderNo())){
MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(organizeCode, detail.getVisualOrderNo()); MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(organizeCode, detail.getVisualOrderNo());
if(!Objects.isNull(workOrder)){ if(!Objects.isNull(workOrder)){
workOrder.setShippingTime(TimeTool.getNowTime(true));
workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue()); workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.SHIPPING.getValue());
produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE); produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(workOrder, userInfo); ConvertBean.serviceModelUpdate(workOrder, userInfo);
@ -454,7 +459,13 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
} }
} }
} }
//条码格式(扫描目视单,扫描条码)
if(!StringUtil.isEmpty(detail.getVisualOrderNo())){
detail.setBarcode(new StringJoiner(MesPcnExtConstWords.COMMA).add(detail.getVisualOrderNo()).add(detail.getBarcode()).toString());
}
detail.setSystemSyncStatus(CommonEnumUtil.FALSE);
detail.setActualQty(MesPcnExtConstWords.ONE);
ConvertBean.serviceModelUpdate(detail, userInfo);
} }
//更新条码 //更新条码
if(!CollectionUtils.isEmpty(produceSnList)){ if(!CollectionUtils.isEmpty(produceSnList)){
@ -467,15 +478,9 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
//更新发运单 //更新发运单
ConvertBean.serviceModelUpdate(orderManagement,userInfo); ConvertBean.serviceModelUpdate(orderManagement,userInfo);
update(orderManagement); update(orderManagement);
//不记忆时更新明细
if (!StringUtils.isEmpty(orderManagement.getIsEnableMemory()) && !Objects.equals(orderManagement.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)){
shippingOrderManagementDetailRepository.saveAll(orderManagementDetailList); shippingOrderManagementDetailRepository.saveAll(orderManagementDetailList);
//1.更新装车单明细对应的发运单状态=发运
DdlPackBean vehiclesOrderDetailPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(orderManagement.getShippingCode(), "shippingCode", vehiclesOrderDetailPackBean);
MesLoadingListDetail vehiclesOrderDetail = vehiclesOrderDetailRepository.getByProperty(vehiclesOrderDetailPackBean);
if(!StringUtil.isEmpty(vehiclesOrderDetail)){
vehiclesOrderDetail.setStatus(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue());
ConvertBean.serviceModelUpdate(vehiclesOrderDetail, userInfo);
vehiclesOrderDetailRepository.save(vehiclesOrderDetail);
} }
if(StringUtils.isEmpty(orderManagement.getOrderCode()) || StringUtils.isEmpty(orderManagement.getLoadingListId())){ if(StringUtils.isEmpty(orderManagement.getOrderCode()) || StringUtils.isEmpty(orderManagement.getLoadingListId())){
//发送数据给辊道线 //发送数据给辊道线
@ -502,9 +507,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
//保存当前发运单明细报工 //保存当前发运单明细报工
jisShippingRepository.saveAll(getMesJisShippings(mesShippingOrderManagement,userInfo)); jisShippingRepository.saveAll(getMesJisShippings(mesShippingOrderManagement,userInfo));
} }
//更新装车单
if(!StringUtil.isEmpty(vehiclesOrderDetail)){
MesLoadingList loadingList = vehiclesOrderRepository.getById(vehiclesOrderDetail.getPid());
if (!StringUtils.isEmpty(loadingList)) { if (!StringUtils.isEmpty(loadingList)) {
loadingList.setSystemSyncStatus(CommonEnumUtil.FALSE); loadingList.setSystemSyncStatus(CommonEnumUtil.FALSE);
loadingList.setStatus(MesExtEnumUtil.MES_LOADING_STATUS.ASN.getValue()); loadingList.setStatus(MesExtEnumUtil.MES_LOADING_STATUS.ASN.getValue());
@ -513,7 +516,6 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
} }
} }
} }
}
} }

@ -674,7 +674,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
//保存数据 //保存数据
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>(); List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
MesProductOffLine newMesProductOffLine; List<MesMove> mesMoveList = new ArrayList<>();
// 排除重复的数据 // 排除重复的数据
Map<MesBom, List<MesBom>> map = mesBoms.stream().collect(Collectors.groupingBy(mesBom -> { Map<MesBom, List<MesBom>> map = mesBoms.stream().collect(Collectors.groupingBy(mesBom -> {
MesBom bom = new MesBom(); MesBom bom = new MesBom();
@ -682,9 +682,43 @@ public class MesWorkOrderService implements IMesWorkOrderService {
bom.setItemPartNo(mesBom.getItemPartNo()); bom.setItemPartNo(mesBom.getItemPartNo());
return bom; return bom;
})); }));
if(MesExtEnumUtil.NOSORT_REPORT_TYPE.REPORT.getValue() == productionRecord.getReportType()){
for (Map.Entry<MesBom, List<MesBom>> entry : map.entrySet()) { for (Map.Entry<MesBom, List<MesBom>> entry : map.entrySet()) {
MesBom mesBom = entry.getValue().get(0); mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, oldMesWorkOrder, mesProductVersion, entry.getValue().get(0)));
newMesProductOffLine = new MesProductOffLine(); }
} else if (MesExtEnumUtil.NOSORT_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == productionRecord.getReportType()) {
customerSupplyMove(productionRecord,oldMesWorkOrder, mesProductVersion, mesBoms, productionRecord.getProductSn(), mesProductOffLineList, mesMoveList,userName);
} else {
LOGGER.info("汇报类型不存在");
return;
}
if(!CollectionUtils.isEmpty(mesProductOffLineList)){
mesProductOffLineRDao.saveAll(mesProductOffLineList);
}
if(!CollectionUtils.isEmpty(mesMoveList)){
mesMoveRepository.saveAll(mesMoveList);
}
// 同步工单信息给加工记录、条码信息
DdlPackBean snDdlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(productionRecord.getId(), "id", snDdlPackBean);
mesProduceSnRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderNo"},
new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo()}, snDdlPackBean);
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(productionRecord.getId(), "id", packBean);
productionRecordRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderNo", "reportStatus"},
new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue()}, packBean);
LOGGER.info("条码【{}】报工成功,报工工单【{}】", productionRecord.getProductSn(), oldMesWorkOrder.getWorkOrderNo());
}
private MesProductOffLine getMesProductOffLine(MesProductionRecord productionRecord, String userName, MesWorkOrder oldMesWorkOrder, MesProductVersion mesProductVersion, MesBom mesBom) {
MesProductOffLine newMesProductOffLine = new MesProductOffLine();
newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo()); newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo());
newMesProductOffLine.setReportPartNameRdd(oldMesWorkOrder.getPartName()); newMesProductOffLine.setReportPartNameRdd(oldMesWorkOrder.getPartName());
newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo()); newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo());
@ -708,25 +742,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
newMesProductOffLine.setOrganizeCode(oldMesWorkOrder.getOrganizeCode()); newMesProductOffLine.setOrganizeCode(oldMesWorkOrder.getOrganizeCode());
newMesProductOffLine.setDescription(productionRecord.getCompleteDateTime()); newMesProductOffLine.setDescription(productionRecord.getCompleteDateTime());
ConvertBean.serviceModelInitialize(newMesProductOffLine, userName); ConvertBean.serviceModelInitialize(newMesProductOffLine, userName);
mesProductOffLineList.add(newMesProductOffLine); return newMesProductOffLine;
}
mesProductOffLineRDao.saveAll(mesProductOffLineList);
// 同步工单信息给加工记录、条码信息
DdlPackBean snDdlPackBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getNumEqualPack(productionRecord.getId(), "id", snDdlPackBean);
DdlPreparedPack.getStringEqualPack(organizeCode, "organizeCode", snDdlPackBean);
mesProduceSnRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderNo"},
new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo()}, snDdlPackBean);
DdlPackBean packBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getNumEqualPack(productionRecord.getId(), "id", packBean);
productionRecordRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderNo", "reportStatus"},
new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue()}, packBean);
LOGGER.info("条码【{}】报工成功,报工工单【{}】", productionRecord.getProductSn(), oldMesWorkOrder.getWorkOrderNo());
} }
/** /**
@ -1151,7 +1167,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} catch (Exception e) { } catch (Exception e) {
String msg = e.getMessage(); String msg = e.getMessage();
if (e instanceof ImppBusiException) { if (e instanceof ImppBusiException) {
msg = ((ImppBusiException) e).getErrorMsg(); msg = ((ImppBusiException) e).getErrorDetail();
} }
log.error("工单:{}报工失败{}", orderNo, ExceptionUtils.getStackTrace(e)); log.error("工单:{}报工失败{}", orderNo, ExceptionUtils.getStackTrace(e));
productionRecordService.updateProductionRecord(model.getMesProductionRecordMap().get(orderNo), userName, MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue(), msg); productionRecordService.updateProductionRecord(model.getMesProductionRecordMap().get(orderNo), userName, MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue(), msg);
@ -1503,6 +1519,64 @@ public class MesWorkOrderService implements IMesWorkOrderService {
} }
} }
private void customerSupplyMove(MesProductionRecord productionRecord,MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List<MesBom> mesBoms, String sn, List<MesProductOffLine> mesProductOffLineList, List<MesMove> mesMoveList,String userName) {
boolean isItemMove;
boolean isItemReport;
MesMoveRule moveRule;
//查询零件生产组的移库规则
List<MesMoveRule> moveRules = mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(mesWorkOrder.getPartProdGroupCode(), mesWorkOrder.getOrganizeCode());
Map<String, List<MesMoveRule>> mesMoveRuleMap = moveRules.stream().filter(t -> Objects.nonNull(t.getSrcType())).collect(Collectors.groupingBy(MesMoveRule::getSrcType));
List<String> itemPartNoList = mesBoms.stream().map(MesBom::getItemPartNo).collect(Collectors.toList());
//子物料SAP下发信息
Map<String, List<MesPartSap>> mesPartSapMap = getPartSapMap(mesWorkOrder, itemPartNoList);
//获取物料信息
Map<String, List<MesPart>> itemPartMap = getItemPartMap(mesWorkOrder, itemPartNoList);
for (MesBom mesBom : mesBoms) {
isItemReport = false;
isItemMove = false;
moveRule = null;
if (itemPartMap.containsKey(mesBom.getItemPartNo())) {
MesPart itemPart = itemPartMap.get(mesBom.getItemPartNo()).iterator().next();
if (!StringUtil.isEmpty(itemPart.getEsd()) && mesMoveRuleMap.containsKey(itemPart.getEsd())) {
moveRule = mesMoveRuleMap.get(itemPart.getEsd()).iterator().next();
if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT_MOVE.getValue() == moveRule.getReportType()) {
isItemMove = true;
isItemReport = true;
} else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT.getValue() == moveRule.getReportType()) {
isItemReport = true;
} else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.MOVE.getValue() == moveRule.getReportType()) {
isItemMove = true;
}
}
}
//汇报
if (isItemReport) {
mesProductOffLineList.add(getMesProductOffLine(productionRecord, userName, mesWorkOrder, mesProductVersion, mesBom));
}
//移库
if (isItemMove) {
MesPartSap mesPartSap = null;
if (mesPartSapMap.containsKey(mesBom.getItemPartNo())) {
mesPartSap = mesPartSapMap.get(mesBom.getItemPartNo()).iterator().next();
}
MesMove move = createMove(mesPartSap, moveRule.getErpSrcLocateNo(), moveRule.getErpDestLocateNo(), mesBom.getOrganizeCode(), mesWorkOrder.getErpWorkCenter(), mesBom.getItemQty(), MesExtEnumUtil.MOVE_TYPE.RAW_MATERIAL_MOVE.getValue());
move.setMatnr(mesBom.getItemPartNo());
ConvertBean.serviceModelInitialize(move, userName);
mesMoveList.add(move);
}
}
}
private Map<String, List<MesPartSap>> getPartSapMap(MesWorkOrder mesWorkOrder, List<String> itemPartNoList) {
List<MesPartSap> mesPartSapList = iMesPartService.findMesPartSapByPartNo(itemPartNoList, mesWorkOrder.getOrganizeCode());
return mesPartSapList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.groupingBy(MesPartSap::getPartNo));
}
private Map<String, List<MesPart>> getItemPartMap(MesWorkOrder mesWorkOrder, List<String> itemPartNoList) {
List<MesPart> itemPartList = iMesPartService.findMesPartByPartNo(itemPartNoList, mesWorkOrder.getOrganizeCode());
return itemPartList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.groupingBy(MesPart::getPartNo));
}
private MesWorkOrder getMesWorkOrder(Map<String, List<MesWorkOrder>> workOrderMap, String workOrderNo) { private MesWorkOrder getMesWorkOrder(Map<String, List<MesWorkOrder>> workOrderMap, String workOrderNo) {
MesWorkOrder workOrder = Objects.isNull(workOrderMap) || StringUtils.isEmpty(workOrderNo) || !workOrderMap.containsKey(workOrderNo) ? null : workOrderMap.get(workOrderNo).iterator().next(); MesWorkOrder workOrder = Objects.isNull(workOrderMap) || StringUtils.isEmpty(workOrderNo) || !workOrderMap.containsKey(workOrderNo) ? null : workOrderMap.get(workOrderNo).iterator().next();
if (Objects.isNull(workOrder)) { if (Objects.isNull(workOrder)) {
@ -1608,4 +1682,21 @@ public class MesWorkOrderService implements IMesWorkOrderService {
ConvertBean.serviceModelInitialize(move, userName); ConvertBean.serviceModelInitialize(move, userName);
return move; return move;
} }
private MesMove createMove(MesPartSap mesPart, String source, String target, String org, String workCenterCode, double qty, Integer moveType) {
MesMove move = new MesMove();
if (!Objects.isNull(mesPart)) {
move.setMeins(mesPart.getUnit());
}
move.setOrganizeCode(org);
move.setFactoryCode(org);
move.setLgort(source);
move.setUmlgo(target);
move.setMenge(qty);
move.setPostDate(TimeTool.getToday());
move.setMoveType(moveType);
move.setPostTime(TimeTool.getTimeShortWithColon());
move.setWorkCenter(workCenterCode);
return move;
}
} }

@ -30,10 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.Comparator; import java.util.*;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -70,25 +67,23 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
@Override @Override
public MesSortShippingCheckModel doScan(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup) { public MesSortShippingCheckModel doScan(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup) {
if (!Objects.isNull(model.getLastShippingDetailId())) { if (!Objects.isNull(model.getLastShippingDetailId())) {
//校验目视单是否已经扫描 //校验条码
if (model.getDetailList().stream().anyMatch(t -> !StringUtils.isEmpty(t.getVisualOrderNo()) && t.getVisualOrderNo().equals(model.getSn()))) { MesProduceSn produceSn = checkSn(model);
throw new ImppBusiException(String.format("【%s】此目视单已经扫描过请检查数据", model.getSn()));
}
//更新单据信息 //更新单据信息
model.getDetailList().stream().filter(t -> t.getId().equals(model.getLastShippingDetailId())).forEach(detail -> { model.getDetailList().stream().filter(t -> t.getId().equals(model.getLastShippingDetailId())).forEach(detail -> {
detail.setVisualOrderNo(model.getSn()); detail.setBarcode(model.getSn());
updateOrderManagementDetails(orderManagement, detail, getWorkOrder(model, detail), model.getUserInfo()); updateOrderManagementDetails(orderManagement, detail, getMesWorkOrder(model, produceSn, detail), produceSn, model.getUserInfo());
}); });
model.setLastShippingDetailId(null); model.setLastShippingDetailId(null);
} else { } else {
//校验条码 //校验目视单
MesProduceSn produceSn = checkSn(model); MesWorkOrder workOrder = getWorkOrder(model);
boolean scanFlg = false; boolean scanFlg = false;
for (MesShippingOrderManagementDetail detail : model.getDetailList()) { for (MesShippingOrderManagementDetail detail : model.getDetailList()) {
if (detail.getPartNo().equals(produceSn.getPartNo()) && StringUtils.isEmpty(detail.getBarcode()) && !Objects.equals(detail.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)) { if (detail.getPartNo().equals(workOrder.getPartNo()) && StringUtils.isEmpty(detail.getBarcode()) && !Objects.equals(detail.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)) {
//校验发运明细 //校验发运明细
checkShippingDetails(model, orderManagement, shippingGroup, produceSn, detail); checkShippingDetails(model, orderManagement, shippingGroup, workOrder.getPartNo(), detail);
detail.setBarcode(model.getSn()); detail.setVisualOrderNo(model.getSn());
//校验通过的明细ID //校验通过的明细ID
model.setLastShippingDetailId(detail.getId()); model.setLastShippingDetailId(detail.getId());
scanFlg = true; scanFlg = true;
@ -96,16 +91,15 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
} }
} }
if (!scanFlg) { if (!scanFlg) {
throw new ImppBusiException(String.format("【%s】此条码对应的【%s】物料号与发运单中物料号不匹配请检查数据", model.getSn(), produceSn.getPartNo())); throw new ImppBusiException(String.format("【%s】此目视单对应的【%s】物料号与发运单中物料号不匹配请检查数据", model.getSn(), workOrder.getPartNo()));
} }
} }
return model; return model;
} }
private MesWorkOrder getMesWorkOrder(MesSortShippingCheckModel model, MesProduceSn produceSn, MesShippingOrderManagementDetail detail) {
private MesWorkOrder getWorkOrder(MesSortShippingCheckModel model, MesShippingOrderManagementDetail detail) { MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(model.getOrganizeCode(), detail.getVisualOrderNo());
MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(model.getOrganizeCode(), model.getSn());
if (Objects.isNull(workOrder)) { if (Objects.isNull(workOrder)) {
throw new ImppBusiException(String.format("目视单【%s】不存在请检查数据", model.getSn())); throw new ImppBusiException(String.format("目视单【%s】不存在请检查数据", model.getSn()));
} }
@ -114,17 +108,35 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
throw new ImppBusiException(String.format("目视单【%s】状态为【%s】质量状态为【%s】不允许发运", model.getSn(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(workOrder.getQcStatus()))); throw new ImppBusiException(String.format("目视单【%s】状态为【%s】质量状态为【%s】不允许发运", model.getSn(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(workOrder.getQcStatus())));
} }
//校验条码是否匹配 //校验条码是否匹配
if (!Objects.equals(detail.getBarcode(), workOrder.getCustSn())) { if (!Objects.equals(produceSn.getCustSn(), workOrder.getCustSn())) {
throw new ImppBusiException(String.format("目视单【%s】条码【%s】与扫描条码【%s】不匹配", model.getSn(), workOrder.getCustSn(), detail.getBarcode())); throw new ImppBusiException(String.format("目视单【%s】条码【%s】与扫描条码【%s】不匹配", detail.getVisualOrderNo(), workOrder.getCustSn(), model.getSn()));
} }
//校验零件是否匹配 //校验零件是否匹配
if (!Objects.equals(detail.getPartNo(), workOrder.getPartNo())) { if (!Objects.equals(produceSn.getPartNo(), workOrder.getPartNo())) {
throw new ImppBusiException(String.format("目视单【%s】零件【%s】与发运单零件【%s】不匹配", model.getSn(), workOrder.getPartNo(), detail.getPartNo())); throw new ImppBusiException(String.format("目视单【%s】零件【%s】与发运单零件【%s】不匹配", detail.getVisualOrderNo(), workOrder.getPartNo(), detail.getPartNo()));
} }
return workOrder; return workOrder;
} }
private void checkShippingDetails(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup, MesProduceSn produceSn, MesShippingOrderManagementDetail detail) {
private MesWorkOrder getWorkOrder(MesSortShippingCheckModel model) {
//校验目视单是否已经扫描
if (model.getDetailList().stream().anyMatch(t -> !StringUtils.isEmpty(t.getVisualOrderNo()) && t.getVisualOrderNo().equals(model.getSn()))) {
throw new ImppBusiException(String.format("【%s】此目视单已经扫描过请检查数据", model.getSn()));
}
//查询工单
MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(model.getOrganizeCode(), model.getSn());
if (Objects.isNull(workOrder)) {
throw new ImppBusiException(String.format("目视单【%s】不存在请检查数据", model.getSn()));
}
//校验目视单状态
if (MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue() != workOrder.getWorkOrderStatus() || MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue() != workOrder.getQcStatus()) {
throw new ImppBusiException(String.format("目视单【%s】状态为【%s】质量状态为【%s】不允许发运", model.getSn(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(workOrder.getQcStatus())));
}
return workOrder;
}
private void checkShippingDetails(MesSortShippingCheckModel model, MesShippingOrderManagement orderManagement, MesPartShippingGroup shippingGroup, String partNo, MesShippingOrderManagementDetail detail) {
//校验发运单明细顺序 //校验发运单明细顺序
if (!Objects.isNull(shippingGroup) && !StringUtils.isEmpty(shippingGroup.getIsEnableShippingFailSafe()) && CommonEnumUtil.VALID == shippingGroup.getIsEnableShippingFailSafe()) { if (!Objects.isNull(shippingGroup) && !StringUtils.isEmpty(shippingGroup.getIsEnableShippingFailSafe()) && CommonEnumUtil.VALID == shippingGroup.getIsEnableShippingFailSafe()) {
Optional<MesShippingOrderManagementDetail> first = model.getDetailList().stream().filter(k -> k.getCustInfoSeq().compareTo(detail.getCustInfoSeq()) < 0 && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst(); Optional<MesShippingOrderManagementDetail> first = model.getDetailList().stream().filter(k -> k.getCustInfoSeq().compareTo(detail.getCustInfoSeq()) < 0 && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst();
@ -135,10 +147,10 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
//判断是否需要排序校验 默认排序则需要校验 //判断是否需要排序校验 默认排序则需要校验
if (!StringUtils.isEmpty(orderManagement.getScanSeqWay()) && orderManagement.getScanSeqWay() == MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.DEFAULT_SORT.getValue()) { if (!StringUtils.isEmpty(orderManagement.getScanSeqWay()) && orderManagement.getScanSeqWay() == MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.DEFAULT_SORT.getValue()) {
//获取明细中最小的 //获取明细中最小的
Optional<String> minPartNo = model.getDetailList().stream().filter(k -> StringUtils.isEmpty(k.getBarcode())) Optional<String> minPartNo = model.getDetailList().stream().filter(k -> StringUtils.isEmpty(k.getBarcode()) && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER))
.min(Comparator.comparingLong(MesShippingOrderManagementDetail::getCustInfoSeq)).map(MesShippingOrderManagementDetail::getPartNo); .min(Comparator.comparingLong(MesShippingOrderManagementDetail::getCustInfoSeq)).map(MesShippingOrderManagementDetail::getPartNo);
//若扫描的不是最小顺序 则报错 //若扫描的不是最小顺序 则报错
if (minPartNo.isPresent() && !minPartNo.get().equals(produceSn.getPartNo())) { if (minPartNo.isPresent() && !minPartNo.get().equals(partNo)) {
throw new ImppBusiException(String.format("【%s】此条码扫描顺序错误请检查数据", model.getSn())); throw new ImppBusiException(String.format("【%s】此条码扫描顺序错误请检查数据", model.getSn()));
} }
} }
@ -215,7 +227,7 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
return mesShippingOrderManagementDetail; return mesShippingOrderManagementDetail;
} }
private void updateOrderManagementDetails(MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail detail, MesWorkOrder workOrder, String userInfo) { private void updateOrderManagementDetails(MesShippingOrderManagement orderManagement, MesShippingOrderManagementDetail detail, MesWorkOrder workOrder,MesProduceSn produceSn, String userInfo) {
if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) { if (StringUtils.isEmpty(orderManagement.getCheckSeqCode())) {
detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER); detail.setIsScanFlg(MesCommonConstant.TRUE_INTEGER);
detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); detail.setStatus(MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue());
@ -232,14 +244,14 @@ public class MesShippingScanSnAndOrderStrategyServiceImpl implements IMesShippin
orderManagement.setSystemSyncStatus(CommonEnumUtil.FALSE); orderManagement.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(orderManagement, userInfo); ConvertBean.serviceModelUpdate(orderManagement, userInfo);
update(orderManagement); update(orderManagement);
//条码格式(扫描目视单,扫描条码)
detail.setActualQty(1); detail.setBarcode(new StringJoiner(MesPcnExtConstWords.COMMA).add(detail.getVisualOrderNo()).add(detail.getBarcode()).toString());
detail.setActualQty(MesPcnExtConstWords.ONE);
detail.setSystemSyncStatus(CommonEnumUtil.FALSE); detail.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(detail, userInfo); ConvertBean.serviceModelUpdate(detail, userInfo);
updateDetail(detail); updateDetail(detail);
MesProduceSn produceSn = getMesProduceSn(orderManagement.getOrganizeCode(), detail.getBarcode());
//内部条码更新条码状态 //内部条码更新条码状态
if (!Objects.isNull(produceSn)) { if (!Objects.isNull(produceSn.getId())) {
produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue()); produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.SHIPPED.getValue());
produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE); produceSn.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(produceSn, userInfo); ConvertBean.serviceModelUpdate(produceSn, userInfo);

@ -93,7 +93,7 @@ public class MesShippingScanSnStrategyServiceImpl implements IMesShippingScanStr
//判断是否需要排序校验 默认排序则需要校验 //判断是否需要排序校验 默认排序则需要校验
if (!StringUtils.isEmpty(orderManagement.getScanSeqWay()) && orderManagement.getScanSeqWay() == MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.DEFAULT_SORT.getValue()) { if (!StringUtils.isEmpty(orderManagement.getScanSeqWay()) && orderManagement.getScanSeqWay() == MesExtEnumUtil.SHIPPING_GROUP_SCAN_CONFIRM_SEQ_MODE.DEFAULT_SORT.getValue()) {
//获取明细中最小的 //获取明细中最小的
Optional<String> minPartNo = model.getDetailList().stream().filter(k -> StringUtils.isEmpty(k.getBarcode())) Optional<String> minPartNo = model.getDetailList().stream().filter(k -> StringUtils.isEmpty(k.getBarcode()) && !Objects.equals(k.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER))
.min(Comparator.comparingLong(MesShippingOrderManagementDetail::getCustInfoSeq)).map(MesShippingOrderManagementDetail::getPartNo); .min(Comparator.comparingLong(MesShippingOrderManagementDetail::getCustInfoSeq)).map(MesShippingOrderManagementDetail::getPartNo);
//若扫描的不是最小顺序 则报错 //若扫描的不是最小顺序 则报错
if (minPartNo.isPresent() && !minPartNo.get().equals(produceSn.getPartNo())) { if (minPartNo.isPresent() && !minPartNo.get().equals(produceSn.getPartNo())) {

@ -162,14 +162,14 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
if (CollectionUtils.isEmpty(workOrderList)) { if (CollectionUtils.isEmpty(workOrderList)) {
StationKvBeanUtil.addStationKvBeanList(orderQtyKvBeans, new ArrayList<>(), StationKvBeanUtil.addStationKvBeanList(orderQtyKvBeans, new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.QTY, "工单计划数", MesPcnExtConstWords.ZERO_STR), new StationKvBean(MesPcnExtConstWords.QTY, "工单计划数", MesPcnExtConstWords.ZERO_STR),
new StationKvBean(MesPcnExtConstWords.COMPLATED_QTY, "工单完成数", MesPcnExtConstWords.ZERO_STR)); new StationKvBean(MesPcnExtConstWords.COMPLETE_QTY, "工单完成数", MesPcnExtConstWords.ZERO_STR));
} else { } else {
Double qty = workOrderList.stream().map(MesWorkOrder::getQty).reduce((a, b) -> a + b).get(); Double qty = workOrderList.stream().map(MesWorkOrder::getQty).reduce((a, b) -> a + b).get();
Double complateQty = workOrderList.stream().map(MesWorkOrder::getCompleteQty).reduce((a, b) -> a + b).get(); Double complateQty = workOrderList.stream().map(MesWorkOrder::getCompleteQty).reduce((a, b) -> a + b).get();
StationKvBeanUtil.addStationKvBeanList(orderQtyKvBeans, new ArrayList<>(), StationKvBeanUtil.addStationKvBeanList(orderQtyKvBeans, new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.QTY, "工单计划数", qty.toString()), new StationKvBean(MesPcnExtConstWords.QTY, "工单计划数", qty.toString()),
new StationKvBean(MesPcnExtConstWords.COMPLATED_QTY, "工单完成数", complateQty.toString())); new StationKvBean(MesPcnExtConstWords.COMPLETE_QTY, "工单完成数", complateQty.toString()));
} }
if (!CollectionUtils.isEmpty(productionPartContextList)) { if (!CollectionUtils.isEmpty(productionPartContextList)) {

@ -159,7 +159,7 @@ public class MesProductionSortModuleService extends BaseModuleService {
} }
MesQueueOrder queueOrder = getNewQueueOrder(reqBean); MesQueueOrder queueOrder = getNewQueueOrder(reqBean);
return Stream.of(queueOrder.getPartProdGroupCode()).collect(Collectors.toList()); return queueOrder == null ? null : Stream.of(queueOrder.getPartProdGroupCode()).collect(Collectors.toList());
} }
private MesQueueOrder getNewQueueOrder(StationRequestBean reqBean) { private MesQueueOrder getNewQueueOrder(StationRequestBean reqBean) {

@ -104,14 +104,14 @@ public class MesFunctionProductionStatisticsService extends BaseSwsService imple
if (CollectionUtils.isEmpty(workOrderList)) { if (CollectionUtils.isEmpty(workOrderList)) {
StationKvBeanUtil.addStationKvBeanList(orderQtyKvBeans, new ArrayList<>(), StationKvBeanUtil.addStationKvBeanList(orderQtyKvBeans, new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.QTY, "工单计划数", 0 + ""), new StationKvBean(MesPcnExtConstWords.QTY, "工单计划数", 0 + ""),
new StationKvBean(MesPcnExtConstWords.COMPLATED_QTY, "工单完成数", 0 + "")); new StationKvBean(MesPcnExtConstWords.COMPLETE_QTY, "工单完成数", 0 + ""));
} else { } else {
double qty = workOrderList.stream().map(MesWorkOrder::getQty).reduce((a, b) -> a + b).get(); double qty = workOrderList.stream().map(MesWorkOrder::getQty).reduce((a, b) -> a + b).get();
double complateQty = workOrderList.stream().map(MesWorkOrder::getCompleteQty).reduce((a, b) -> a + b).get(); double complateQty = workOrderList.stream().map(MesWorkOrder::getCompleteQty).reduce((a, b) -> a + b).get();
StationKvBeanUtil.addStationKvBeanList(orderQtyKvBeans, new ArrayList<>(), StationKvBeanUtil.addStationKvBeanList(orderQtyKvBeans, new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.QTY, "工单计划数", qty + ""), new StationKvBean(MesPcnExtConstWords.QTY, "工单计划数", qty + ""),
new StationKvBean(MesPcnExtConstWords.COMPLATED_QTY, "工单完成数", complateQty + "")); new StationKvBean(MesPcnExtConstWords.COMPLETE_QTY, "工单完成数", complateQty + ""));
} }
resultBean.setResultList(orderQtyKvBeans); resultBean.setResultList(orderQtyKvBeans);
} else if (Objects.equal(MesExtEnumUtil.WORK_FILE_TYPE.PROD_VIDEO.getValue(), mesWorkCell.getIsShowMsg())) { } else if (Objects.equal(MesExtEnumUtil.WORK_FILE_TYPE.PROD_VIDEO.getValue(), mesWorkCell.getIsShowMsg())) {

@ -179,8 +179,8 @@ public class MesAssemblySaveStepService extends BaseStepService {
private void saveWorkOrderAssembly(StationRequestBean reqBean, MesProductionAssemblyContext productionAssemblyContext) { private void saveWorkOrderAssembly(StationRequestBean reqBean, MesProductionAssemblyContext productionAssemblyContext) {
workOrderAssemblyRepository.updateByProperties( workOrderAssemblyRepository.updateByProperties(
new String[]{MesPcnExtConstWords.ID}, new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE},
new Object[]{productionAssemblyContext.getSourceId()}, new Object[]{productionAssemblyContext.getSourceId(), reqBean.getOrganizeCode()},
new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.ASSEMBLY_STATUS}, new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.ASSEMBLY_STATUS},
new Object[]{reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), productionAssemblyContext.getAssemblyStatus()}); new Object[]{reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), productionAssemblyContext.getAssemblyStatus()});
} }

@ -157,6 +157,7 @@ public class MesProductResultErrorHandleStepService extends BaseStepService {
model.setPart(mesPartSap); model.setPart(mesPartSap);
model.setPartInspectionDetailList(Arrays.asList(mesPartInspectionDetail)); model.setPartInspectionDetailList(Arrays.asList(mesPartInspectionDetail));
if (Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SCRAP.getValue(), result)) { if (Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SCRAP.getValue(), result)) {
//TODO 有问题 需要修改条码质量状态
ncProcessingService.saveNc(model, reqBean.getOrganizeCode(), true); ncProcessingService.saveNc(model, reqBean.getOrganizeCode(), true);
} else { } else {
MesPartInspectionInputModel inspectModel = new MesPartInspectionInputModel(); MesPartInspectionInputModel inspectModel = new MesPartInspectionInputModel();
@ -169,6 +170,7 @@ public class MesProductResultErrorHandleStepService extends BaseStepService {
inspectModel.setPartInspection(partInspection); inspectModel.setPartInspection(partInspection);
inspectModel.setShiftCode(mesProduceSn.getShiftCode()); inspectModel.setShiftCode(mesProduceSn.getShiftCode());
inspectModel.setProductVersion(productVersion); inspectModel.setProductVersion(productVersion);
inspectModel.setUserInfo(reqBean.getUserInfo());
inputDefectRecordService.saveSusPartInspection(inspectModel, reqBean.getOrganizeCode()); inputDefectRecordService.saveSusPartInspection(inspectModel, reqBean.getOrganizeCode());
} }

@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepSer
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionRecordService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionRecordService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
@ -123,7 +124,7 @@ public class MesProductionRecordGenerateStepService extends BaseStepService {
MesProdRuleContext prodRuleContext = CollectionUtils.isEmpty(prMap) ? null : prMap.get(productionPsOutContext.getForeignKey()); MesProdRuleContext prodRuleContext = CollectionUtils.isEmpty(prMap) ? null : prMap.get(productionPsOutContext.getForeignKey());
MesProductionRecord productionRecord = new MesProductionRecord(); MesProductionRecord productionRecord = new MesProductionRecord();
BeanUtils.copyProperties(productionPsOutContext, productionRecord); BeanUtils.copyProperties(productionPsOutContext, productionRecord, MesPcnExtConstWords.BASE_BEAN_FIELDS);
productionRecord.setMouldNo(mouldNo); productionRecord.setMouldNo(mouldNo);
productionRecord.setEquipmentCode(cellEquipContext.getEquipmentCode()); productionRecord.setEquipmentCode(cellEquipContext.getEquipmentCode());

@ -105,14 +105,14 @@ public class MesSendCavityGroupParamsCmdStepService extends BaseStepService {
for (MesCavityGroupDetailCfg mesCavityGroupDetailCfg : mesCavityGroupDetailCfgs) { for (MesCavityGroupDetailCfg mesCavityGroupDetailCfg : mesCavityGroupDetailCfgs) {
index ++; index ++;
// 获取加工参数 // 获取加工参数
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(mesCavityGroupDetailCfg.getId(), "sourceId", ddlPackBean); DdlPreparedPack.getNumEqualPack(mesCavityGroupDetailCfg.getId(), "sourceId", ddlPackBean);
List<MesEquipmentProdParamCfg> mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean); List<MesEquipmentProdParamCfg> mesEquipmentProdParamCfgs = mesEquipmentProdParamCfgRepository.findByHqlWhere(ddlPackBean);
for (MesEquipmentProdParamCfg mesEquipmentProdParamCfg : mesEquipmentProdParamCfgs) {// for (MesEquipmentProdParamCfg mesEquipmentProdParamCfg : mesEquipmentProdParamCfgs) {//
String strategyClass = getStrateClass(mesEquipmentProdParamCfg.getMatchRule()); String strategyClass = getStrateClass(mesEquipmentProdParamCfg.getMatchRule());
AbstractWriteVariableService equipVariableRwExtService = ((AbstractWriteVariableService) SpringContextsUtil.getBean(strategyClass)); AbstractWriteVariableService equipVariableRwExtService = ((AbstractWriteVariableService) SpringContextsUtil.getBean(strategyClass));
DdlPackBean paramPackBean = DdlPackBean.getDdlPackBean(); DdlPackBean paramPackBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(mesEquipmentProdParamCfg.getEquipVariableId(), "id", paramPackBean); DdlPreparedPack.getNumEqualPack(mesEquipmentProdParamCfg.getEquipVariableId(), "id", paramPackBean);
MesEquipmentVariable mesEquipmentVariable = mesEquipmentVariableRepository.getByProperty(paramPackBean); MesEquipmentVariable mesEquipmentVariable = mesEquipmentVariableRepository.getByProperty(paramPackBean);
if (mesEquipmentVariable == null) { if (mesEquipmentVariable == null) {

@ -67,8 +67,8 @@ public class MesWorkOrderQueueSaveStepService extends BaseStepService {
private void saveWorkOrderQueue(StationRequestBean reqBean, MesProductionPsInContext productionPsInContext) { private void saveWorkOrderQueue(StationRequestBean reqBean, MesProductionPsInContext productionPsInContext) {
queueOrderRepository.updateByProperties( queueOrderRepository.updateByProperties(
new String[]{MesPcnExtConstWords.ID}, new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE},
new Object[]{productionPsInContext.getRelateId()}, new Object[]{productionPsInContext.getRelateId(), reqBean.getOrganizeCode()},
new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.STATUS}, new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.STATUS},
new Object[]{reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesExtEnumUtil.QUEUE_ORDER_STATUS.FINISH.getValue()}); new Object[]{reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesExtEnumUtil.QUEUE_ORDER_STATUS.FINISH.getValue()});
} }

@ -9,7 +9,6 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.StringUtil; import cn.estsh.i3plus.mes.pcn.util.StringUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.MathOperation; import cn.estsh.i3plus.platform.common.tool.MathOperation;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
@ -126,8 +125,6 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService {
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(),
StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), workOrder.getWorkOrderNo(), JSONObject.toJSONString(workOrder), calcCompleteQty, prodResult); StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), workOrder.getWorkOrderNo(), JSONObject.toJSONString(workOrder), calcCompleteQty, prodResult);
entityManager.detach(workOrder);
//工单状态分 排序工单 和非排序工单; 现在必须是非排序工单 //工单状态分 排序工单 和非排序工单; 现在必须是非排序工单
if (!MesExtEnumUtil.ORDER_STATUS.checkNosortAllowStatus(workOrder.getWorkOrderStatus())) if (!MesExtEnumUtil.ORDER_STATUS.checkNosortAllowStatus(workOrder.getWorkOrderStatus()))
stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息工单状态[%s]!", entry.getKey(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()))); stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息工单状态[%s]!", entry.getKey(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus())));
@ -135,17 +132,16 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService {
if (!workOrder.getWorkCenterCode().equals(reqBean.getWorkCenterCode())) if (!workOrder.getWorkCenterCode().equals(reqBean.getWorkCenterCode()))
stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", entry.getKey(), workOrder.getWorkCenterCode(), reqBean.getWorkCenterCode())); stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", entry.getKey(), workOrder.getWorkCenterCode(), reqBean.getWorkCenterCode()));
List<String> propertyNameList = new ArrayList<>(); Map<String, Object> propertyMap = new HashMap<>();
//修改完成数量 //修改完成数量
if (calcCompleteQty.compareTo(MesPcnExtConstWords.ZERO) > 0) { if (calcCompleteQty.compareTo(MesPcnExtConstWords.ZERO) > 0) {
workOrder.setCompleteQty(MathOperation.add(workOrder.getCompleteQty(), calcCompleteQty)); propertyMap.put(MesPcnExtConstWords.COMPLETE_QTY, MathOperation.add(workOrder.getCompleteQty(), calcCompleteQty));
propertyNameList.add(MesPcnExtConstWords.COMPLATED_QTY);
} }
//修改未完成数量 //修改未完成数量
if (calcCompleteQty.compareTo(MesPcnExtConstWords.ZERO) > 0 && workOrder.getUnCompleteQty().compareTo(new Double(0)) > 0 && if (calcCompleteQty.compareTo(MesPcnExtConstWords.ZERO) > 0 && workOrder.getUnCompleteQty().compareTo(new Double(0)) > 0 &&
MathOperation.compareTo(MathOperation.sub(workOrder.getUnCompleteQty(), new Double(calcCompleteQty)), new Double(0)) >= 0) { MathOperation.compareTo(MathOperation.sub(workOrder.getUnCompleteQty(), new Double(calcCompleteQty)), new Double(0)) >= 0) {
workOrder.setUnCompleteQty(MathOperation.sub(workOrder.getUnCompleteQty(), new Double(calcCompleteQty))); propertyMap.put(MesPcnExtConstWords.UN_COMPLETE_QTY, MathOperation.sub(workOrder.getUnCompleteQty(), new Double(calcCompleteQty)));
propertyNameList.add(MesPcnExtConstWords.UN_COMPLATED_QTY);
} }
/** /**
@ -155,43 +151,46 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService {
* *
*/ */
if (!StringUtils.isEmpty(prodResult)) { if (!StringUtils.isEmpty(prodResult)) {
//可疑品 //可疑品
boolean isSuspicious = MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue() == Integer.parseInt(prodResult); if (Integer.valueOf(prodResult).compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()) == 0 && !CollectionUtils.isEmpty(productionPsOutContextList)){
if (isSuspicious && !productionPsOutContextList.isEmpty()){ propertyMap.put(MesPcnExtConstWords.SUSPICIOUS_PART_QTY, MathOperation.add(workOrder.getSuspiciousPartQty(), new Double(productionPsOutContextList.size())));
int suspiciousQty = productionPsOutContextList.size();
workOrder.setSuspiciousPartQty(MathOperation.add(workOrder.getSuspiciousPartQty(), new Double(suspiciousQty)));
propertyNameList.add(MesPcnExtConstWords.SUSPICIOUS_PART_QTY);
} }
//报废数量 //报废数量
boolean isScrap = MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue() == Integer.parseInt(prodResult); if (Integer.valueOf(prodResult).compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue()) == 0 && !CollectionUtils.isEmpty(productionPsOutContextList)){
if (isScrap && !productionPsOutContextList.isEmpty()){ propertyMap.put(MesPcnExtConstWords.SCRAP_PART_QTY, MathOperation.add(workOrder.getScrapPartQty(), new Double(productionPsOutContextList.size())));
int scrapQty = productionPsOutContextList.size();
workOrder.setScrapPartQty(MathOperation.add(workOrder.getScrapPartQty(), new Double(scrapQty)));
propertyNameList.add(MesPcnExtConstWords.SCRAP_PART_QTY);
} }
} }
if (MathOperation.compareTo(workOrder.getCompleteQty(), workOrder.getQty()) >= 0 && workOrder.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()) != 0) { if (MathOperation.compareTo(workOrder.getCompleteQty(), workOrder.getQty()) >= 0 && workOrder.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()) != 0) {
workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); propertyMap.put(MesPcnExtConstWords.WORK_ORDER_STATUS, MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
propertyNameList.add(MesPcnExtConstWords.WORK_ORDER_STATUS);
} else if (workOrder.getCompleteQty() > 0 && workOrder.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { } else if (workOrder.getCompleteQty() > 0 && workOrder.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) {
workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); propertyMap.put(MesPcnExtConstWords.WORK_ORDER_STATUS, MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue());
propertyNameList.add(MesPcnExtConstWords.WORK_ORDER_STATUS);
} }
//如果数量都没有修改,不操作数据库
if (!propertyNameList.isEmpty()) {
ConvertBean.serviceModelUpdate(workOrder, reqBean.getUserInfo());
workOrder.setModifyDatetime((new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()));
workOrderExtService.update(workOrder);
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- ORDER:{} --- UPDATE:{}", if (CollectionUtils.isEmpty(propertyMap)) continue;
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(),
StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), workOrder.getWorkOrderNo(), JSONObject.toJSONString(workOrder)); propertyMap.put(MesPcnExtConstWords.MODIFY_DATE_TIME, (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date()));
propertyMap.put(MesPcnExtConstWords.MODIFY_USER, reqBean.getUserInfo());
String[] propertyName = new String[propertyMap.size()];
Object[] propertyValue = new Object[propertyMap.size()];
Integer index = 0;
for (Map.Entry<String, Object> innerEntry : propertyMap.entrySet()) {
if (null == innerEntry) continue;
propertyName[index] = innerEntry.getKey();
propertyValue[index] = innerEntry.getValue();
index ++;
} }
workOrderRepository.updateByProperties(new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE}, new Object[]{workOrder.getId(), reqBean.getOrganizeCode()}, propertyName, propertyValue);
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- ORDER:{} --- UPDATE:{}",
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(),
StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), workOrder.getWorkOrderNo(), JSONObject.toJSONString(propertyMap));
} }
} }
} }

@ -93,21 +93,21 @@ public class MesWorkOrderSaveSortStepService extends BaseStepService {
if (null == productionPartContext || StringUtils.isEmpty(productionPartContext.getForeignKey())) continue; if (null == productionPartContext || StringUtils.isEmpty(productionPartContext.getForeignKey())) continue;
Boolean isEndWorkCell = (StringUtils.isEmpty(workCell.getIsEndWorkCell()) || workCell.getIsEndWorkCell().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) ? false : true; Boolean isEndWorkCell = (!StringUtils.isEmpty(workCell.getIsEndWorkCell()) && workCell.getIsEndWorkCell().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) ? true : false;
if (!isEndWorkCell && productionPartContext.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()) == 0) continue; if (!isEndWorkCell && productionPartContext.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()) == 0) continue;
if (!isEndWorkCell) { if (!isEndWorkCell) {
workOrderRepository.updateByProperties( workOrderRepository.updateByProperties(
new String[]{MesPcnExtConstWords.ID}, new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE},
new Object[]{productionPartContext.getId()}, new Object[]{productionPartContext.getId(), reqBean.getOrganizeCode()},
new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.WORK_ORDER_STATUS, MesPcnExtConstWords.ONLINE_TIME}, new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.WORK_ORDER_STATUS, MesPcnExtConstWords.ONLINE_TIME},
new Object[]{reqBean.getUserInfo(), (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue(), TimeTool.getNowTime(true)}); new Object[]{reqBean.getUserInfo(), (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue(), TimeTool.getNowTime(true)});
} else { } else {
workOrderRepository.updateByProperties( workOrderRepository.updateByProperties(
new String[]{MesPcnExtConstWords.ID}, new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE},
new Object[]{productionPartContext.getId()}, new Object[]{productionPartContext.getId(), reqBean.getOrganizeCode()},
new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.WORK_ORDER_STATUS, MesPcnExtConstWords.COMPLATED_QTY, MesPcnExtConstWords.UN_COMPLATED_QTY, MesPcnExtConstWords.OFFLINE_TIME}, new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.WORK_ORDER_STATUS, MesPcnExtConstWords.COMPLETE_QTY, MesPcnExtConstWords.UN_COMPLETE_QTY, MesPcnExtConstWords.OFFLINE_TIME},
new Object[]{reqBean.getUserInfo(), (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue(), new Double(1), new Double(0), TimeTool.getNowTime(true)}); new Object[]{reqBean.getUserInfo(), (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue(), new Double(1), new Double(0), TimeTool.getNowTime(true)});
} }

@ -0,0 +1,50 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.webservice;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.model.MesConsoleItemCodeExt;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.model.MesConsoleResultExt;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.DcsForEquipmentServiceImpl;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@Component
@WebService(targetNamespace = "http://tempuri.org/")
public class DcsForEquipmentServer {
public static final Logger LOGGER = LoggerFactory.getLogger(DcsForEquipmentServer.class);
@WebMethod(action = "GetConsoleItemCodeExt", operationName = "GetConsoleItemCodeExt")
public String getConsoleItemCodeExt(@WebParam(name = "GetConsoleItemCodeExt") MesConsoleItemCodeExt mesConsoleItemCodeExt) {
DcsForEquipmentServiceImpl bean = (DcsForEquipmentServiceImpl) SpringContextsUtil.getBean("DcsForEquipmentServiceImpl");
String organizeCode = mesConsoleItemCodeExt.getOrganizeCode();
String custCode = mesConsoleItemCodeExt.getCustCode();
String assemblyLine = mesConsoleItemCodeExt.getAssemblyLine();
String location = mesConsoleItemCodeExt.getLocation();
String barcode = mesConsoleItemCodeExt.getBarcode();
String custPlantCode = mesConsoleItemCodeExt.getCustPlantCode();
return bean.doGetConsoleItemCode(organizeCode,barcode,custCode,custPlantCode,assemblyLine,location);
}
// @WebMethod(action = "GetConsoleItemCodeExt", operationName = "GetConsoleItemCodeExt")
// public String getConsoleItemCodeExt(@WebParam(name = "organizeCode") String organizeCode, @WebParam(name = "custCode") String custCode,@WebParam(name = "assemblyLine")String assemblyLine,@WebParam(name = "location")String location,@WebParam(name = "barcode")String barcode,@WebParam(name = "custPlantCode")String custPlantCode) {
// DcsForEquipmentServiceImpl bean = (DcsForEquipmentServiceImpl) SpringContextsUtil.getBean("DcsForEquipmentServiceImpl");
// return bean.doGetConsoleItemCode(organizeCode,barcode,custCode,custPlantCode,assemblyLine,location);
// }
@WebMethod(action = "FillConsoleResultExt", operationName = "FillConsoleResultExt")
public String getConsoleItemCodeExt(@WebParam(name = "FillConsoleResultExt") MesConsoleResultExt mesConsoleResultExt) {
DcsForEquipmentServiceImpl bean = (DcsForEquipmentServiceImpl) SpringContextsUtil.getBean("DcsForEquipmentServiceImpl");
String organizeCode = mesConsoleResultExt.getOrganizeCode();
String custCode = mesConsoleResultExt.getCustCode();
String assemblyLine = mesConsoleResultExt.getAssemblyLine();
String location = mesConsoleResultExt.getLocation();
String barcode = mesConsoleResultExt.getBarcode();
String result = mesConsoleResultExt.getResult();
String partNo = mesConsoleResultExt.getPartNO();
return bean.doFillConsoleResultExt(organizeCode,barcode,partNo,result,assemblyLine,location,custCode);
}
}

@ -53,7 +53,7 @@ public class MesProductionAssemblyNosortContext extends MesProductionAssemblyCon
this.partNo = prodRuleContext.getOutPartNo(); this.partNo = prodRuleContext.getOutPartNo();
if (StringUtils.isEmpty(this.routeSeq)) this.routeSeq = MesPcnExtConstWords.ZERO; if (StringUtils.isEmpty(this.routeSeq)) this.routeSeq = MesPcnExtConstWords.ZERO;
if (StringUtils.isEmpty(this.isRepeat)) this.isRepeat = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); if (StringUtils.isEmpty(this.isRepeat) || this.isRepeat.compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) != 0) this.isRepeat = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue(); this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue();

@ -98,9 +98,9 @@ public class MesPcnExtConstWords {
// 模具号 // 模具号
public static final String MOULD_NO = "mouldNo"; public static final String MOULD_NO = "mouldNo";
// 工单完成数 // 工单完成数
public static final String COMPLATED_QTY = "complateQty"; public static final String COMPLETE_QTY = "completeQty";
// 工单未完成数 // 工单未完成数
public static final String UN_COMPLATED_QTY = "unCompleteQty"; public static final String UN_COMPLETE_QTY = "unCompleteQty";
// 工单可疑品数 // 工单可疑品数
public static final String SUSPICIOUS_PART_QTY = "suspiciousPartQty"; public static final String SUSPICIOUS_PART_QTY = "suspiciousPartQty";
// 工单报废品数 // 工单报废品数

@ -41,7 +41,18 @@
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
<!-- CXF依赖 -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.3.6</version>
<exclusions><!-- CXF uses java.util.logging by default -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId> <artifactId>spring-web</artifactId>

Loading…
Cancel
Save