Merge remote-tracking branch 'origin/dev-wuhan' into dev-wuhan

tags/yfai-pcn-ext-v2.3
yxw 8 months ago
commit 4b6d081ede

@ -39,7 +39,7 @@ public interface IMesReworkTaskService {
void doAssemblySnRepeat(MesReworkTaskRequestModel requestModel); void doAssemblySnRepeat(MesReworkTaskRequestModel requestModel);
void reworkSuccess(MesReworkTaskRequestModel requestModel); void doReworkSuccess(MesReworkTaskRequestModel requestModel);
MesProduceSnPrintModel doPrint(MesReworkTaskRequestModel requestModel); MesProduceSnPrintModel doPrint(MesReworkTaskRequestModel requestModel);

@ -17,5 +17,5 @@ import java.util.List;
public interface IMesJisShippingService { public interface IMesJisShippingService {
@ApiOperation(value = "构筑发运报工数据") @ApiOperation(value = "构筑发运报工数据")
List<MesJisShipping> getJisShipping(MesShippingOrderManagement orderManagement, List<MesShippingOrderManagementDetail> orderManagementDetailList, String org); List<MesJisShipping> getJisShipping(MesShippingOrderManagement orderManagement, List<MesShippingOrderManagementDetail> orderManagementDetailList,String userName);
} }

@ -0,0 +1,20 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesPartPull;
import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description:
* @CreateDate 2024/09/12
* @Author gsz
*/
public interface IMesPartPullService {
@ApiOperation(value = "查询拉动组")
List<MesPartPull> queryMesPartPull(MesPartPull mesPartPull);
}

@ -2,8 +2,11 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import java.util.List;
public interface IMesProduceSnPrintService { public interface IMesProduceSnPrintService {
@ApiOperation(value = "查询包装信息") @ApiOperation(value = "查询包装信息")
@ -14,4 +17,7 @@ public interface IMesProduceSnPrintService {
@ApiOperation(value = "打印") @ApiOperation(value = "打印")
MesProduceSnPrintModel doPrint(MesProduceSnPrintModel mesProduceSnPrintModel); MesProduceSnPrintModel doPrint(MesProduceSnPrintModel mesProduceSnPrintModel);
@ApiOperation(value = "装配件查询")
List<MesProductionAssembly> findMesProductionAssembly(MesProductionAssembly mesProductionAssembly);
} }

@ -0,0 +1,24 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import java.util.Map;
/**
* @Description:
* @CreateDate 2024/09/12
* @Author gsz
*/
public interface IMesPullingOrderInfoService {
@ApiOperation(value = "查询拉动单")
ListPager queryMesPullingOrderInfoByPager(MesPullingOrderInfo mesPullingOrderInfo, Pager pager);
void doMesPullingOrderInfoScan(MesPullingOrderInfo mesPullingOrderInfo, String userName);
List<MesPullingOrderInfo> doMesPullingOrderInfoPrint(MesPullingOrderInfo mesPullingOrderInfo, String userName);
}

@ -1,11 +1,14 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi; package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingCheckModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSortShippingCheckModel;
import cn.estsh.i3plus.pojo.mes.bean.MesJisShipping;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import java.util.List;
/** /**
* @Description : * @Description :
* @Reference : * @Reference :
@ -27,6 +30,9 @@ public interface IMesSortShippingCheckService {
@ApiOperation(value = "查询发运单-自动推单") @ApiOperation(value = "查询发运单-自动推单")
MesShippingOrderManagement queryShippingOrderNoByAutoPushOrder(String shippingGroupNo, String org); MesShippingOrderManagement queryShippingOrderNoByAutoPushOrder(String shippingGroupNo, String org);
@ApiOperation("保存发运数据")
List<MesJisShipping> getMesJisShippings(MesShippingOrderManagement mesShippingOrderManagement,String userName);
void update(MesShippingOrderManagement item); void update(MesShippingOrderManagement item);
void updateDetail(MesShippingOrderManagementDetail item); void updateDetail(MesShippingOrderManagementDetail item);

@ -0,0 +1,33 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBinding;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingLog;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description : LOG
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/9/13 10:04
* @Modify:
**/
public interface IMesRecyclablePackageBindingLogService {
@ApiOperation("写入操作记录(创建)")
MesRecyclablePackageBindingLog insertCreate(MesRecyclablePackageBinding mesRecyclablePackageBinding);
@ApiOperation("写入操作记录(关箱)")
MesRecyclablePackageBindingLog insertClose(MesRecyclablePackageBinding mesRecyclablePackageBinding);
@ApiOperation("写入操作记录(绑定)")
MesRecyclablePackageBindingLog insertBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail);
@ApiOperation("写入操作记录(解绑)")
MesRecyclablePackageBindingLog insertUnBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail);
@ApiOperation("写入操作记录(解绑)")
void insertUnBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, List<MesRecyclablePackageBindingDetail> mesRecyclablePackageBindingDetail);
}

@ -0,0 +1,47 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPartPullService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPullingOrderInfoService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesPartPull;
import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord;
import cn.estsh.i3plus.pojo.mes.bean.MesPullingOrderInfo;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
*
*/
@Api("拉动组")
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN+ "/mesPartPull")
public class MesPartPullController {
@Autowired
private IMesPartPullService mesPartPullService;
@GetMapping(value = "/query")
@ApiOperation(value = "查询拉动组")
public ResultBean queryMesPartPull(MesPartPull mesPartPull) {
try {
mesPartPull.setOrganizeCode(mesPartPull.getOrganizeCode());
List<MesPartPull> partInspectionList= mesPartPullService.queryMesPartPull(mesPartPull);
return ResultBean.success("查询成功").setResultList(partInspectionList);
} catch (ImppBusiException e) {
return ResultBean.fail(e).build();
} catch (Exception e) {
return ResultBean.fail(e);
}
}
}

@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnPrintService;
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.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly;
import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
@ -97,4 +98,20 @@ public class MesProduceSnPrintController {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e); return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
} }
} }
@GetMapping("/mes-production-assembly/find")
@ApiOperation(value = "装配件查询")
public ResultBean findMesProductionAssembly(MesProductionAssembly mesProductionAssembly) {
try {
ValidatorBean.checkNotNull(mesProductionAssembly.getAssemblySn(), "装配件条码条码不能为空");
ValidatorBean.checkNotNull(mesProductionAssembly.getOrganizeCode(), "工厂代码不能为空");
return ResultBean.success("查询成功")
.setMsg(String.format("装配件【%s】条码查询成功!!!", mesProductionAssembly.getAssemblySn()))
.setResultList(mesProduceSnPrintService.findMesProductionAssembly(mesProductionAssembly));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
} }

@ -0,0 +1,97 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPullingOrderInfoService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
*
*/
@Api("拉动单扫描工位端")
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN+ "/mesPullingOrderInfo")
public class MesPullingOrderInfoController {
@Autowired
private IMesPullingOrderInfoService mesPullingOrderInfoService;
@Autowired
private IMesTemplateService mesTemplateService;
@GetMapping(value = "/query-pager")
@ApiOperation(value = "查询拉动单")
public ResultBean queryMesProdShiftRecord(MesPullingOrderInfo mesPullingOrderInfo, Pager pager) {
try {
mesPullingOrderInfo.setOrganizeCode(mesPullingOrderInfo.getOrganizeCode());
ListPager<MesProdShiftRecord> partInspectionListPager = mesPullingOrderInfoService.queryMesPullingOrderInfoByPager(mesPullingOrderInfo, pager);
return ResultBean.success("查询成功").setListPager(partInspectionListPager);
} catch (ImppBusiException e) {
return ResultBean.fail(e).build();
} catch (Exception e) {
return ResultBean.fail(e);
}
}
@PostMapping(value = "/doScan")
@ApiOperation(value = "拉动单扫描")
public ResultBean doMesPullingOrderInfoScan(@RequestBody MesPullingOrderInfo mesPullingOrderInfo) {
try {
if (StringUtils.isEmpty(mesPullingOrderInfo.getPullingOrderNo())) {
throw new ImppBusiException("拉动单号不能为空");
}
mesPullingOrderInfoService.doMesPullingOrderInfoScan(mesPullingOrderInfo, !StringUtils.isEmpty(mesPullingOrderInfo.getModifyUser())?mesPullingOrderInfo.getModifyUser(): AuthUtil.getSessionUser().getUserName());
return ResultBean.success("拉动单扫描成功")
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException e) {
return ResultBean.fail(e).build();
} catch (Exception e) {
return ResultBean.fail(e);
}
}
@PostMapping(value = "/doPrint")
@ApiOperation(value = "打印未打印拉动单后修改状态")
public ResultBean doMesPullingOrderInfoPrint(@RequestBody MesPullingOrderInfo mesPullingOrderInfo) {
try {
if (StringUtils.isEmpty(mesPullingOrderInfo.getWorkCenterCode())) {
throw new ImppBusiException("产线不能为空");
}
List<MesPullingOrderInfo> pullingOrderInfos = mesPullingOrderInfoService.doMesPullingOrderInfoPrint(mesPullingOrderInfo, AuthUtil.getSessionUser().getUserName());
return ResultBean.success("拉动单打印成功")
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode())
.setResultList(pullingOrderInfos);
} catch (ImppBusiException e) {
return ResultBean.fail(e).build();
} catch (Exception e) {
return ResultBean.fail(e);
}
}
@GetMapping("/template")
@ApiOperation(value = "查询打印模板和明细")
public ResultBean queryMesLabelTemplate(MesLabelTemplate labelTemplate ) {
try {
ValidatorBean.checkNotNull(labelTemplate.getTemplateCode(), "打印模板不能为空");
ValidatorBean.checkNotNull(labelTemplate.getOrganizeCode(), "工厂代码不能为空");
return ResultBean.success("查询成功").setResultObject(mesTemplateService.getMesLabelTemplate(labelTemplate.getTemplateCode(), labelTemplate.getOrganizeCode()));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -148,11 +148,11 @@ public class MesReworkTaskController {
@PostMapping("/reworkSuccess") @PostMapping("/reworkSuccess")
@ApiOperation(value = "返工成功") @ApiOperation(value = "返工成功")
public ResultBean reworkSuccess(@RequestBody MesReworkTaskRequestModel requestModel) { public ResultBean doReworkSuccess(@RequestBody MesReworkTaskRequestModel requestModel) {
// 数据校验 // 数据校验
//ValidatorBean.checkNotNull(requestModel.getSn(), "条码不能为空"); //ValidatorBean.checkNotNull(requestModel.getSn(), "条码不能为空");
try { try {
mesReworkTaskService.reworkSuccess(requestModel); mesReworkTaskService.doReworkSuccess(requestModel);
return ResultBean.success("返工成功"); return ResultBean.success("返工成功");
} catch (ImppBusiException imppException) { } catch (ImppBusiException imppException) {
return ResultBean.fail(imppException); return ResultBean.fail(imppException);

@ -62,7 +62,7 @@ public class MesSortShippingCheckController {
// 数据校验 // 数据校验
ValidatorBean.checkNotNull(shippingOrderManagement.getShippingCode(), "发运单不能为空"); ValidatorBean.checkNotNull(shippingOrderManagement.getShippingCode(), "发运单不能为空");
shippingOrderManagement.setOrganizeCode(organizeCode); shippingOrderManagement.setOrganizeCode(organizeCode);
ConvertBean.serviceModelUpdate(shippingOrderManagement,!StringUtils.isEmpty(shippingOrderManagement.getModifyUser()) ? shippingOrderManagement.getModifyUser() : AuthUtil.getSessionUser().getUserName()); ConvertBean.serviceModelUpdate(shippingOrderManagement, userInfo);
MesSortShippingCheckModel model = sortShippingCheckService.doShippingOrderNoQuery(shippingOrderManagement); MesSortShippingCheckModel model = sortShippingCheckService.doShippingOrderNoQuery(shippingOrderManagement);
return ResultBean.success("查询成功").setResultObject(model); return ResultBean.success("查询成功").setResultObject(model);
} catch (ImppBusiException imppException) { } catch (ImppBusiException imppException) {

@ -130,6 +130,9 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
@Autowired @Autowired
private IMesProductVersionService mesProductVersionService; private IMesProductVersionService mesProductVersionService;
@Autowired
private MesQmsScrapRepository mesQmsScrapRepository;
@Override @Override
public ListPager<MesReworkTask> queryReworkTask(MesReworkTask mesReworkTask, Pager pager) { public ListPager<MesReworkTask> queryReworkTask(MesReworkTask mesReworkTask, Pager pager) {
String organizeCode = !StringUtils.isEmpty(mesReworkTask.getOrganizeCode())?mesReworkTask.getOrganizeCode():AuthUtil.getOrganizeCode(); String organizeCode = !StringUtils.isEmpty(mesReworkTask.getOrganizeCode())?mesReworkTask.getOrganizeCode():AuthUtil.getOrganizeCode();
@ -252,7 +255,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
} }
@Override @Override
public void reworkSuccess(MesReworkTaskRequestModel requestModel) { public void doReworkSuccess(MesReworkTaskRequestModel requestModel) {
MesReworkTask mesReworkTask = getMesReworkTask(requestModel); MesReworkTask mesReworkTask = getMesReworkTask(requestModel);
/** /**
@ -262,13 +265,27 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
if (!CollectionUtils.isEmpty(reworkTaskDetails)) { if (!CollectionUtils.isEmpty(reworkTaskDetails)) {
MesPcnException.throwFlowException("还有位置未返工完成,请检查"); MesPcnException.throwFlowException("还有位置未返工完成,请检查");
} }
MesPartInspection mesPartInspection = null;
if (!StringUtils.isEmpty(mesReworkTask.getId())){
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesReworkTask.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(mesReworkTask.getId(), "reworkTaskId", packBean);
mesPartInspection = mesPartInspectionRepository.getByProperty(packBean);
if (!StringUtils.isEmpty(mesReworkTask.getId())){
if(!CollectionUtils.isEmpty(requestModel.getAssemblyModelList())){
mesPartInspection.setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.DISASSEMBLY.getValue());
}
mesPartInspection.setQmsSync(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
ConvertBean.serviceModelUpdate(mesPartInspection, requestModel.getUserName());
mesPartInspectionRepository.update(mesPartInspection);
}
}
if (MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.LOT.getValue() == mesReworkTask.getType()) { if (MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.LOT.getValue() == mesReworkTask.getType()) {
mesReworkTask.setReworkedQty(requestModel.getReworkedQty()); mesReworkTask.setReworkedQty(requestModel.getReworkedQty());
mesReworkTask.setScrapQty(requestModel.getScrapQty()); mesReworkTask.setScrapQty(requestModel.getScrapQty());
} else { } else {
//拆解 //拆解
if(!CollectionUtils.isEmpty(requestModel.getAssemblyModelList())){ if(!CollectionUtils.isEmpty(requestModel.getAssemblyModelList())){
doAssemblyDisassembly(requestModel, mesReworkTask.getSn()); doAssemblyDisassembly(requestModel, mesReworkTask.getSn(),Objects.isNull(mesPartInspection)?"":mesPartInspection.getResponsibleParty());
} }
if (MesExtEnumUtil.NC_TYPE.REWORK.getValue() == requestModel.getType()) { if (MesExtEnumUtil.NC_TYPE.REWORK.getValue() == requestModel.getType()) {
@ -284,16 +301,6 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
mesReworkTask.setStatus(MesExtEnumUtil.REWORK_TASK_STATUS.FINISH.getValue()); mesReworkTask.setStatus(MesExtEnumUtil.REWORK_TASK_STATUS.FINISH.getValue());
ConvertBean.serviceModelUpdate(mesReworkTask,requestModel.getUserName()); ConvertBean.serviceModelUpdate(mesReworkTask,requestModel.getUserName());
mesReworkTaskRepository.save(mesReworkTask); mesReworkTaskRepository.save(mesReworkTask);
if (!StringUtils.isEmpty(mesReworkTask.getId())){
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesReworkTask.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(mesReworkTask.getId(), "reworkTaskId", packBean);
MesPartInspection mesPartInspection = mesPartInspectionRepository.getByProperty(packBean);
if (!StringUtils.isEmpty(mesReworkTask.getId())){
mesPartInspection.setQmsSync(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
ConvertBean.serviceModelUpdate(mesPartInspection, requestModel.getUserName());
mesPartInspectionRepository.update(mesPartInspection);
}
}
} }
@Override @Override
@ -333,7 +340,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
snList.add(sn); snList.add(sn);
mesProduceSnPrintModel.getMesProduceSnList().addAll(snList); mesProduceSnPrintModel.getMesProduceSnList().addAll(snList);
//发送新老条码关系给WMS //发送新老条码关系给WMS
createMove(requestModel.getSn(),sn.getProductSn(),organizeCode,requestModel.getUserName()); doCreateMove(requestModel.getSn(),sn.getProductSn(),organizeCode,requestModel.getUserName());
//更新条码 //更新条码
ConvertBean.serviceModelUpdate(sn,requestModel.getUserName()); ConvertBean.serviceModelUpdate(sn,requestModel.getUserName());
mesProduceSnRepository.update(sn); mesProduceSnRepository.update(sn);
@ -556,15 +563,17 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
public void recursionAssemblySnTree(List<MesProductionAssemblyModel> assemblyTree, MesReworkTaskRequestModel requestModel,long pid) { public void recursionAssemblySnTree(List<MesProductionAssemblyModel> assemblyTree, MesReworkTaskRequestModel requestModel,long pid) {
for (MesProductionAssemblyModel assembly : assemblyTree) { for (MesProductionAssemblyModel assembly : assemblyTree) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(requestModel.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(assembly.getAssemblySn(), "productSn", packBean);
DdlPreparedPack.getStringEqualPack(requestModel.getAssemblyPartNo(), "assemblyPartNo", packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(), "assemblyStatus", packBean);
List<MesProductionAssembly> mesProductionAssemblies = mesProductionAssemblyRepository.findByHqlWhere(packBean);
assembly.setPid(pid); assembly.setPid(pid);
if (!CollectionUtils.isEmpty(mesProductionAssemblies)) { if(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_10.getValue() == assembly.getMatchType() && !StringUtils.isEmpty(assembly.getAssemblySn())){
assembly.setChildren(parseArray(mesProductionAssemblies)); DdlPackBean packBean = DdlPackBean.getDdlPackBean(requestModel.getOrganizeCode());
recursionAssemblySnTree(assembly.getChildren(), requestModel, assembly.getId()); DdlPreparedPack.getStringEqualPack(assembly.getAssemblySn(), "productSn", packBean);
DdlPreparedPack.getStringEqualPack(requestModel.getAssemblyPartNo(), "assemblyPartNo", packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(), "assemblyStatus", packBean);
List<MesProductionAssembly> mesProductionAssemblies = mesProductionAssemblyRepository.findByHqlWhere(packBean);
if (!CollectionUtils.isEmpty(mesProductionAssemblies)) {
assembly.setChildren(parseArray(mesProductionAssemblies));
recursionAssemblySnTree(assembly.getChildren(), requestModel, assembly.getId());
}
} }
} }
} }
@ -603,14 +612,16 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
mesProduceSnRepository.update(oldProduceSn); mesProduceSnRepository.update(oldProduceSn);
} }
private void doAssemblyDisassembly(MesReworkTaskRequestModel requestModel, String productSn) { private void doAssemblyDisassembly(MesReworkTaskRequestModel requestModel, String productSn,String responsibleParty) {
//报废目标库位
String destLocateNo = getDestLocateNo(requestModel.getOrganizeCode(), productSn);
//总成拆解 //总成拆解
doProductReportReversal(requestModel,productSn); doProductReportReversal(requestModel,productSn,destLocateNo);
//装配件数据处理 //装配件数据处理
recursionCheck(requestModel.getAssemblyModelList(), requestModel.getOrganizeCode(), requestModel.getUserName(),mesConfigService.getCfgValue(requestModel.getOrganizeCode(), MesPcnExtConstWords.DISASSEMBLY_DEST_LOCATE)); doRecursionCheck(requestModel.getAssemblyModelList(), requestModel.getOrganizeCode(), requestModel.getUserName(),destLocateNo,responsibleParty);
} }
private void doProductReportReversal(MesReworkTaskRequestModel requestModel, String productSn) { private void doProductReportReversal(MesReworkTaskRequestModel requestModel, String productSn,String locateNo) {
//更新条码状态为总成拆解 //更新条码状态为总成拆解
MesProduceSn produceSnDb = getMesProduceSn(requestModel.getOrganizeCode(), productSn); MesProduceSn produceSnDb = getMesProduceSn(requestModel.getOrganizeCode(), productSn);
produceSnDb.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_DISASSEMBLY.getValue()); produceSnDb.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_DISASSEMBLY.getValue());
@ -632,7 +643,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
mesWorkOrderService.doProductReportReversal(mesWorkOrderDb,productVersion, requestModel.getUserName()); mesWorkOrderService.doProductReportReversal(mesWorkOrderDb,productVersion, requestModel.getUserName());
//移库 //移库
requestModel.setSn(produceSnDb.getProductSn()); requestModel.setSn(produceSnDb.getProductSn());
createMove(requestModel,getDestLocateNo(requestModel.getOrganizeCode(), produceSnDb.getProductSn()),productVersion.getReceiveInventoryPoint(),mesWorkOrderDb.getErpWorkCenter(),mesWorkOrderDb.getPartNo()); doCreateMove(requestModel,locateNo,productVersion.getReceiveInventoryPoint(),mesWorkOrderDb.getErpWorkCenter(),mesWorkOrderDb.getPartNo());
} }
private MesProductVersion getProductVersion(MesWorkOrder mesWorkOrderDb) { private MesProductVersion getProductVersion(MesWorkOrder mesWorkOrderDb) {
@ -643,7 +654,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
return mesProductVersion; return mesProductVersion;
} }
public void recursionCheck(List<MesProductionAssemblyModel> assemblyModelList,String organizeCode,String userName,String destLocate){ public void doRecursionCheck(List<MesProductionAssemblyModel> assemblyModelList,String organizeCode,String userName,String destLocate,String responsibleParty){
for (MesProductionAssemblyModel assemblyModel : assemblyModelList) { for (MesProductionAssemblyModel assemblyModel : assemblyModelList) {
//勾选 //勾选
if (assemblyModel.getFlag() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { if (assemblyModel.getFlag() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
@ -652,10 +663,16 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
updateOldSn(organizeCode,assemblyModel.getAssemblySn(), userName, MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue()); updateOldSn(organizeCode,assemblyModel.getAssemblySn(), userName, MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue());
} }
//对于已勾选报废的子件,对于有零件号的项,产生移库(产线的材料库位->报废库(系统参数配置))。移库数量为报废时的明细数量; //对于已勾选报废的子件,对于有零件号的项,产生移库(产线的材料库位->报废库(系统参数配置))。移库数量为报废时的明细数量;
createMove(getMesWorkCenter(organizeCode, assemblyModel.getWorkCenterCode()),destLocate, assemblyModel,userName); if(!StringUtils.isEmpty(assemblyModel.getAssemblyPartNo())){
//移库
doCreateMove(getMesWorkCenter(organizeCode, assemblyModel.getWorkCenterCode()),destLocate, assemblyModel,userName);
//报废
doCreateScrap(assemblyModel,userName,responsibleParty,organizeCode);
}
//循环处理数据 //循环处理数据
if(!CollectionUtils.isEmpty(assemblyModel.getChildren())){ if(!CollectionUtils.isEmpty(assemblyModel.getChildren())){
recursionCheck(assemblyModel.getChildren(),organizeCode,userName,destLocate); doRecursionCheck(assemblyModel.getChildren(),organizeCode,userName,destLocate,responsibleParty);
} }
} else if (assemblyModel.getFlag() == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) { } else if (assemblyModel.getFlag() == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) {
//装配解绑 //装配解绑
@ -754,7 +771,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
private MesWorkCenter getMesWorkCenter(String organizeCode, String workCenterCode) { private MesWorkCenter getMesWorkCenter(String organizeCode, String workCenterCode) {
MesWorkCenter workCenterDb = prodOrgExtService.getWorkCenterDb(organizeCode,workCenterCode); MesWorkCenter workCenterDb = prodOrgExtService.getWorkCenterDb(organizeCode,workCenterCode);
if(Objects.isNull(workCenterDb)) MesPcnException.throwFlowException("产线【%s】信息不存在", workCenterCode); if(Objects.isNull(workCenterDb)) MesPcnException.throwFlowException(String.format("产线【%s】信息不存在", workCenterCode));
return workCenterDb; return workCenterDb;
} }
@ -835,7 +852,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
mesProduceSnRepository.update(produceSn); mesProduceSnRepository.update(produceSn);
} }
private MesMove createMove(String oldSn, String sn, String organizeCode, String userName) { private MesMove doCreateMove(String oldSn, String sn, String organizeCode, String userName) {
MesMove move = new MesMove(); MesMove move = new MesMove();
move.setOrganizeCode(organizeCode); move.setOrganizeCode(organizeCode);
move.setFactoryCode(organizeCode); move.setFactoryCode(organizeCode);
@ -848,7 +865,23 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
return moveRepository.insert(move); return moveRepository.insert(move);
} }
private void createMove(MesWorkCenter mesWorkCenter, String destLocate, MesProductionAssemblyModel assemblyModel,String userName) { private void doCreateScrap(MesProductionAssemblyModel assemblyModel,String userName,String responsibleParty,String organizeCode) {
//新增一条数据到报废表中
MesQmsScrap mesQmsScrap = new MesQmsScrap();
mesQmsScrap.setOrganizeCode(organizeCode);
mesQmsScrap.setAsnNo("");
mesQmsScrap.setSource("MES");
mesQmsScrap.setRejectQty(assemblyModel.getScrapQty().intValue());
mesQmsScrap.setPartNo(assemblyModel.getAssemblyPartNo());
mesQmsScrap.setPartName(assemblyModel.getAssemblyPartName());
mesQmsScrap.setDefectTypeName("拆解报废");
mesQmsScrap.setReponsibilityId(responsibleParty);
mesQmsScrap.setNcJudger(userName);
ConvertBean.serviceModelInitialize(mesQmsScrap, userName);
mesQmsScrapRepository.insert(mesQmsScrap);
}
private void doCreateMove(MesWorkCenter mesWorkCenter, String destLocate, MesProductionAssemblyModel assemblyModel,String userName) {
MesMove move = new MesMove(); MesMove move = new MesMove();
move.setMatnr(assemblyModel.getAssemblyPartNo()); move.setMatnr(assemblyModel.getAssemblyPartNo());
move.setOrganizeCode(mesWorkCenter.getOrganizeCode()); move.setOrganizeCode(mesWorkCenter.getOrganizeCode());
@ -865,7 +898,7 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService {
moveRepository.insert(move); moveRepository.insert(move);
} }
private void createMove(MesReworkTaskRequestModel requestModel,String srcLocate, String destLocate,String workCenterCode,String partNo) { private void doCreateMove(MesReworkTaskRequestModel requestModel,String srcLocate, String destLocate,String workCenterCode,String partNo) {
MesPartSap mesPartSap = mesPartService.getMesPartSapByPartNo(partNo, requestModel.getOrganizeCode()); MesPartSap mesPartSap = mesPartService.getMesPartSapByPartNo(partNo, requestModel.getOrganizeCode());
MesMove move = new MesMove(); MesMove move = new MesMove();
move.setMatnr(mesPartSap.getPartNo()); move.setMatnr(mesPartSap.getPartNo());

@ -10,7 +10,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesJisShipping;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup; import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -30,7 +29,7 @@ import java.util.UUID;
**/ **/
@Service @Service
@Slf4j @Slf4j
public class MesJisShippingService implements IMesJisShippingService { public class MesJisShippingServiceImpl implements IMesJisShippingService {
@Autowired @Autowired
private IMesPartShippingGroupService mesPartShippingGroupService; private IMesPartShippingGroupService mesPartShippingGroupService;
@ -38,8 +37,10 @@ public class MesJisShippingService implements IMesJisShippingService {
@Autowired @Autowired
private IMesConfigService configService; private IMesConfigService configService;
public List<MesJisShipping> getJisShipping(MesShippingOrderManagement orderManagement, List<MesShippingOrderManagementDetail> orderManagementDetailList, String org) { public List<MesJisShipping> getJisShipping(MesShippingOrderManagement orderManagement, List<MesShippingOrderManagementDetail> orderManagementDetailList,String userName) {
MesPartShippingGroup mesPartShippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(org, orderManagement.getShippingGroupCode()); MesPartShippingGroup mesPartShippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(orderManagement.getOrganizeCode(), orderManagement.getShippingGroupCode());
String warerhouse = mesPartShippingGroup == null || StringUtils.isEmpty(mesPartShippingGroup.getSrcWarerhouse()) ? configService.getCfgValue(orderManagement.getOrganizeCode(), "ERP_WARERHOUSE") : mesPartShippingGroup.getSrcWarerhouse();
String erpWarehous = configService.getCfgValue(orderManagement.getOrganizeCode(), "ERP_WAREHOUS");
List<MesJisShipping> jisShippingList = new ArrayList<>(); List<MesJisShipping> jisShippingList = new ArrayList<>();
orderManagementDetailList.forEach(k -> { orderManagementDetailList.forEach(k -> {
MesJisShipping jisShipping = new MesJisShipping(); MesJisShipping jisShipping = new MesJisShipping();
@ -47,8 +48,8 @@ public class MesJisShippingService implements IMesJisShippingService {
BeanUtils.copyProperties(k, jisShipping, "id"); BeanUtils.copyProperties(k, jisShipping, "id");
jisShipping.setFactoryCode(orderManagement.getCustOrganizeCode()); jisShipping.setFactoryCode(orderManagement.getCustOrganizeCode());
jisShipping.setShippingTime(TimeTool.getNowTime(true)); jisShipping.setShippingTime(TimeTool.getNowTime(true));
jisShipping.setErpWarerhouse(mesPartShippingGroup == null || StringUtils.isEmpty(mesPartShippingGroup.getSrcWarerhouse()) ? configService.getCfgValue(org, "ERP_WARERHOUSE"): mesPartShippingGroup.getSrcWarerhouse()); jisShipping.setErpWarerhouse(warerhouse);
jisShipping.setErpWarehous(configService.getCfgValue(org, "ERP_WAREHOUS")); jisShipping.setErpWarehous(erpWarehous);
jisShipping.setDock(orderManagement.getSendDockCode()); jisShipping.setDock(orderManagement.getSendDockCode());
jisShipping.setCusCode(orderManagement.getCustCode()); jisShipping.setCusCode(orderManagement.getCustCode());
jisShipping.setCusDock(orderManagement.getCustDockCode()); jisShipping.setCusDock(orderManagement.getCustDockCode());
@ -59,7 +60,7 @@ public class MesJisShippingService implements IMesJisShippingService {
jisShipping.setShippingOrderCode(orderManagement.getShippingCode()); jisShipping.setShippingOrderCode(orderManagement.getShippingCode());
jisShipping.setFid(UUID.randomUUID().toString()); jisShipping.setFid(UUID.randomUUID().toString());
jisShipping.setSystemSyncStatus(CommonEnumUtil.FALSE); jisShipping.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelInitialize(jisShipping, AuthUtil.getSessionUser().getUserName()); ConvertBean.serviceModelInitialize(jisShipping, userName);
jisShippingList.add(jisShipping); jisShippingList.add(jisShipping);
}); });

@ -0,0 +1,43 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPartPullService;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesPartPull;
import cn.estsh.i3plus.pojo.mes.repository.*;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@Slf4j
public class MesPartPullService implements IMesPartPullService {
public static final Logger LOGGER = LoggerFactory.getLogger(MesPartPullService.class);
@Autowired
private MesPartPullRepository mesPartPullRDao;
@Autowired
private MesPartPullDetailRepository mesPartPullDetailRDao;
@Autowired
private MesWorkOrderPartRepository workOrderPartRepository;
@Autowired
private MesWorkCenterRepository mesWorkCenterRepository;
@Override
public List<MesPartPull> queryMesPartPull(MesPartPull bean) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean);
DdlPreparedPack.getStringEqualPack(bean.getPullCode(), "pullCode", packBean);
packBean.setOrderByStr(bean.orderBy());
return mesPartPullRDao.findByHqlWhere(packBean);
}
}

@ -68,6 +68,8 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
@Autowired @Autowired
private MesCustomerPartRepository mesCustomerPartRDao; private MesCustomerPartRepository mesCustomerPartRDao;
@Autowired
private MesProductionAssemblyRepository mesProductionAssemblyRepository;
@Autowired @Autowired
private IConfigService configService; private IConfigService configService;
@ -216,4 +218,21 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
MesCustomerPart mesCustomerPart = mesCustomerPartRDao.getByProperty(ddlPackBean); MesCustomerPart mesCustomerPart = mesCustomerPartRDao.getByProperty(ddlPackBean);
return mesCustomerPart; return mesCustomerPart;
} }
@Override
public List<MesProductionAssembly> findMesProductionAssembly(MesProductionAssembly requestModel) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(requestModel.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(requestModel.getAssemblySn(), "assemblySn", packBean);
if (!StringUtils.isEmpty(requestModel.getPartNo())) {
DdlPreparedPack.getStringEqualPack(requestModel.getPartNo(), "partNo", packBean);
}
if (!StringUtils.isEmpty(requestModel.getAssemblyPartNo())) {
DdlPreparedPack.getStringEqualPack(requestModel.getAssemblyPartNo(), "assemblyPartNo", packBean);
}
List<MesProductionAssembly> mesProductionAssemblies = mesProductionAssemblyRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(mesProductionAssemblies)) {
MesPcnException.throwMesBusiException("扫描的装配件条码【%s】条码不存在请扫描其他的装配件",requestModel.getAssemblySn());
}
return mesProductionAssemblies;
}
} }

@ -0,0 +1,170 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPullingOrderInfoService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
@Service
@Slf4j
public class MesPullingOrderInfoService implements IMesPullingOrderInfoService {
public static final Logger LOGGER = LoggerFactory.getLogger(MesPullingOrderInfoService.class);
@Autowired
private MesPullingOrderInfoRepository mesPullingOrderInfoRepository;
@Autowired
private MesPullingOrderPartInfoRepository mesPullingOrderPartInfoRepository;
@Autowired
private MesPartPullRepository mesPartPullRDao;
@Autowired
private MesPartPullDetailRepository mesPartPullDetailRDao;
@Autowired
private MesWorkOrderPartRepository workOrderPartRepository;
@Autowired
private MesWorkCenterRepository mesWorkCenterRepository;
@Autowired
private MesPullingOrderExtendsRepository mesPullingOrderExtendsRepository;
@Override
public ListPager<MesPullingOrderInfo> queryMesPullingOrderInfoByPager(MesPullingOrderInfo bean, Pager pager) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
setPackQueryBean(bean, packBean);
if (!StringUtil.isEmpty(bean.orderBy())) {
packBean.setOrderByStr(bean.orderBy());
} else {
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean);
}
//
if (!StringUtil.isEmpty(bean.getCreateDatetime())) {
DdlPreparedPack.getStringBiggerPack(bean.getCreateDatetime(), "createDatetime", packBean);
}
pager = PagerHelper.getPager(pager, mesPullingOrderInfoRepository.findByHqlWhereCount(packBean));
List<MesPullingOrderInfo> resultList = mesPullingOrderInfoRepository.findByHqlWherePage(packBean, pager);
return new ListPager<>(resultList, pager);
}
protected void setPackQueryBean(MesPullingOrderInfo bean, DdlPackBean packBean) {
DdlPreparedPack.getStringEqualPack(bean.getPullCode(), "pullCode", packBean);
DdlPreparedPack.getStringEqualPack(bean.getPullingOrderNo(), "pullingOrderNo", packBean);
DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean);
DdlPreparedPack.getNumEqualPack(bean.getPullOrderType(), "pullOrderType", packBean);
DdlPreparedPack.getNumEqualPack(bean.getPrintStatus(), "printStatus", packBean);
//已确认、已扫描、已发送设备
if (StringUtil.isEmpty(bean.getPullOrderStatus())) {
DdlPreparedPack.getInPackList(Arrays.asList(
MesExtEnumUtil.PULL_ORDER_STATUS.KITTING_PULL.getValue(),
MesExtEnumUtil.PULL_ORDER_STATUS.JIS_PULL.getValue(),
MesExtEnumUtil.PULL_ORDER_STATUS.SPS_PULL.getValue()), "pullOrderStatus", packBean);
} else {
DdlPreparedPack.getNumEqualPack(bean.getPullOrderStatus(), "pullOrderStatus", packBean);
}
DdlPreparedPack.getStringEqualPack(bean.getWorkOrderNo(), "workOrderNo", packBean);
DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean);
}
@Override
public void doMesPullingOrderInfoScan(MesPullingOrderInfo bean, String userName) {
//校验是不是第一行数据
DdlPackBean packBeanOne = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(bean.getPullCode(), "pullCode", packBeanOne);
DdlPreparedPack.getStringEqualPack(bean.getPullingOrderNo(), "pullingOrderNo", packBeanOne);
DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBeanOne);
// DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PULL_ORDER_STATUS.KITTING_PULL.getValue(), "pullOrderStatus", packBeanOne);
MesPullingOrderInfo mesPullingOrderInfo = mesPullingOrderInfoRepository.getByProperty(packBeanOne);
if (StringUtil.isEmpty(mesPullingOrderInfo)) {
MesPcnException.throwMesBusiException("扫描拉动单号【%s】查询数据为空", bean.getPullingOrderNo());
}
if (mesPullingOrderInfo.getPullOrderStatus() != MesExtEnumUtil.PULL_ORDER_STATUS.KITTING_PULL.getValue()) {
MesPcnException.throwMesBusiException("扫描拉动单号【%s】拉动单状态不是【已确认】", bean.getPullingOrderNo());
}
//强过码 如果强过为true 不校验顺序 直接扫描完成修改状态为已扫描 todo
if ((!Objects.isNull(bean.getIsPass()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == bean.getIsPass())) {
mesPullingOrderInfo.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.JIS_PULL.getValue());
ConvertBean.serviceModelUpdate(mesPullingOrderInfo, userName);
mesPullingOrderInfoRepository.update(mesPullingOrderInfo);
} else {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(bean.getPullCode(), "pullCode", packBean);
DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean);
DdlPreparedPack.getNumEqualPack(bean.getPullOrderType(), "pullOrderType", packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PULL_ORDER_STATUS.KITTING_PULL.getValue(), "pullOrderStatus", packBean);
// if (!StringUtil.isEmpty(bean.orderBy())) {
// packBean.setOrderByStr(bean.orderBy());
// } else {
//顺序校验 根据未扫描单号 1 、2 、3如果没有强过码 必须先扫1 再扫2
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"pullingOrderNo"}, packBean);
// }
List<MesPullingOrderInfo> pullingOrderInfos = mesPullingOrderInfoRepository.findByHqlWhere(packBean);
if (!CollectionUtils.isEmpty(pullingOrderInfos)) {
//按照排序 依次扫描,如果扫描不按照顺序 报错
MesPullingOrderInfo pullingOrderInfo = pullingOrderInfos.get(0);
if (pullingOrderInfo.getPullOrderStatus().equals(mesPullingOrderInfo.getPullOrderStatus())) {
mesPullingOrderInfo.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.JIS_PULL.getValue());
ConvertBean.serviceModelUpdate(mesPullingOrderInfo, userName);
mesPullingOrderInfoRepository.update(mesPullingOrderInfo);
} else {
MesPcnException.throwMesBusiException("扫描拉动单号【%s】SPS排序单校验顺序错误", bean.getPullingOrderNo());
}
} else {
MesPcnException.throwMesBusiException("扫描拉动单号产线拉动组【%s】数据为空", bean.getPullingOrderNo());
}
}
}
@Override
public List<MesPullingOrderInfo> doMesPullingOrderInfoPrint(MesPullingOrderInfo bean, String userName) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
//多选
if(!StringUtil.isEmpty(bean.getPullCode())){
DdlPreparedPack.getInPackList(Arrays.asList(bean.getPullCode().split(",")), "pullCode", packBean);
}
if(!StringUtil.isEmpty(bean.getWorkCenterCode())){
DdlPreparedPack.getInPackList(Arrays.asList(bean.getWorkCenterCode().split(",")), "workCenterCode", packBean);
}
DdlPreparedPack.getStringEqualPack(bean.getPullingOrderNo(), "pullingOrderNo", packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue(), "printStatus", packBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean);
List<MesPullingOrderInfo> pullingOrderInfos = mesPullingOrderInfoRepository.findByHqlWhere(packBean);
if (!CollectionUtils.isEmpty(pullingOrderInfos)) {
//把查出来的拉动单打印并修改打印状态为已打印
for (MesPullingOrderInfo pullingOrderInfo : pullingOrderInfos) {
//查询拉动组明细
DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(pullingOrderInfo.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(pullingOrderInfo.getPullingOrderNo(), "pullingOrderNo", partPackBean);
List<MesPullingOrderPartInfo> pullingOrderPartInfos = mesPullingOrderPartInfoRepository.findByHqlWhere(partPackBean);
if (!CollectionUtils.isEmpty(pullingOrderPartInfos)) {
pullingOrderInfo.setPartCount(pullingOrderPartInfos.size());
pullingOrderInfo.setPullingOrderPartInfos(pullingOrderPartInfos);
}
pullingOrderInfo.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue());
ConvertBean.serviceModelUpdate(pullingOrderInfo, userName);
}
mesPullingOrderInfoRepository.saveAll(pullingOrderInfos);
}
return pullingOrderInfos;
}
}

@ -1,7 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesJisShippingService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesShippingLoadingCheckService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesShippingLoadingCheckService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesSortShippingCheckService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog; import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesShippingLoadingCheckModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesShippingLoadingCheckModel;
@ -11,6 +11,7 @@ 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.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup; import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail;
@ -48,21 +49,23 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
@Autowired @Autowired
private MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository; private MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository;
@Autowired @Autowired
private MesProduceSnRepository produceSnRepository;
@Autowired
private IMesJisShippingService jisShippingService;
@Autowired
private MesJisShippingRepository jisShippingRepository; private MesJisShippingRepository jisShippingRepository;
@Autowired @Autowired
private MesPartShippingGroupService mesPartShippingGroupService; private MesPartShippingGroupService mesPartShippingGroupService;
@Autowired
private IMesSortShippingCheckService mesSortShippingCheckService;
@Override @Override
public MesShippingLoadingCheckModel doLoadingOrderNoQuery(MesLoadingList loadingList) { public MesShippingLoadingCheckModel doLoadingOrderNoQuery(MesLoadingList loadingList) {
//校验装车单 //校验装车单
MesLoadingList loadingListResult = checkLoadingList(loadingList.getOrderCode(), loadingList.getOrganizeCode(),loadingList.getIsPass(),loadingList.getModifyUser()); MesLoadingList loadingListResult = checkLoadingList(loadingList.getOrderCode(), loadingList.getOrganizeCode(),loadingList.getIsPass(),loadingList.getModifyUser());
if(Objects.isNull(loadingListResult)){
return null;
}
//若生成装车单,则一定有装车单明细 //若生成装车单,则一定有装车单明细
DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(loadingList.getOrganizeCode()); DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(loadingList.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(loadingListResult.getId(), "pid", orderDetailPackBean); DdlPreparedPack.getNumEqualPack(loadingListResult.getId(), "pid", orderDetailPackBean);
@ -141,7 +144,8 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
//MesLoadingList loadingList = checkLoadingList(model.getOrderCode(), organizeCode,model.getIsPass(),userInfo); //MesLoadingList loadingList = checkLoadingList(model.getOrderCode(), organizeCode,model.getIsPass(),userInfo);
//根据扫描的发运单以及前端传的发运单明细,进行匹配,若没有找到扫描的发运单,则提示扫描的发运单号不在此装车单中,请检查数据!。 //根据扫描的发运单以及前端传的发运单明细,进行匹配,若没有找到扫描的发运单,则提示扫描的发运单号不在此装车单中,请检查数据!。
if(!Objects.isNull(model.getIsPass()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == model.getIsPass()){ //1 跳过
if(!Objects.isNull(model.getIsPass()) && Objects.equals(MesPcnExtConstWords.ONE,model.getIsPass())){
Optional<MesLoadingListDetail> loadingListDetailOptional = model.getDetailList().stream().filter(t -> !Objects.equals(t.getTempStatus(), MesCommonConstant.TRUE_INTEGER)).findFirst(); Optional<MesLoadingListDetail> loadingListDetailOptional = model.getDetailList().stream().filter(t -> !Objects.equals(t.getTempStatus(), MesCommonConstant.TRUE_INTEGER)).findFirst();
if(loadingListDetailOptional.isPresent()){ if(loadingListDetailOptional.isPresent()){
MesLoadingListDetail loadingListDetail = loadingListDetailOptional.get(); MesLoadingListDetail loadingListDetail = loadingListDetailOptional.get();
@ -222,12 +226,8 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
vehiclesOrderDetailList.forEach(k -> { vehiclesOrderDetailList.forEach(k -> {
if(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue() == k.getStatus()){ if(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue() == k.getStatus()){
k.setStatus(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.PUBLISHED.getValue()); // todo 不改变为发运状态 k.setStatus(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.PUBLISHED.getValue()); // todo 不改变为发运状态
}else if(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue() == k.getStatus()){
//关闭发运单明细
closeOrder(loadingList, k, userInfo);
} }
k.setSystemSyncStatus(CommonEnumUtil.FALSE); k.setSystemSyncStatus(CommonEnumUtil.FALSE);
// k.setStatus(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); todo 不改变为发运状态
ConvertBean.serviceModelUpdate(k, userInfo); ConvertBean.serviceModelUpdate(k, userInfo);
}); });
@ -259,10 +259,6 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
loadingListDetail.setStatus(status); loadingListDetail.setStatus(status);
//根据是否启动记忆判断 若启用记忆,则根据保存数据库 //根据是否启动记忆判断 若启用记忆,则根据保存数据库
if (Objects.equals(loadingList.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) { if (Objects.equals(loadingList.getIsEnableMemory(), MesCommonConstant.TRUE_INTEGER)) {
//关闭跳过的单据
if(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue() == status){
closeOrder(loadingList, loadingListDetail, userName);
}
//若装车单状态为创建或发布已生成ASN 则写入开始扫描时间 //若装车单状态为创建或发布已生成ASN 则写入开始扫描时间
if (loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.CREATE.getValue() || if (loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.CREATE.getValue() ||
loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.PUBLISH.getValue() || loadingList.getStatus() == MesExtEnumUtil.MES_LOADING_STATUS.PUBLISH.getValue() ||
@ -279,18 +275,6 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
} }
} }
private void closeOrder(MesLoadingList loadingList, MesLoadingListDetail loadingListDetail, String userName) {
//关闭发运单明细
// List<Long> idList = new ArrayList<>();
// idList.add(loadingList.getId());
// List<MesShippingOrderManagement> mesShippingOrderManagementList = getMesShippingOrderManagementList(loadingList.getOrganizeCode(),idList);
// if(!CollectionUtils.isEmpty(mesShippingOrderManagementList)){
// closeShippingOrderDetails(loadingList.getOrganizeCode(), userName,MesPcnExtConstWords.SHIP_PASS, mesShippingOrderManagementList.stream().filter(t-> loadingListDetail.getShippingCode().equals(t.getShippingCode())).map(MesShippingOrderManagement::getId).collect(Collectors.toList()));
// }
// //关闭发运单
// closeShippingOrder(loadingList.getOrganizeCode(), userName,MesPcnExtConstWords.SHIP_PASS, mesShippingOrderManagementList.stream().filter(t-> loadingListDetail.getShippingCode().equals(t.getShippingCode())).map(MesShippingOrderManagement::getId).collect(Collectors.toList()));
}
private MesPartShippingGroup getMesPartShippingGroup(String org, String partShippingGroupCode) { private MesPartShippingGroup getMesPartShippingGroup(String org, String partShippingGroupCode) {
MesPartShippingGroup shippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(org, partShippingGroupCode); MesPartShippingGroup shippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(org, partShippingGroupCode);
if(Objects.isNull(shippingGroup)){ if(Objects.isNull(shippingGroup)){
@ -326,6 +310,17 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
MesExtEnumUtil.MES_LOADING_STATUS.CREATE_ASN.getDescription(), MesExtEnumUtil.MES_LOADING_STATUS.CREATE_ASN.getDescription(),
MesExtEnumUtil.MES_LOADING_STATUS.LOADING.getDescription())); MesExtEnumUtil.MES_LOADING_STATUS.LOADING.getDescription()));
} }
//跳过
if (Objects.equals(MesPcnExtConstWords.THREE, isPass)) {
//跳过的单据和明细,系统默认是完成的
loadingList.setStatus(MesExtEnumUtil.MES_LOADING_STATUS.SCANNED.getValue());
loadingList.setRemark(MesPcnExtConstWords.SHIP_PASS);
ConvertBean.serviceModelUpdate(loadingList, userName);
vehiclesOrderRepository.update(loadingList);
//明细跳过
updateLoadingList(loadingList, userName);
return null;
}
//增加发运顺序卡控查询是否存在小于当前装车单对应的seq且发运状态在“创建”“已确认”“已生成ASN”“装车中”的装车单数据 //增加发运顺序卡控查询是否存在小于当前装车单对应的seq且发运状态在“创建”“已确认”“已生成ASN”“装车中”的装车单数据
List<Integer> loadingListStatusList = new ArrayList<>(); List<Integer> loadingListStatusList = new ArrayList<>();
loadingListStatusList.add(MesExtEnumUtil.MES_LOADING_STATUS.CREATE.getValue()); loadingListStatusList.add(MesExtEnumUtil.MES_LOADING_STATUS.CREATE.getValue());
@ -333,7 +328,6 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
loadingListStatusList.add(MesExtEnumUtil.MES_LOADING_STATUS.CREATE_ASN.getValue()); loadingListStatusList.add(MesExtEnumUtil.MES_LOADING_STATUS.CREATE_ASN.getValue());
loadingListStatusList.add(MesExtEnumUtil.MES_LOADING_STATUS.LOADING.getValue()); loadingListStatusList.add(MesExtEnumUtil.MES_LOADING_STATUS.LOADING.getValue());
List<Integer> statusList = new ArrayList<>(); List<Integer> statusList = new ArrayList<>();
statusList.add(MesExtEnumUtil.MES_LOADING_STATUS.LOADING.getValue());
statusList.add(MesExtEnumUtil.MES_LOADING_STATUS.SCANNED.getValue()); statusList.add(MesExtEnumUtil.MES_LOADING_STATUS.SCANNED.getValue());
statusList.add(MesExtEnumUtil.MES_LOADING_STATUS.ASN.getValue()); statusList.add(MesExtEnumUtil.MES_LOADING_STATUS.ASN.getValue());
//最后一个扫描完成的装车单信息 //最后一个扫描完成的装车单信息
@ -352,14 +346,11 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
DdlPreparedPack.getInPackList(loadingListStatusList, "status", orderPackBean); DdlPreparedPack.getInPackList(loadingListStatusList, "status", orderPackBean);
boolean exit = vehiclesOrderRepository.isExitByHql(orderPackBean); boolean exit = vehiclesOrderRepository.isExitByHql(orderPackBean);
if (exit) { if (exit) {
//强过 //1强过
if((!Objects.isNull(isPass) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == isPass)){ if((!Objects.isNull(isPass) && Objects.equals(MesPcnExtConstWords.ONE,isPass))) {
//updateLoadingListClose(loadingListStatusList,loadingList,userName); loadingList.setRemark(MesPcnExtConstWords.STRONGER_PASS);
DdlPackBean packBean = DdlPackBean.getDdlPackBean(loadingList.getOrganizeCode()); ConvertBean.serviceModelUpdate(loadingList,userName);
DdlPreparedPack.getNumEqualPack(loadingList.getId(), "id",packBean); vehiclesOrderRepository.update(loadingList);
vehiclesOrderRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime","remark"},
new Object[]{userName, TimeTool.getNowTime(true),MesPcnExtConstWords.STRONGER_PASS}, packBean);
}else { }else {
throw new ImppBusiException(String.format("【%s】装车单对应排序【%s】前存在未扫描发运的装车单请检查数据", throw new ImppBusiException(String.format("【%s】装车单对应排序【%s】前存在未扫描发运的装车单请检查数据",
orderCode, loadingList.getSeq())); orderCode, loadingList.getSeq()));
@ -385,68 +376,61 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
vehiclesOrderDetailRepository.update(item); vehiclesOrderDetailRepository.update(item);
} }
private void updateLoadingList(MesLoadingList loadingList, String userName) {
private void updateLoadingListClose(List<Integer> loadingListStatusList,MesLoadingList loadingList,String userName){ List<MesLoadingListDetail> mesLoadingListDetailList = getMesLoadingListList(loadingList.getId(), loadingList.getOrganizeCode());
List<MesLoadingList> mesLoadingList = getMesLoadingListList(loadingListStatusList, loadingList); if (CollectionUtils.isEmpty(mesLoadingListDetailList)) return;
if(CollectionUtils.isEmpty(mesLoadingList)) return; List<String> shippingCodeList = mesLoadingListDetailList.stream().map(MesLoadingListDetail::getShippingCode).distinct().collect(Collectors.toList());
List<Long> idList = mesLoadingList.stream().map(MesLoadingList::getId).distinct().collect(Collectors.toList());
//关闭装发运单明细 //关闭装发运单明细
List<MesShippingOrderManagement> mesShippingOrderManagementList = getMesShippingOrderManagementList(loadingList.getOrganizeCode(), idList); List<MesShippingOrderManagement> mesShippingOrderManagementList = getMesShippingOrderManagementList(loadingList.getOrganizeCode(), shippingCodeList);
if(!CollectionUtils.isEmpty(mesShippingOrderManagementList)){ if (!CollectionUtils.isEmpty(mesShippingOrderManagementList)) {
closeShippingOrderDetails(loadingList.getOrganizeCode(), userName,MesPcnExtConstWords.STRONGER_PASS, mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList())); //发送数据给wms
for (MesShippingOrderManagement mesShippingOrderManagement : mesShippingOrderManagementList) {
jisShippingRepository.saveAll(mesSortShippingCheckService.getMesJisShippings(mesShippingOrderManagement, userName));
}
//关闭发运单明细
closeShippingOrderDetails(loadingList.getOrganizeCode(), userName, mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList()));
} }
//关闭发运单 //关闭发运单
closeShippingOrder(loadingList.getOrganizeCode(), userName,MesPcnExtConstWords.STRONGER_PASS, mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList())); closeShippingOrder(loadingList.getOrganizeCode(), userName, mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList()));
//关闭装车单明细 //明细跳过
closeLoadingDetails(loadingList.getOrganizeCode(), userName, idList); updateLoadingDetails(loadingList.getOrganizeCode(), userName, loadingList.getId());
//关闭装车单
closeLoadingOrder(loadingList.getOrganizeCode(), userName, idList);
} }
private void closeShippingOrderDetails(String organizeCode, String userName,String remark, List<Long> idList) { private void closeShippingOrderDetails(String organizeCode, String userName, List<Long> idList) {
if(CollectionUtils.isEmpty(idList)|| StringUtils.isEmpty(organizeCode)) return; if (CollectionUtils.isEmpty(idList) || StringUtils.isEmpty(organizeCode)) return;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, "pid",packBean); DdlPreparedPack.getInPackList(idList, "pid", packBean);
shippingOrderManagementDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, shippingOrderManagementDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status", "remark"},
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(),remark}, packBean); new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue(), MesPcnExtConstWords.SHIP_PASS}, packBean);
} }
private List<MesShippingOrderManagement> getMesShippingOrderManagementList(String organizeCode, List<Long> idList) { private List<MesShippingOrderManagement> getMesShippingOrderManagementList(String organizeCode, List<String> shippingCodeList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList,"loadingListId",packBean); DdlPreparedPack.getInPackList(shippingCodeList, "shippingCode", packBean);
return shippingOrderManagementRepository.findByHqlWhere(packBean); return shippingOrderManagementRepository.findByHqlWhere(packBean);
} }
private void closeShippingOrder(String organizeCode, String userName,String remark, List<Long> idList) { private void closeShippingOrder(String organizeCode, String userName, List<Long> idList) {
if(CollectionUtils.isEmpty(idList)|| StringUtils.isEmpty(organizeCode)) return; if (CollectionUtils.isEmpty(idList) || StringUtils.isEmpty(organizeCode)) return;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, "id",packBean); DdlPreparedPack.getInPackList(idList, "id", packBean);
shippingOrderManagementRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, shippingOrderManagementRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status", "remark"},
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_STATUS.CLOSE.getValue(),remark}, packBean); new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue(), MesPcnExtConstWords.SHIP_PASS}, packBean);
} }
private void closeLoadingDetails(String organizeCode, String userName, List<Long> idList) { private List<MesLoadingListDetail> getMesLoadingListList(long id, String organizeCode) {
if(CollectionUtils.isEmpty(idList)|| StringUtils.isEmpty(organizeCode)) return;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, "pid",packBean); DdlPreparedPack.getNumEqualPack(id, "pid", packBean);
vehiclesOrderDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(), "status", packBean);
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean); return vehiclesOrderDetailRepository.findByHqlWhere(packBean);
} }
private void closeLoadingOrder(String organizeCode, String userName, List<Long> idList) { private void updateLoadingDetails(String organizeCode, String userName, long id) {
if(CollectionUtils.isEmpty(idList)|| StringUtils.isEmpty(organizeCode)) return; if (StringUtil.isEmptyAndNull(id) || StringUtils.isEmpty(organizeCode)) return;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, "id",packBean); DdlPreparedPack.getNumEqualPack(id, "pid", packBean);
vehiclesOrderRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, vehiclesOrderDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status", "remark"},
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.MES_LOADING_STATUS.CLOSED.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean); new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue(), MesPcnExtConstWords.SHIP_PASS}, packBean);
}
private List<MesLoadingList> getMesLoadingListList(List<Integer> loadingListStatusList, MesLoadingList loadingList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(loadingList.getOrganizeCode());
DdlPreparedPack.getStringSmallerNotEqualPack(loadingList.getSeq(), "seq", packBean);
DdlPreparedPack.getStringEqualPack(loadingList.getPartShippingGroupCode(),"partShippingGroupCode",packBean);
DdlPreparedPack.getInPackList(loadingListStatusList, "status", packBean);
return vehiclesOrderRepository.findByHqlWhere(packBean);
} }
} }

@ -98,6 +98,17 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
MesExtEnumUtil.SHIPPING_ORDER_STATUS.valueOfDescription(orderManagement.getStatus()), MesExtEnumUtil.SHIPPING_ORDER_STATUS.valueOfDescription(orderManagement.getStatus()),
MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getDescription(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getDescription())); MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getDescription(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getDescription()));
} }
//跳过
if (Objects.equals(MesPcnExtConstWords.THREE, shippingOrderManagement.getIsPass())) {
//跳过的单据和明细,系统默认是完成的
orderManagement.setStatus(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue());
orderManagement.setRemark(MesPcnExtConstWords.SHIP_PASS);
ConvertBean.serviceModelUpdate(orderManagement, shippingOrderManagement.getModifyUser());
vehiclesOrderRepository.update(orderManagement);
//明细跳过
updateShippingOrderDetails(orderManagement.getOrganizeCode(), shippingOrderManagement.getModifyUser(), orderManagement.getId());
return null;
}
//校验发运单扫描顺序 //校验发运单扫描顺序
List<Integer> statusForCheckList = new ArrayList<>(); List<Integer> statusForCheckList = new ArrayList<>();
@ -106,8 +117,6 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
statusForCheckList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue()); statusForCheckList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue());
statusForCheckList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PRINTED.getValue()); statusForCheckList.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PRINTED.getValue());
List<Integer> status = new ArrayList<>(); List<Integer> status = new ArrayList<>();
status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPING.getValue());
status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.PRINTED.getValue());
status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue()); status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.SHIPPED.getValue());
status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.LOADING.getValue()); status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.LOADING.getValue());
status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.STATISTICSING.getValue()); status.add(MesExtEnumUtil.SHIPPING_ORDER_STATUS.STATISTICSING.getValue());
@ -129,12 +138,11 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
DdlPreparedPack.getInPackList(statusForCheckList, "status", orderManagementPackBean); DdlPreparedPack.getInPackList(statusForCheckList, "status", orderManagementPackBean);
boolean exists = shippingOrderManagementRepository.isExitByHql(orderManagementPackBean); boolean exists = shippingOrderManagementRepository.isExitByHql(orderManagementPackBean);
if (exists) { if (exists) {
if((!Objects.isNull(shippingOrderManagement.getIsPass()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == shippingOrderManagement.getIsPass())){ //1强过
//updateLoadingListClose(statusForCheckList,orderManagement,shippingOrderManagement.getModifyUser()); if((!Objects.isNull(shippingOrderManagement.getIsPass()) && Objects.equals(MesPcnExtConstWords.ONE,shippingOrderManagement.getIsPass()))){
DdlPackBean packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode()); orderManagement.setRemark(MesPcnExtConstWords.STRONGER_PASS);
DdlPreparedPack.getNumEqualPack(orderManagement.getId(), "id",packBean); ConvertBean.serviceModelUpdate(orderManagement,shippingOrderManagement.getModifyUser());
shippingOrderManagementRepository.updateByProperties(new String[]{"forceFlag","modifyUser", "modifyDatetime","remark"}, vehiclesOrderRepository.update(orderManagement);
new Object[]{MesPcnExtConstWords.STRONGER_PASS,shippingOrderManagement.getModifyUser(), TimeTool.getNowTime(true),MesPcnExtConstWords.STRONGER_PASS}, packBean);
}else{ }else{
throw new ImppBusiException(String.format("【%s】发运单对应排序【%s】前存在未扫描发运的发运单请检查数据", throw new ImppBusiException(String.format("【%s】发运单对应排序【%s】前存在未扫描发运的发运单请检查数据",
orderManagement.getShippingCode(), orderManagement.getSeq())); orderManagement.getShippingCode(), orderManagement.getSeq()));
@ -143,20 +151,20 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
//根据扫描的发运单找到是否装车配置,若是,则根据发运单查询是否生成装车单,若没生成装车单则提示此发运单配置是否装车为是,但没生成装车单,请检查数据! //根据扫描的发运单找到是否装车配置,若是,则根据发运单查询是否生成装车单,若没生成装车单则提示此发运单配置是否装车为是,但没生成装车单,请检查数据!
if (Objects.equals(orderManagement.getIsLoading(), MesCommonConstant.TRUE_INTEGER)) { if (Objects.equals(orderManagement.getIsLoading(), MesCommonConstant.TRUE_INTEGER)) {
//查询装车单明细
if (StringUtils.isEmpty(orderManagement.getOrderCode()) ) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(orderManagement.getShippingCode(),"shippingCode",packBean);
MesLoadingListDetail listDetail = listDetailRepository.getByProperty(packBean);
if(Objects.isNull(listDetail)){
throw new ImppBusiException(String.format("【%s】此发运单配置是否装车为是,但没绑定装车单号,请检查数据!", shippingOrderManagement.getShippingCode())); throw new ImppBusiException(String.format("【%s】此发运单配置是否装车为是,但没绑定装车单号,请检查数据!", shippingOrderManagement.getShippingCode()));
} }
packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(listDetail.getPid(), "id", packBean);
DdlPackBean orderDetailPackBean = DdlPackBean.getDdlPackBean(shippingOrderManagement.getOrganizeCode()); MesLoadingList loadingList = listRepository.getByProperty(packBean);
DdlPreparedPack.getStringEqualPack(orderManagement.getOrderCode(), "orderCode", orderDetailPackBean); if(Objects.isNull(loadingList)){
MesLoadingList loadingList = listRepository.getByProperty(orderDetailPackBean);
if (StringUtils.isEmpty(loadingList)) {
throw new ImppBusiException(String.format("【%s】此发运单配置是否装车为是,但没生成装车单,请检查数据!", shippingOrderManagement.getShippingCode())); throw new ImppBusiException(String.format("【%s】此发运单配置是否装车为是,但没生成装车单,请检查数据!", shippingOrderManagement.getShippingCode()));
} }
//判断是否先装车 //判断是否先装车
if (Objects.equals(orderManagement.getIsFirstInstall(), MesCommonConstant.TRUE_INTEGER)) { if (Objects.equals(orderManagement.getIsFirstInstall(), MesCommonConstant.TRUE_INTEGER)) {
@ -215,7 +223,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
MesPartShippingGroup shippingGroup = getMesPartShippingGroup(organizeCode, orderManagement.getShippingGroupCode()); MesPartShippingGroup shippingGroup = getMesPartShippingGroup(organizeCode, orderManagement.getShippingGroupCode());
//根据条码找到对应的物料号若物料号一致则修改扫描flg将flg改为true. //根据条码找到对应的物料号若物料号一致则修改扫描flg将flg改为true.
//根据扫描的发运单以及前端传的发运单明细,进行匹配,若没有找到扫描的发运单,则提示扫描的发运单号不在此装车单中,请检查数据!。 //根据扫描的发运单以及前端传的发运单明细,进行匹配,若没有找到扫描的发运单,则提示扫描的发运单号不在此装车单中,请检查数据!。
if(!Objects.isNull(model.getIsPass()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == model.getIsPass()){ //1 跳过
if(!Objects.isNull(model.getIsPass()) && Objects.equals(MesPcnExtConstWords.ONE,model.getIsPass())){
Optional<MesShippingOrderManagementDetail> shippingOrderManagementDetailOptional = model.getDetailList().stream().filter(t -> !Objects.equals(t.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst(); Optional<MesShippingOrderManagementDetail> shippingOrderManagementDetailOptional = model.getDetailList().stream().filter(t -> !Objects.equals(t.getIsScanFlg(), MesCommonConstant.TRUE_INTEGER)).findFirst();
if(shippingOrderManagementDetailOptional.isPresent()){ if(shippingOrderManagementDetailOptional.isPresent()){
MesShippingOrderManagementDetail mesShippingOrderManagementDetail = shippingOrderManagementDetailOptional.get(); MesShippingOrderManagementDetail mesShippingOrderManagementDetail = shippingOrderManagementDetailOptional.get();
@ -551,7 +560,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
} }
if(StringUtils.isEmpty(orderManagement.getOrderCode()) || StringUtils.isEmpty(orderManagement.getLoadingListId())){ if(StringUtils.isEmpty(orderManagement.getOrderCode()) || StringUtils.isEmpty(orderManagement.getLoadingListId())){
//保存当前发运单明细报工 //保存当前发运单明细报工
jisShippingRepository.saveAll(getMesJisShippings(organizeCode, orderManagement)); jisShippingRepository.saveAll(getMesJisShippings(orderManagement,userInfo));
}else{ }else{
//查询装车单明细 //查询装车单明细
DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(organizeCode);
@ -570,7 +579,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
List<MesShippingOrderManagement> shippingOrderManagementList = shippingOrderManagementRepository.findByHqlWhere(jisBean); List<MesShippingOrderManagement> shippingOrderManagementList = shippingOrderManagementRepository.findByHqlWhere(jisBean);
for (MesShippingOrderManagement mesShippingOrderManagement : shippingOrderManagementList) { for (MesShippingOrderManagement mesShippingOrderManagement : shippingOrderManagementList) {
//保存当前发运单明细报工 //保存当前发运单明细报工
jisShippingRepository.saveAll(getMesJisShippings(organizeCode, mesShippingOrderManagement)); jisShippingRepository.saveAll(getMesJisShippings(mesShippingOrderManagement,userInfo));
} }
if(!StringUtil.isEmpty(vehiclesOrderDetail)){ if(!StringUtil.isEmpty(vehiclesOrderDetail)){
@ -587,12 +596,12 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
} }
private List<MesJisShipping> getMesJisShippings(String organizeCode, MesShippingOrderManagement mesShippingOrderManagement) { public List<MesJisShipping> getMesJisShippings(MesShippingOrderManagement mesShippingOrderManagement,String userName) {
DdlPackBean detailPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean detailPackBean = DdlPackBean.getDdlPackBean(mesShippingOrderManagement.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(mesShippingOrderManagement.getId(), "pid", detailPackBean); DdlPreparedPack.getNumEqualPack(mesShippingOrderManagement.getId(), "pid", detailPackBean);
List<MesShippingOrderManagementDetail> shippingOrderManagementDetails = shippingOrderManagementDetailRepository.findByHqlWhere(detailPackBean); List<MesShippingOrderManagementDetail> shippingOrderManagementDetails = shippingOrderManagementDetailRepository.findByHqlWhere(detailPackBean);
//当前装车单所有发运单明细 需要报工的数据 //当前装车单所有发运单明细 需要报工的数据
return jisShippingService.getJisShipping(mesShippingOrderManagement, shippingOrderManagementDetails, organizeCode); return jisShippingService.getJisShipping(mesShippingOrderManagement, shippingOrderManagementDetails,userName);
} }
@Override @Override
@ -607,48 +616,11 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
shippingOrderManagementDetailRepository.update(item); shippingOrderManagementDetailRepository.update(item);
} }
private void updateLoadingListClose(List<Integer> loadingListStatusList,MesShippingOrderManagement orderManagement,String userName){ private void updateShippingOrderDetails(String organizeCode, String userName, long id) {
List<MesShippingOrderManagement> mesShippingOrderManagementList = getMesLoadingListList(loadingListStatusList, orderManagement); if(StringUtils.isEmpty(id) || StringUtils.isEmpty(organizeCode)) return;
if(CollectionUtils.isEmpty(mesShippingOrderManagementList)) return;
List<Long> idList = mesShippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).distinct().collect(Collectors.toList());
//关闭发运单明细
closeShippingOrderDetails(orderManagement.getOrganizeCode(), userName, idList);
//关闭发运单
closeShippingOrder(orderManagement.getOrganizeCode(), userName, idList);
//更新装车单明细
updateLoadingDetails(orderManagement.getOrganizeCode(), userName, idList);
}
private List<MesShippingOrderManagement> getMesLoadingListList(List<Integer> statusForCheckList, MesShippingOrderManagement orderManagement) {
if(StringUtils.isEmpty(orderManagement.getShippingGroupCode()) || StringUtils.isEmpty(orderManagement.getSeq())) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode());
DdlPreparedPack.getNumberSmallerPack(orderManagement.getSeq(), "seq", packBean);
DdlPreparedPack.getStringEqualPack(orderManagement.getShippingGroupCode(),"shippingGroupCode",packBean);
DdlPreparedPack.getInPackList(statusForCheckList, "status", packBean);
return shippingOrderManagementRepository.findByHqlWhere(packBean);
}
private void closeShippingOrderDetails(String organizeCode, String userName, List<Long> idList) {
if(CollectionUtils.isEmpty(idList) || StringUtils.isEmpty(organizeCode)) return;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, "pid",packBean); DdlPreparedPack.getNumEqualPack(id, "pid",packBean);
shippingOrderManagementDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"}, shippingOrderManagementDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"},
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(), MesPcnExtConstWords.STRONGER_PASS}, packBean); new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SKIP.getValue(), MesPcnExtConstWords.SHIP_PASS}, packBean);
}
private void closeShippingOrder(String organizeCode, String userName, List<Long> idList) {
if(CollectionUtils.isEmpty(idList)|| StringUtils.isEmpty(organizeCode)) return;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, "id",packBean);
shippingOrderManagementRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"},
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.SHIPPING_ORDER_STATUS.CLOSE.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean);
}
private void updateLoadingDetails(String organizeCode, String userName, List<Long> idList) {
if(CollectionUtils.isEmpty(idList)|| StringUtils.isEmpty(organizeCode)) return;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, "shippingId",packBean);
vehiclesOrderDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "status","remark"},
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.LOADING_ORDER_DETAIL_SHIPPING_STATUS.CLOSE.getValue(),MesPcnExtConstWords.STRONGER_PASS}, packBean);
} }
} }

@ -0,0 +1,97 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.recyclablepackage;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingLogService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBinding;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingLog;
import cn.estsh.i3plus.pojo.mes.repository.recyclablepackage.MesRecyclablePackageBindingLogRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import groovy.util.logging.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @Description : LOG
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/9/13 9:18
* @Modify:
**/
@Service
@Slf4j
public class MesRecyclablePackageBindingLogServiceImpl implements IMesRecyclablePackageBindingLogService {
@Autowired
private MesRecyclablePackageBindingLogRepository mesRecyclablePackageBindingLogRepository;
@Override
public MesRecyclablePackageBindingLog insertCreate(MesRecyclablePackageBinding mesRecyclablePackageBinding) {
return insert(mesRecyclablePackageBinding, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE.CREATE);
}
@Override
public MesRecyclablePackageBindingLog insertClose(MesRecyclablePackageBinding mesRecyclablePackageBinding) {
return insert(mesRecyclablePackageBinding, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE.CLOSE);
}
@Override
public MesRecyclablePackageBindingLog insertBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail) {
return insert(mesRecyclablePackageBinding, mesRecyclablePackageBindingDetail, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE.BINDING);
}
@Override
public MesRecyclablePackageBindingLog insertUnBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail) {
return insert(mesRecyclablePackageBinding, mesRecyclablePackageBindingDetail, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE.UN_BINDING);
}
@Override
public void insertUnBinding(MesRecyclablePackageBinding mesRecyclablePackageBinding, List<MesRecyclablePackageBindingDetail> mesRecyclablePackageBindingDetailList) {
List<MesRecyclablePackageBindingLog> logList = new ArrayList<>();
MesRecyclablePackageBindingLog mesRecyclablePackageBindingLog;
for (MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail : mesRecyclablePackageBindingDetailList) {
mesRecyclablePackageBindingLog = new MesRecyclablePackageBindingLog();
BeanUtils.copyProperties(mesRecyclablePackageBinding, mesRecyclablePackageBindingLog, MesPcnExtConstWords.ID, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME);
//明细数据填充
mesRecyclablePackageBindingLog.setPackageSn(mesRecyclablePackageBindingDetail.getProductSn());
mesRecyclablePackageBindingLog.setPartNo(mesRecyclablePackageBindingDetail.getPartNo());
mesRecyclablePackageBindingLog.setPartName(mesRecyclablePackageBindingDetail.getPartName());
mesRecyclablePackageBindingLog.setQty(mesRecyclablePackageBindingDetail.getQty());
mesRecyclablePackageBindingLog.setOrderCode(mesRecyclablePackageBindingDetail.getOrderCode());
mesRecyclablePackageBindingLog.setLotNumber(mesRecyclablePackageBindingDetail.getLotNumber());
mesRecyclablePackageBindingLog.setModifyType(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE.UN_BINDING.getValue());
ConvertBean.serviceModelInitialize(mesRecyclablePackageBindingLog, mesRecyclablePackageBindingDetail.getModifyUser());
logList.add(mesRecyclablePackageBindingLog);
}
mesRecyclablePackageBindingLogRepository.saveAll(logList);
}
public MesRecyclablePackageBindingLog insert(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE modifyType) {
MesRecyclablePackageBindingLog mesRecyclablePackageBindingLog = new MesRecyclablePackageBindingLog();
BeanUtils.copyProperties(mesRecyclablePackageBinding, mesRecyclablePackageBindingLog, MesPcnExtConstWords.ID, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME);
mesRecyclablePackageBindingLog.setModifyType(modifyType.getValue());
ConvertBean.serviceModelInitialize(mesRecyclablePackageBindingLog, mesRecyclablePackageBinding.getModifyUser());
return mesRecyclablePackageBindingLogRepository.insert(mesRecyclablePackageBindingLog);
}
public MesRecyclablePackageBindingLog insert(MesRecyclablePackageBinding mesRecyclablePackageBinding, MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail, MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_MODIFY_TYPE modifyType) {
MesRecyclablePackageBindingLog mesRecyclablePackageBindingLog = new MesRecyclablePackageBindingLog();
BeanUtils.copyProperties(mesRecyclablePackageBinding, mesRecyclablePackageBindingLog, MesPcnExtConstWords.ID, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME);
//明细数据填充
mesRecyclablePackageBindingLog.setPackageSn(mesRecyclablePackageBindingDetail.getProductSn());
mesRecyclablePackageBindingLog.setPartNo(mesRecyclablePackageBindingDetail.getPartNo());
mesRecyclablePackageBindingLog.setPartName(mesRecyclablePackageBindingDetail.getPartName());
mesRecyclablePackageBindingLog.setQty(mesRecyclablePackageBindingDetail.getQty());
mesRecyclablePackageBindingLog.setOrderCode(mesRecyclablePackageBindingDetail.getOrderCode());
mesRecyclablePackageBindingLog.setLotNumber(mesRecyclablePackageBindingDetail.getLotNumber());
mesRecyclablePackageBindingLog.setModifyType(modifyType.getValue());
ConvertBean.serviceModelInitialize(mesRecyclablePackageBindingLog, mesRecyclablePackageBindingDetail.getModifyUser());
return mesRecyclablePackageBindingLogRepository.insert(mesRecyclablePackageBindingLog);
}
}

@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.recyclablepackag
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingLogService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
@ -56,6 +57,9 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
@Autowired @Autowired
private IMesPartService mesPartService; private IMesPartService mesPartService;
@Autowired
private IMesRecyclablePackageBindingLogService mesRecyclablePackageBindingLogService;
@Override @Override
public List<MesRecyclablePackageBindingDetail> findMesRecyclablePackageBindingDetailByPid(String organizeCode, long pid) { public List<MesRecyclablePackageBindingDetail> findMesRecyclablePackageBindingDetailByPid(String organizeCode, long pid) {
if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(pid)) { if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(pid)) {
@ -192,23 +196,25 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
//查询包装零件 //查询包装零件
List<MesRecyclablePackagePart> packagePartList = mesRecyclablePackageService.checkMesRecyclablePackagePart(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackage.getPackageTypeCode()); List<MesRecyclablePackagePart> packagePartList = mesRecyclablePackageService.checkMesRecyclablePackagePart(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackage.getPackageTypeCode());
//条码信息 //条码信息
MesProduceSn mesProduceSn = getMesProduceSn(mesRecyclablePackageBindingModel,packagePartList); MesProduceSn mesProduceSn = getMesProduceSn(mesRecyclablePackageBindingModel, packagePartList);
//记录绑定明细 //记录绑定明细
insertMesRecyclablePackageBindingDetail(mesRecyclablePackageBindingModel.getUserName(), mesRecyclablePackageBinding, mesProduceSn); MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail = insertMesRecyclablePackageBindingDetail(mesRecyclablePackageBindingModel.getUserName(), mesRecyclablePackageBinding, mesProduceSn);
//更新数量 //更新数量
mesRecyclablePackageBinding.setTotalQty(findMesRecyclablePackageBindingDetailByPidCount(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBinding.getId())); mesRecyclablePackageBinding.setTotalQty(findMesRecyclablePackageBindingDetailByPidCount(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBinding.getId()));
//自动关箱 //自动关箱
if (!Objects.isNull(packageType.getCheckPartNoFlag()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == packageType.getCheckPartNoFlag() && getMesRecyclablePackagePart(packagePartList,mesRecyclablePackage.getPackageTypeCode(), mesProduceSn.getPartNo()).getQty().intValue() <= mesRecyclablePackageBinding.getTotalQty()) { if (!Objects.isNull(packageType.getCheckPartNoFlag()) && CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == packageType.getCheckPartNoFlag() && getMesRecyclablePackagePart(packagePartList, mesRecyclablePackage.getPackageTypeCode(), mesProduceSn.getPartNo()).getQty().intValue() <= mesRecyclablePackageBinding.getTotalQty()) {
mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue()); mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue());
} }
ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName()); ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName());
mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding); mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding);
//记录日志
mesRecyclablePackageBindingLogService.insertBinding(mesRecyclablePackageBinding, mesRecyclablePackageBindingDetail);
return mesRecyclablePackageBinding; return mesRecyclablePackageBinding;
} }
private MesRecyclablePackagePart getMesRecyclablePackagePart(List<MesRecyclablePackagePart> packagePartList,String packageTypeCode, String partNo) { private MesRecyclablePackagePart getMesRecyclablePackagePart(List<MesRecyclablePackagePart> packagePartList, String packageTypeCode, String partNo) {
Optional<MesRecyclablePackagePart> packagePart = packagePartList.stream().filter(t -> t.getPartNo().equals(partNo)).findFirst(); Optional<MesRecyclablePackagePart> packagePart = packagePartList.stream().filter(t -> t.getPartNo().equals(partNo)).findFirst();
if(!packagePart.isPresent()){ if (!packagePart.isPresent()) {
MesPcnException.throwMesBusiException("回用包装类型【%s】零件【%s】数据不存在", packageTypeCode, partNo); MesPcnException.throwMesBusiException("回用包装类型【%s】零件【%s】数据不存在", packageTypeCode, partNo);
} }
return packagePart.get(); return packagePart.get();
@ -221,12 +227,12 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
} }
} }
private MesProduceSn getMesProduceSn(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel,List<MesRecyclablePackagePart> mesRecyclablePackagePartList) { private MesProduceSn getMesProduceSn(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, List<MesRecyclablePackagePart> mesRecyclablePackagePartList) {
List<MesProduceSn> produceSnList = mesProduceSnExtService.getProduceSnList(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getProductSn()); List<MesProduceSn> produceSnList = mesProduceSnExtService.getProduceSnList(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getProductSn());
if (CollectionUtils.isEmpty(produceSnList)) { if (CollectionUtils.isEmpty(produceSnList)) {
//外协件校验 //外协件校验
MesRecyclablePackagePart mesRecyclablePackagePart = getMesRecyclablePackagePart(mesRecyclablePackageBindingModel, mesRecyclablePackagePartList.stream().filter(t -> !Objects.isNull(t.getProductSnCheckType()) && MesExtEnumUtil.PRODUCT_SN_CHECK_TYPE.PRODUCT_SN_CHECK_TYPE_20.getValue() == t.getProductSnCheckType()).collect(Collectors.toList())); MesRecyclablePackagePart mesRecyclablePackagePart = getMesRecyclablePackagePart(mesRecyclablePackageBindingModel, mesRecyclablePackagePartList.stream().filter(t -> !Objects.isNull(t.getProductSnCheckType()) && MesExtEnumUtil.PRODUCT_SN_CHECK_TYPE.PRODUCT_SN_CHECK_TYPE_20.getValue() == t.getProductSnCheckType()).collect(Collectors.toList()));
if(Objects.isNull(mesRecyclablePackagePart)){ if (Objects.isNull(mesRecyclablePackagePart)) {
MesPcnException.throwMesBusiException("条码【%s】不存在", mesRecyclablePackageBindingModel.getProductSn()); MesPcnException.throwMesBusiException("条码【%s】不存在", mesRecyclablePackageBindingModel.getProductSn());
} }
//封装数据 //封装数据
@ -243,7 +249,7 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
private MesRecyclablePackagePart getMesRecyclablePackagePart(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, List<MesRecyclablePackagePart> mesRecyclablePackagePartList) { private MesRecyclablePackagePart getMesRecyclablePackagePart(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, List<MesRecyclablePackagePart> mesRecyclablePackagePartList) {
//外协件 //外协件
MesRecyclablePackagePart checkPassRecyclablePackagePart = null; MesRecyclablePackagePart checkPassRecyclablePackagePart = null;
if(!CollectionUtils.isEmpty(mesRecyclablePackagePartList)){ if (!CollectionUtils.isEmpty(mesRecyclablePackagePartList)) {
for (MesRecyclablePackagePart mesRecyclablePackagePart : mesRecyclablePackagePartList) { for (MesRecyclablePackagePart mesRecyclablePackagePart : mesRecyclablePackagePartList) {
// 校验正则表达式 // 校验正则表达式
if (checkRule(mesRecyclablePackageBindingModel, mesRecyclablePackagePart.getProductSnRule())) { if (checkRule(mesRecyclablePackageBindingModel, mesRecyclablePackagePart.getProductSnRule())) {
@ -255,11 +261,11 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
return checkPassRecyclablePackagePart; return checkPassRecyclablePackagePart;
} }
private boolean checkRule(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel,String rule) { private boolean checkRule(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, String rule) {
return (Boolean) ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass())).matchNumberRule(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getProductSn(), rule, rule).get(MesPcnExtConstWords.RESULT); return (Boolean) ((IMesNumberRuleMatchDispatchService) SpringContextsUtil.getBean(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_20.getStrategyClass())).matchNumberRule(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getProductSn(), rule, rule).get(MesPcnExtConstWords.RESULT);
} }
private void insertMesRecyclablePackageBindingDetail(String userName, MesRecyclablePackageBinding mesRecyclablePackageBinding, MesProduceSn mesProduceSn) { private MesRecyclablePackageBindingDetail insertMesRecyclablePackageBindingDetail(String userName, MesRecyclablePackageBinding mesRecyclablePackageBinding, MesProduceSn mesProduceSn) {
MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail = new MesRecyclablePackageBindingDetail(); MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail = new MesRecyclablePackageBindingDetail();
mesRecyclablePackageBindingDetail.setOrganizeCode(mesRecyclablePackageBinding.getOrganizeCode()); mesRecyclablePackageBindingDetail.setOrganizeCode(mesRecyclablePackageBinding.getOrganizeCode());
mesRecyclablePackageBindingDetail.setPid(mesRecyclablePackageBinding.getId()); mesRecyclablePackageBindingDetail.setPid(mesRecyclablePackageBinding.getId());
@ -271,7 +277,7 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
mesRecyclablePackageBindingDetail.setLotNumber(mesProduceSn.getLotNo()); mesRecyclablePackageBindingDetail.setLotNumber(mesProduceSn.getLotNo());
mesRecyclablePackageBindingDetail.setSubType(Objects.isNull(mesProduceSn.getId()) ? MesExtEnumUtil.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE_20.getValue() : MesExtEnumUtil.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE_10.getValue()); mesRecyclablePackageBindingDetail.setSubType(Objects.isNull(mesProduceSn.getId()) ? MesExtEnumUtil.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE_20.getValue() : MesExtEnumUtil.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE.RECYCLABLE_PACKAGE_BINDING_DETAIL_SUB_TYPE_10.getValue());
ConvertBean.serviceModelInitialize(mesRecyclablePackageBindingDetail, userName); ConvertBean.serviceModelInitialize(mesRecyclablePackageBindingDetail, userName);
mesRecyclablePackageBindingDetailRepository.insert(mesRecyclablePackageBindingDetail); return mesRecyclablePackageBindingDetailRepository.insert(mesRecyclablePackageBindingDetail);
} }
private MesRecyclablePackageBinding insertMesRecyclablePackageBinding(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) { private MesRecyclablePackageBinding insertMesRecyclablePackageBinding(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) {
@ -284,6 +290,7 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
mesRecyclablePackageBinding.setTotalQty(MesPcnExtConstWords.ZERO); mesRecyclablePackageBinding.setTotalQty(MesPcnExtConstWords.ZERO);
mesRecyclablePackageBinding.setFid(UUID.randomUUID().toString()); mesRecyclablePackageBinding.setFid(UUID.randomUUID().toString());
ConvertBean.serviceModelInitialize(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName()); ConvertBean.serviceModelInitialize(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName());
mesRecyclablePackageBindingLogService.insertCreate(mesRecyclablePackageBinding);
return mesRecyclablePackageBindingRepository.insert(mesRecyclablePackageBinding); return mesRecyclablePackageBindingRepository.insert(mesRecyclablePackageBinding);
} }
@ -293,18 +300,37 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
} }
//删除数据 //删除数据
MesRecyclablePackageBinding mesRecyclablePackageBinding = getPackageBinding(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn()); MesRecyclablePackageBinding mesRecyclablePackageBinding = getPackageBinding(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesRecyclablePackageBindingModel.getOrganizeCode()); List<MesRecyclablePackageBindingDetail> bindingDetailList = findRecyclablePackageBindingDetailList(mesRecyclablePackageBindingModel, mesRecyclablePackageBinding);
DdlPreparedPack.getNumEqualPack(mesRecyclablePackageBinding.getId(), "pid", packBean); for (MesRecyclablePackageBindingDetail detail : bindingDetailList) {
DdlPreparedPack.getInPackArray(mesRecyclablePackageBindingModel.getDetailsIds(), "id", packBean); detail.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
mesRecyclablePackageBindingDetailRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "isDeleted"}, detail.setSystemSyncStatus(CommonEnumUtil.FALSE);
new Object[]{mesRecyclablePackageBindingModel.getUserName(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()}, packBean); detail.setSystemSyncDatetime(MesPcnExtConstWords.EMPTY);
ConvertBean.serviceModelUpdate(detail, mesRecyclablePackageBindingModel.getUserName());
}
mesRecyclablePackageBindingDetailRepository.saveAll(bindingDetailList);
//更新数量 //更新数量
mesRecyclablePackageBinding.setTotalQty(findMesRecyclablePackageBindingDetailByPidCount(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBinding.getId())); mesRecyclablePackageBinding.setTotalQty(findMesRecyclablePackageBindingDetailByPidCount(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBinding.getId()));
if (mesRecyclablePackageBinding.getTotalQty() <= MesPcnExtConstWords.ZERO) {
mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.UNPACKED.getValue());
}
ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName()); ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName());
mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding); mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding);
//记录日志
mesRecyclablePackageBindingLogService.insertUnBinding(mesRecyclablePackageBinding, bindingDetailList);
return mesRecyclablePackageBinding; return mesRecyclablePackageBinding;
} }
private List<MesRecyclablePackageBindingDetail> findRecyclablePackageBindingDetailList(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, MesRecyclablePackageBinding mesRecyclablePackageBinding) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesRecyclablePackageBindingModel.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(mesRecyclablePackageBinding.getId(), "pid", packBean);
DdlPreparedPack.getInPackArray(mesRecyclablePackageBindingModel.getDetailsIds(), "id", packBean);
List<MesRecyclablePackageBindingDetail> bindingDetailList = mesRecyclablePackageBindingDetailRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(bindingDetailList)) {
MesPcnException.throwMesBusiException("请选择数据信息不存在");
}
return bindingDetailList;
}
private MesRecyclablePackageBinding updateClosePackageBinding(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) { private MesRecyclablePackageBinding updateClosePackageBinding(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) {
MesRecyclablePackageBinding mesRecyclablePackageBinding = getPackageBinding(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn()); MesRecyclablePackageBinding mesRecyclablePackageBinding = getPackageBinding(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn());
if (MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue() == mesRecyclablePackageBinding.getStatus()) { if (MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue() == mesRecyclablePackageBinding.getStatus()) {
@ -317,6 +343,8 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue()); mesRecyclablePackageBinding.setStatus(MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue());
ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName()); ConvertBean.serviceModelUpdate(mesRecyclablePackageBinding, mesRecyclablePackageBindingModel.getUserName());
mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding); mesRecyclablePackageBindingRepository.update(mesRecyclablePackageBinding);
//记录日志
mesRecyclablePackageBindingLogService.insertClose(mesRecyclablePackageBinding);
return mesRecyclablePackageBinding; return mesRecyclablePackageBinding;
} }

@ -0,0 +1,15 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.processmethod;
import groovy.util.logging.Slf4j;
import org.springframework.stereotype.Service;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/9/12 21:24
* @Modify:
**/
@Service
@Slf4j
public class MesProcessMethodSourceBoxInOutServiceImpl {
}

@ -0,0 +1,201 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsInContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.mes.bean.MesConfig;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBinding;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/9/12 11:20
* @Modify:
**/
@Slf4j
@Service("mesProcessMethodSourceBoxInOutStepService")
public class MesProcessMethodSourceBoxInOutStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesRecyclablePackageBindingService mesRecyclablePackageBindingService;
@Autowired
private IMesProduceSnExtService produceSnExtService;
@Autowired
private IConfigService configService;
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean);
//配置错误 抛出异常
if (!productionProcessContext.getSuccess()){
stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
}
//存储生产过程上下文对象
productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext);
//获取上下文生产扫/读信息:可回用包装条码
List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanRecyclablePackageContext(reqBean);
if (CollectionUtils.isEmpty(equipVariableCollectContextList)){
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前缺失可回用包装条码信息!");
}
//清除本次已获取得到的可回用包装条码信息
productionDispatchContextStepService.removeScanRecyclablePackageContext(reqBean);
//从上下文中取出工位对象
MesWorkCell workCell = productionProcessContext.getWorkCell();
List<MesProductionPsInContext> productionPsInContextList = new ArrayList<>();
if (!sourceBoxInOut(reqBean, equipVariableCollectContextList, stepResult, productionPsInContextList, workCell).isCompleted()) {
return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
}
//获取进料主条码数据信息
List<MesProductionPsInContext> productionPsInContext = productionDispatchContextStepService.getProductionPsInContext(reqBean);
if (!CollectionUtils.isEmpty(productionPsInContext)) {
productionPsInContextList.addAll(productionPsInContext);
}
//保存进料主条码数据
productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList);
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("可回用包装条码%s状态成功!", equipVariableCollectContextList.iterator().next().getEquipVariableValue()));
}
public StepResult sourceBoxInOut(StationRequestBean reqBean, List<MesEquipVariableCollectContext> equipVariableCollectContextList, StepResult stepResult, List<MesProductionPsInContext> productionPsInContextList, MesWorkCell workCell) {
//获取包装绑定主表
MesRecyclablePackageBinding recyclablePackageBinding = mesRecyclablePackageBindingService.getMesRecyclablePackageBindingByPackageSn(reqBean.getOrganizeCode(), equipVariableCollectContextList.iterator().next().getEquipVariableValue());
if (Objects.isNull(recyclablePackageBinding))
return stepResult.isCompleted(false).msg(String.format("回收包装绑定[%s]信息不存在", equipVariableCollectContextList.iterator().next().getEquipVariableValue()));
//校验状态
if (MesExtEnumUtil.RECYCLABLE_PACKAGE_PACKAGE_BINDING_STATUS.CLOSED.getValue() != recyclablePackageBinding.getStatus()) {
return stepResult.isCompleted(false).msg(String.format("回收包装绑定[%s]状态不为[已关箱]", equipVariableCollectContextList.iterator().next().getEquipVariableValue()));
}
//获取绑定明细信息
List<MesRecyclablePackageBindingDetail> bindingDetailList = mesRecyclablePackageBindingService.findMesRecyclablePackageBindingDetailByPid(reqBean.getOrganizeCode(), recyclablePackageBinding.getId());
if (CollectionUtils.isEmpty(bindingDetailList))
return stepResult.isCompleted(false).msg(String.format("回收包装绑定[%s]明细信息不存在", equipVariableCollectContextList.iterator().next().getEquipVariableValue()));
//查询条码信息
Map<String, List<MesProduceSn>> produceSnMap = produceSnExtService.getProduceSnMap(reqBean.getOrganizeCode(), bindingDetailList.stream().map(MesRecyclablePackageBindingDetail::getProductSn).collect(Collectors.toList()));
for (MesRecyclablePackageBindingDetail bindingDetail : bindingDetailList) {
//外协件
if (CollectionUtils.isEmpty(produceSnMap) || !produceSnMap.containsKey(bindingDetail.getProductSn())) {
for (int i = 0; i < bindingDetail.getQty(); i++) {
productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), bindingDetail.getProductSn()).messageSource(equipVariableCollectContextList.iterator().next().getMessageSource()));
}
//自制件
} else {
createProductionPsInContext(reqBean, stepResult, workCell, equipVariableCollectContextList.iterator().next(), produceSnMap.get(bindingDetail.getProductSn()), productionPsInContextList);
}
}
return stepResult;
}
private StepResult createProductionPsInContext(StationRequestBean reqBean, StepResult stepResult, MesWorkCell workCell,
MesEquipVariableCollectContext equipVariableCollectContext, List<MesProduceSn> produceSnList, List<MesProductionPsInContext> productionPsInContextList) {
String suffixMsg = !StringUtils.isEmpty(stepResult.getMsg()) ? stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON : MesPcnExtConstWords.EMPTY;
List<MesProduceSn> unknowList = produceSnList.stream().filter(o -> (null != o && o.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) == 0)).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(unknowList) && unknowList.size() > 1) {
return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]信息异常,存在[%s]条[未知]状态的记录", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), unknowList.size()));
}
if (!CollectionUtils.isEmpty(unknowList) && checkAllowUnknowCenterCfg(reqBean) && (unknowList.size() > 1 || (!unknowList.get(0).getWorkCenterCode().equals(reqBean.getWorkCenterCode()) || !unknowList.get(0).getWorkCellCode().equals(reqBean.getWorkCellCode())))) {
return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]信息条码状态已被%s标记[未知]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(),
unknowList.stream().filter(Objects::nonNull).map(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getWorkCenterCode()).add(o.getWorkCellCode()).toString()).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON))));
}
produceSnList = produceSnList.stream().filter(Objects::nonNull).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList());
MesProduceSn produceSn = produceSnList.get(0);
if (produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) != 0 && produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS_TO_QUALIFIED.getValue()) != 0)
return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]质量状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus())));
if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_BACK.getValue()) > 0)
return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]条码状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus())));
//正常条码
if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) != 0) {
productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()));
return stepResult;
}
//未知条码【工序为空 代表新做的工序没有加工完成】
if (StringUtils.isEmpty(produceSn.getProcessCode()) && produceSnList.size() > 1) {
productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSnList.get(1)).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId()));
return stepResult;
}
//未知条码【工序为空 代表新做的工序没有加工完成】【只有一条条码记录 代表是打印的条码自进自出直接被标记为未知】
if (StringUtils.isEmpty(produceSn.getProcessCode())) {
productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue()).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId()));
return stepResult;
}
//未知条码【工序不为空 代表已完成的工序被重做后没有加工完成】
productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId()));
return stepResult;
}
private Boolean checkAllowUnknowCenterCfg(StationRequestBean reqBean) {
List<MesConfig> configList = configService.doCachedConfigList(MesPcnExtConstWords.ALLOW_UNKNOW_CENTER_CFG, reqBean.getOrganizeCode());
if (CollectionUtils.isEmpty(configList)) return true;
List<String> allowUnknowCenterList = Arrays.asList(configList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCfgValue()))).map(MesConfig::getCfgValue).collect(Collectors.joining(MesPcnExtConstWords.COMMA)).split(MesPcnExtConstWords.COMMA));
return CollectionUtils.isEmpty(allowUnknowCenterList) || !allowUnknowCenterList.contains(reqBean.getWorkCenterCode());
}
}

@ -1,226 +0,0 @@
//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
//
//import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
//import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingService;
//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.actor.shipping.dispatch.IFsmCommonService;
//import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService;
//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
//import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
//import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
//import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
//import cn.estsh.i3plus.pojo.mes.bean.*;
//import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBinding;
//import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail;
//import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
//import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
//import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
//import cn.estsh.i3plus.pojo.mes.model.StepResult;
//import cn.estsh.i3plus.pojo.mes.repository.MesStationRepository;
//import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
//import com.alibaba.fastjson.JSONObject;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.util.CollectionUtils;
//import org.springframework.util.StringUtils;
//
//import java.util.*;
//import java.util.stream.Collectors;
//import java.util.stream.Stream;
//
///**
// * @Description : 可回用包装条码匹配工步
// * @Reference :
// * @Author : junsheng.li
// * @CreateDate 2024/9/12 11:20
// * @Modify:
// **/
//@Slf4j
//@Service("mesRecyclablePackageMatchStepService")
//public class MesRecyclablePackageMatchStepService extends BaseStepService {
//
// @Autowired
// private IMesProductionProcessContextStepService productionProcessContextStepService;
//
// @Autowired
// private IMesProductionDispatchContextStepService productionDispatchContextStepService;
//
// @Autowired
// private IMesStationService mesStationService;
//
// @Autowired
// private IMesRecyclablePackageBindingService mesRecyclablePackageBindingService;
//
// @Autowired
// private IMesProduceSnExtService produceSnExtService;
//
// @Autowired
// private IConfigService configService;
//
// @Override
// public StepResult execute(StationRequestBean reqBean) {
//
// StationResultBean resultBean = new StationResultBean();
//
// StepResult stepResult = StepResult.getSuccessComplete();
//
// //获取上下文信息
// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean);
//
// //配置错误 抛出异常
// if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//
// //存储生产过程上下文对象
// productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext);
//
// //获取上下文生产扫/读信息:可回用包装条码
// List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanRecyclablePackageContext(reqBean);
// if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前缺失可回用包装条码信息!");
//
// //清除本次已获取得到的可回用包装条码信息
// productionDispatchContextStepService.removeScanRecyclablePackageContext(reqBean);
//
// //从上下文中取出设备信息
// MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
//
// //根据设备代码获取点位信息
// MesStation station = mesStationService.getMesStationByEquipmentCode(reqBean.getOrganizeCode(),cellEquipContext.getEquipmentCode());
// if (Objects.isNull(station) || Objects.isNull(station.getProcessMethod())) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]站点信息未维护", cellEquipContext.getEquipmentCode()));
//
// //加工模式
// switch (MesExtEnumUtil.STATION_PROCESS_METHOD.valueOfType(station.getProcessMethod())){
// case STATION_TYPE_10:
// case STATION_TYPE_20:
// case STATION_TYPE_30:
// case STATION_TYPE_40:{
// //获取包装绑定主表
// MesRecyclablePackageBinding recyclablePackageBinding = mesRecyclablePackageBindingService.getMesRecyclablePackageBindingByPackageSn(reqBean.getOrganizeCode(), equipVariableCollectContextList.iterator().next().getEquipVariableValue());
// if(Objects.isNull(recyclablePackageBinding)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("回收包装绑定[%s]信息不存在",equipVariableCollectContextList.iterator().next().getEquipVariableValue()));
// //获取绑定明细信息
// List<MesRecyclablePackageBindingDetail> bindingDetailList = mesRecyclablePackageBindingService.findMesRecyclablePackageBindingDetailByPid(reqBean.getOrganizeCode(), recyclablePackageBinding.getId());
// if(CollectionUtils.isEmpty(bindingDetailList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("回收包装绑定[%s]明细信息不存在",equipVariableCollectContextList.iterator().next().getEquipVariableValue()));
// //查询条码信息
// Map<String, List<MesProduceSn>> produceSnMap = produceSnExtService.getProduceSnMap(reqBean.getOrganizeCode(), bindingDetailList.stream().map(MesRecyclablePackageBindingDetail::getProductSn).collect(Collectors.toList()));
// List<MesProductionPsInContext> productionPsInContextList = new ArrayList<>();
// for (MesRecyclablePackageBindingDetail bindingDetail : bindingDetailList) {
// //外协件
// if (CollectionUtils.isEmpty(produceSnMap) || !produceSnMap.containsKey(bindingDetail.getProductSn())){
// for (int i = 0; i < bindingDetail.getQty(); i++) {
// //查询物料信息
// productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), bindingDetail.getProductSn()).messageSource(equipVariableCollectContextList.iterator().next().getMessageSource()));
// }
// //自制件
// }else{
// createProductionPsInContext(reqBean, resultBean, stepResult, workCell, equipVariableCollectContext, produceSnMap.get(equipVariableCollectContext.getEquipVariableValue()), productionPsInContextList);
// }
//
//
// }
//
//
// };break;
// default:stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "站点加工模式未实现!");break;
// }
//
//
// for (MesEquipVariableCollectContext equipVariableCollectContext : equipVariableCollectContextList) {
// if (null == equipVariableCollectContext || StringUtils.isEmpty(equipVariableCollectContext.getEquipVariableValue())) continue;
// if (CollectionUtils.isEmpty(produceSnMap) || !produceSnMap.containsKey(equipVariableCollectContext.getEquipVariableValue()))
// productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue()).messageSource(equipVariableCollectContext.getMessageSource()));
// else createProductionPsInContext(reqBean, resultBean, stepResult, workCell, equipVariableCollectContext, produceSnMap.get(equipVariableCollectContext.getEquipVariableValue()), productionPsInContextList);
// }
//
// //获取上下文产出零件信息
// List<MesProductionPartContext> cachedProductionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
//
// //非扫描场景 清除历史产出零件信息
// if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) removeBusiData(reqBean);
// //保存上下文产出零件信息
// productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList);
//
// //存储展示组件MODULE_CONTENT内容
// productionDispatchContextStepService.dispatchModuleContentContext(reqBean, getModuleContextData(reqBean, productionPartContextList));
//
// //当前工位使用的设备
// MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip();
// if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() && cellEquipmentContext.getCavity().compareTo(productionPartContextList.size()) > 0)
// return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(equipVariableCollectContextList.get(0).getEquipVariableValue()),
// stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT,
// String.format("当前扫描信息加工单[%s]验证工单状态成功,已知腔数[%s],还需要再连续扫描[%s]次加工单!", equipVariableCollectContextList.get(0).getEquipVariableValue(), cellEquipmentContext.getCavity(), cellEquipmentContext.getCavity() - productionPartContextList.size()));
//
//
// String workOrderStr = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString();
// return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(workOrderStr), stepResult, String.format("当前%s加工单%s验证工单状态成功%s!",
// MesExtEnumUtil.CELL_MESSAGE_SOURCE.valueOfDescription(equipVariableCollectContextList.get(0).getMessageSource()), workOrderStr,
// MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() ? String.format(",当前加工单个数[%s]已满足腔数", productionPartContextList.size()) : MesPcnExtConstWords.EMPTY));
//
// }
//
//
// private StepResult createProductionPsInContext(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult,
// MesWorkCell workCell, MesEquipVariableCollectContext equipVariableCollectContext, List<MesProduceSn> produceSnList, List<MesProductionPsInContext> productionPsInContextList) {
//
// String suffixMsg = !StringUtils.isEmpty(stepResult.getMsg()) ? stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON : MesPcnExtConstWords.EMPTY;
//
// List<MesProduceSn> unknowList = produceSnList.stream().filter(o -> (null != o && o.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) == 0)).collect(Collectors.toList());
//
// if (!CollectionUtils.isEmpty(unknowList) && unknowList.size() > 1) {
// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]信息异常,存在[%s]条[未知]状态的记录", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), unknowList.size()));
// }
//
// if (!CollectionUtils.isEmpty(unknowList) && checkAllowUnknowCenterCfg(reqBean) && (unknowList.size() > 1 || (!unknowList.get(0).getWorkCenterCode().equals(reqBean.getWorkCenterCode()) || !unknowList.get(0).getWorkCellCode().equals(reqBean.getWorkCellCode())))) {
// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]信息条码状态已被%s标记[未知]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(),
// unknowList.stream().filter(Objects::nonNull).map(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getWorkCenterCode()).add(o.getWorkCellCode()).toString()).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON))));
// }
//
// produceSnList = produceSnList.stream().filter(Objects::nonNull).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList());
//
// MesProduceSn produceSn = produceSnList.get(0);
//
// if (produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) != 0 && produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS_TO_QUALIFIED.getValue()) != 0)
// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]质量状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus())));
//
// if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_BACK.getValue()) > 0)
// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]条码状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus())));
//
// //正常条码
// if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) != 0) {
//
// productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()));
//
// return stepResult;
// }
//
// //未知条码【工序为空 代表新做的工序没有加工完成】
// if (StringUtils.isEmpty(produceSn.getProcessCode()) && produceSnList.size() > 1) {
//
// productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSnList.get(1)).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId()));
//
// return stepResult;
// }
//
// //未知条码【工序为空 代表新做的工序没有加工完成】【只有一条条码记录 代表是打印的条码自进自出直接被标记为未知】
// if (StringUtils.isEmpty(produceSn.getProcessCode())) {
//
// productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue()).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId()));
//
// return stepResult;
// }
//
// //未知条码【工序不为空 代表已完成的工序被重做后没有加工完成】
// productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId()));
//
// return stepResult;
//
// }
//
// private Boolean checkAllowUnknowCenterCfg(StationRequestBean reqBean) {
// List<MesConfig> configList = configService.doCachedConfigList(MesPcnExtConstWords.ALLOW_UNKNOW_CENTER_CFG, reqBean.getOrganizeCode());
// if (CollectionUtils.isEmpty(configList)) return true;
// List<String> allowUnknowCenterList = Arrays.asList(configList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCfgValue()))).map(MesConfig::getCfgValue).collect(Collectors.joining(MesPcnExtConstWords.COMMA)).split(MesPcnExtConstWords.COMMA));
// return CollectionUtils.isEmpty(allowUnknowCenterList) || !allowUnknowCenterList.contains(reqBean.getWorkCenterCode());
// }
//
//}

@ -8,14 +8,17 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
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.actor.shipping.dispatch.IFsmCommonService; import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
import cn.estsh.i3plus.pojo.mes.bean.MesStation;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult; import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -58,6 +61,9 @@ public class MesRecyclablePackageReadStepService extends BaseStepService {
@Autowired @Autowired
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService; private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
@Autowired
private IMesStationService mesStationService;
@Override @Override
public void title(StationRequestBean reqBean) { public void title(StationRequestBean reqBean) {
this.sendMessage(reqBean, new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN), String.format("工步: %s", reqBean.getStepName()), MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE, MesPcnEnumUtil.STATION_DATA_TYPE.TITLE); this.sendMessage(reqBean, new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN), String.format("工步: %s", reqBean.getStepName()), MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE, MesPcnEnumUtil.STATION_DATA_TYPE.TITLE);
@ -149,7 +155,11 @@ public class MesRecyclablePackageReadStepService extends BaseStepService {
//根据设备ID,设备数据变量ID集合 修改设备ID分表采集数据的状态 //根据设备ID,设备数据变量ID集合 修改设备ID分表采集数据的状态
equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), cellEquipContext.getEquipId(), equipLogDispatchContext.getResetEquipVariableIdList()); equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), cellEquipContext.getEquipId(), equipLogDispatchContext.getResetEquipVariableIdList());
return stepResult; //根据设备代码获取点位信息
MesStation station = mesStationService.getMesStationByEquipmentCode(reqBean.getOrganizeCode(),cellEquipContext.getEquipmentCode());
if (Objects.isNull(station) || Objects.isNull(station.getProcessMethod())) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]站点信息未维护", cellEquipContext.getEquipmentCode()));
return ((IStepService) SpringContextsUtil.getBean(MesExtEnumUtil.STATION_PROCESS_METHOD.valueOfStrategyClass(station.getProcessMethod()))).executeInState(reqBean);
} }

@ -0,0 +1,59 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import java.io.Serializable;
/**
* -
*/
@Data
public class MesProductionRecyclablePackageContext implements Serializable {
private static final long serialVersionUID = 4337949265011880288L;
@ApiParam("组织代码")
private String organizeCode;
@ApiParam("工单号")
private String workOrderNo;
@ApiParam(name = "包条码")
private String packageSn;
@ApiParam(name = "包类型")
private String packageTypeCode;
@ApiParam("零件条码ID")
private Long id;
@ApiParam("零件条码")
private String productSn;
@ApiParam("零件号")
private String partNo;
@ApiParam("零件名称")
private String partName;
public MesProductionRecyclablePackageContext() {
}
public MesProductionRecyclablePackageContext(String organizeCode, String packageSn, String packageTypeCode) {
this.organizeCode = organizeCode;
this.packageSn = packageSn;
this.packageTypeCode = packageTypeCode;
}
public MesProductionRecyclablePackageContext copy(MesRecyclablePackageBindingDetail mesRecyclablePackageBindingDetail) {
this.partName = mesRecyclablePackageBindingDetail.getPartName();
this.partNo = mesRecyclablePackageBindingDetail.getPartNo();
this.productSn = mesRecyclablePackageBindingDetail.getProductSn();
return this;
}
}

@ -65,6 +65,8 @@ public class MesPcnExtConstWords {
public static final String USER_INFO = "userInfo"; public static final String USER_INFO = "userInfo";
// 同步标志 // 同步标志
public static final String SYSTEM_SYNC_STATUS = "systemSyncStatus"; public static final String SYSTEM_SYNC_STATUS = "systemSyncStatus";
// 同步时间
public static final String SYSTEM_SYNC_DATE_TIME = "systemSyncDatetime";
// 零件编码 // 零件编码
public static final String PART_NO = "partNo"; public static final String PART_NO = "partNo";
// 零件名称 // 零件名称
@ -294,6 +296,8 @@ public class MesPcnExtConstWords {
public static final Integer ZERO = 0; public static final Integer ZERO = 0;
// 1 // 1
public static final Integer ONE = 1; public static final Integer ONE = 1;
// 3
public static final Integer THREE = 3;
// 中括号 // 中括号
public static final String SQUARE_BRACKETS = "[]"; public static final String SQUARE_BRACKETS = "[]";
// & // &
@ -433,6 +437,8 @@ public class MesPcnExtConstWords {
//强过 //强过
public static final String SHIP_PASS = "跳过"; public static final String SHIP_PASS = "跳过";
public static final String STRONGER_PASS = "强过"; public static final String STRONGER_PASS = "强过";
//SPS强过配置code
public static final String SPS_STRONGER_PASS = "SPS_STRONGER_PASS";
//发运解析条码最大长度 //发运解析条码最大长度
public static final String MAX_SHIPPING_BARCODE_LENGTH = "MAX_SHIPPING_BARCODE_LENGTH"; public static final String MAX_SHIPPING_BARCODE_LENGTH = "MAX_SHIPPING_BARCODE_LENGTH";

@ -29,12 +29,12 @@
<log4j2.level>INFO</log4j2.level> <log4j2.level>INFO</log4j2.level>
<skipTests>true</skipTests> <skipTests>true</skipTests>
<app.charset>UTF-8</app.charset> <app.charset>UTF-8</app.charset>
<!--<impp.framework.version>1.0.0.4-patch</impp.framework.version>--> <!-- <impp.framework.version>1.0.0.4-patch</impp.framework.version>-->
<impp.framework.version>1.0.1-YZ</impp.framework.version> <impp.framework.version>1.0.1-YZ</impp.framework.version>
<i3plus.pojo.version>1.0.0-yfai</i3plus.pojo.version> <i3plus.pojo.version>1.0.0-yfai</i3plus.pojo.version>
<i3plus.platform.version>1.0.0.1-patch</i3plus.platform.version> <i3plus.platform.version>1.0.0.1-patch</i3plus.platform.version>
<i3plus.mes.pcn.version>1.0.0-yfai</i3plus.mes.pcn.version> <i3plus.mes.pcn.version>1.0.1-yfai</i3plus.mes.pcn.version>
<log4j2.version>2.17.1</log4j2.version> <log4j2.version>2.17.1</log4j2.version>
</properties> </properties>

Loading…
Cancel
Save