forked from I3-YF/i3plus-mes-pcn-yfai
Merge remote-tracking branch 'origin/dev-wuhan-temp' into dev-wuhan-temp
commit
13cb24991d
@ -0,0 +1,17 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEmergencyLocation;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
/**
|
||||
* @Description : 应急件库位管理记录
|
||||
* @Reference :
|
||||
* @Author : junsheng.li
|
||||
* @CreateDate 2024/10/17 16:22
|
||||
* @Modify:
|
||||
**/
|
||||
public interface IMesEmergencyLocationLogService {
|
||||
|
||||
@ApiOperation("新增应急件库位管理记录")
|
||||
void insertMesEmergencyLocationLog(MesEmergencyLocation location);
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesEmergencyLocationModel;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEmergencyLocation;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description : 应急件库位管理
|
||||
* @Reference :
|
||||
* @Author : junsheng.li
|
||||
* @CreateDate 2024/10/17 16:22
|
||||
* @Modify:
|
||||
**/
|
||||
public interface IMesEmergencyLocationService {
|
||||
|
||||
@ApiOperation("查询应急件库位管理")
|
||||
List<MesEmergencyLocation> findMesEmergencyLocationList(String organizeCode, String workCenterCode);
|
||||
|
||||
@ApiOperation("操作")
|
||||
void doAction(MesEmergencyLocationModel mesEmergencyLocationModel);
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEmergencyLocationService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesEmergencyLocationModel;
|
||||
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.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @Description :应急件库位管理
|
||||
* @Reference :
|
||||
* @Author : junsheng.li
|
||||
* @CreateDate 2024/10/17 16:16
|
||||
* @Modify:
|
||||
**/
|
||||
@RestController
|
||||
@RequestMapping(MesCommonConstant.MES_YANFEN + "/emergencyLocation")
|
||||
public class MesEmergencyLocationController {
|
||||
|
||||
@Autowired
|
||||
private IMesEmergencyLocationService mesEmergencyLocationService;
|
||||
|
||||
@GetMapping("/query")
|
||||
@ApiOperation(value = "查询绑定信息")
|
||||
public ResultBean findMesRecyclablePackageBindingDetail(String organizeCode, String workCenterCode) {
|
||||
|
||||
try {
|
||||
ValidatorBean.checkNotNull(workCenterCode, "产线代码不能为空");
|
||||
ValidatorBean.checkNotNull(organizeCode, "工厂代码不能为空");
|
||||
return ResultBean.success("查询成功").setResultList(mesEmergencyLocationService.findMesEmergencyLocationList(organizeCode, workCenterCode));
|
||||
} catch (ImppBusiException imppException) {
|
||||
return ResultBean.fail(imppException);
|
||||
} catch (Exception e) {
|
||||
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/doAction")
|
||||
@ApiOperation(value = "操作")
|
||||
public ResultBean doAction(@RequestBody MesEmergencyLocationModel model) {
|
||||
|
||||
try {
|
||||
ValidatorBean.checkNotNull(model.getWorkCenterCode(), "产线代码不能为空");
|
||||
ValidatorBean.checkNotNull(model.getOrganizeCode(), "工厂代码不能为空");
|
||||
ValidatorBean.checkNotNull(model.getType(), "操作类型不能为空");
|
||||
ValidatorBean.checkNotNull(model.getUserName(), "操作人不能为空");
|
||||
mesEmergencyLocationService.doAction(model);
|
||||
return ResultBean.success("操作成功");
|
||||
} catch (ImppBusiException imppException) {
|
||||
return ResultBean.fail(imppException);
|
||||
} catch (Exception e) {
|
||||
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEmergencyLocationLogService;
|
||||
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.MesEmergencyLocation;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEmergencyLocationLog;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesEmergencyLocationLogRepository;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @Description : 应急件库位管理记录
|
||||
* @Reference :
|
||||
* @Author : junsheng.li
|
||||
* @CreateDate 2024/10/17 16:23
|
||||
* @Modify:
|
||||
**/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MesEmergencyLocationLogServiceImpl implements IMesEmergencyLocationLogService {
|
||||
|
||||
@Autowired
|
||||
private MesEmergencyLocationLogRepository mesEmergencyLocationLogRepository;
|
||||
|
||||
@Override
|
||||
public void insertMesEmergencyLocationLog(MesEmergencyLocation location) {
|
||||
MesEmergencyLocationLog log = new MesEmergencyLocationLog();
|
||||
BeanUtils.copyProperties(location,log, MesPcnExtConstWords.BASE_BEAN_FIELDS);
|
||||
log.setFid(UUID.randomUUID().toString());
|
||||
ConvertBean.serviceModelInitialize(log,location.getModifyUser());
|
||||
mesEmergencyLocationLogRepository.insert(log);
|
||||
}
|
||||
}
|
@ -0,0 +1,233 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEmergencyLocationLogService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEmergencyLocationService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.StringUtilExt;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesEmergencyLocationModel;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
||||
import cn.estsh.i3plus.platform.common.tool.TimeTool;
|
||||
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
||||
import cn.estsh.i3plus.pojo.base.util.StringUtil;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEmergencyLocation;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesEmergencyLocationRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
||||
import cn.estsh.impp.framework.boot.util.ValidatorBean;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @Description : 应急件库位管理
|
||||
* @Reference :
|
||||
* @Author : junsheng.li
|
||||
* @CreateDate 2024/10/17 16:23
|
||||
* @Modify:
|
||||
**/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MesEmergencyLocationServiceImpl implements IMesEmergencyLocationService {
|
||||
|
||||
@Autowired
|
||||
private MesEmergencyLocationRepository mesEmergencyLocationRepository;
|
||||
|
||||
@Autowired
|
||||
private IMesEmergencyLocationLogService mesEmergencyLocationLogService;
|
||||
|
||||
@Autowired
|
||||
private IMesWorkOrderExtService mesWorkOrderExtService;
|
||||
|
||||
@Override
|
||||
public List<MesEmergencyLocation> findMesEmergencyLocationList(String organizeCode, String workCenterCode) {
|
||||
if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(workCenterCode)) {
|
||||
return null;
|
||||
}
|
||||
return findMesEmergencyLocationList(organizeCode, CommonEnumUtil.VALID, workCenterCode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doAction(MesEmergencyLocationModel model) {
|
||||
switch (model.getType()) {
|
||||
//入库
|
||||
case 10: doStockInOnline(model);break;
|
||||
//出库
|
||||
case 20: doStockOutOnline(model);break;
|
||||
//GP12
|
||||
case 30: doGpInspectionOnline(model);break;
|
||||
//设置
|
||||
case 40: doEmergencySinkLocationSettingOnline(model);break;
|
||||
default: MesPcnException.throwMesBusiException("扫描类型【%s】不存在", model.getType());break;
|
||||
}
|
||||
}
|
||||
|
||||
private List<MesEmergencyLocation> findMesEmergencyLocationList(String organizeCode, Integer status, String workCenterCode) {
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getStringEqualPack(workCenterCode, MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
|
||||
DdlPreparedPack.getNumEqualPack(status, MesPcnExtConstWords.STATUS, packBean);
|
||||
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{MesPcnExtConstWords.LOCATION_NUMBER}, packBean);
|
||||
return mesEmergencyLocationRepository.findByHqlWhere(packBean);
|
||||
}
|
||||
|
||||
private void doStockInOnline(MesEmergencyLocationModel model) {
|
||||
ValidatorBean.checkNotNull(model.getLocation(), "库位不能为空");
|
||||
ValidatorBean.checkNotNull(model.getWorkOrderNo(), "加工单号不能为空");
|
||||
//校验库位信息
|
||||
MesEmergencyLocation location = getMesEmergencyLocation(model.getOrganizeCode(), model.getWorkCenterCode(), model.getLocation(), null);
|
||||
checkLocation(model, location);
|
||||
//校验加工单
|
||||
MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(model.getOrganizeCode(), model.getWorkOrderNo());
|
||||
checkWorkOrderNo(model, workOrder);
|
||||
//数据绑定
|
||||
location.setWorkOrderNo(workOrder.getWorkOrderNo());
|
||||
location.setOfflineDate(workOrder.getOfflineTime());
|
||||
location.setCustPartNo(workOrder.getCustPartNo());
|
||||
location.setPartName(workOrder.getPartName());
|
||||
location.setInDate(TimeTool.getNowTime(true));
|
||||
location.setVehicleNo(workOrder.getCarModelCode());
|
||||
location.setStockType(MesExtEnumUtil.EMERGENCY_LOCATION_STOCK_TYPE.EMERGENCY_LOCATION_STOCK_TYPE_10.getValue());
|
||||
location.setSystemSyncStatus(CommonEnumUtil.FALSE);
|
||||
ConvertBean.serviceModelUpdate(location, model.getUserName());
|
||||
//记录日志
|
||||
mesEmergencyLocationLogService.insertMesEmergencyLocationLog(location);
|
||||
|
||||
mesEmergencyLocationRepository.update(location);
|
||||
}
|
||||
|
||||
private void doStockOutOnline(MesEmergencyLocationModel model) {
|
||||
ValidatorBean.checkNotNull(model.getWorkOrderNo(), "加工单号不能为空");
|
||||
//校验加工单信息
|
||||
MesEmergencyLocation locationWorkOrder = getMesEmergencyLocation(model);
|
||||
locationWorkOrder.setOutDate(TimeTool.getNowTime(true));
|
||||
locationWorkOrder.setStockType(MesExtEnumUtil.EMERGENCY_LOCATION_STOCK_TYPE.EMERGENCY_LOCATION_STOCK_TYPE_20.getValue());
|
||||
ConvertBean.serviceModelUpdate(locationWorkOrder, model.getUserName());
|
||||
//记录日志
|
||||
mesEmergencyLocationLogService.insertMesEmergencyLocationLog(locationWorkOrder);
|
||||
//数据解绑
|
||||
locationWorkOrder.setWorkOrderNo(MesPcnExtConstWords.EMPTY);
|
||||
locationWorkOrder.setOfflineDate(MesPcnExtConstWords.EMPTY);
|
||||
locationWorkOrder.setCustPartNo(MesPcnExtConstWords.EMPTY);
|
||||
locationWorkOrder.setPartName(MesPcnExtConstWords.EMPTY);
|
||||
locationWorkOrder.setInDate(MesPcnExtConstWords.EMPTY);
|
||||
locationWorkOrder.setVehicleNo(MesPcnExtConstWords.EMPTY);
|
||||
locationWorkOrder.setSystemSyncStatus(CommonEnumUtil.FALSE);
|
||||
mesEmergencyLocationRepository.update(locationWorkOrder);
|
||||
}
|
||||
|
||||
private void doGpInspectionOnline(MesEmergencyLocationModel model) {
|
||||
ValidatorBean.checkNotNull(model.getWorkOrderNo(), "加工单号不能为空");
|
||||
//校验加工单信息
|
||||
MesWorkOrder workOrder = mesWorkOrderExtService.getWorkOrder(model.getOrganizeCode(), model.getWorkOrderNo());
|
||||
if (Objects.isNull(workOrder)) {
|
||||
MesPcnException.throwMesBusiException("加工单【%s】信息不存在", model.getWorkOrderNo());
|
||||
}
|
||||
MesEmergencyLocation locationWorkOrder = getMesEmergencyLocation(model);
|
||||
if (MesExtEnumUtil.EMERGENCY_LOCATION_STOCK_TYPE.EMERGENCY_LOCATION_STOCK_TYPE_30.getValue() == locationWorkOrder.getStockType()) {
|
||||
locationWorkOrder.setStockType(MesExtEnumUtil.EMERGENCY_LOCATION_STOCK_TYPE.EMERGENCY_LOCATION_STOCK_TYPE_40.getValue());
|
||||
} else {
|
||||
locationWorkOrder.setStockType(MesExtEnumUtil.EMERGENCY_LOCATION_STOCK_TYPE.EMERGENCY_LOCATION_STOCK_TYPE_30.getValue());
|
||||
}
|
||||
ConvertBean.serviceModelUpdate(locationWorkOrder, model.getUserName());
|
||||
//记录日志
|
||||
mesEmergencyLocationLogService.insertMesEmergencyLocationLog(locationWorkOrder);
|
||||
//应急件库位管理更新
|
||||
mesEmergencyLocationRepository.update(locationWorkOrder);
|
||||
}
|
||||
|
||||
|
||||
private void doEmergencySinkLocationSettingOnline(MesEmergencyLocationModel model) {
|
||||
ValidatorBean.checkNotNull(model.getLocationNumber(), "库位数不能为空");
|
||||
ValidatorBean.checkNotNull(model.getRemindDay(), "提醒天数不能为空");
|
||||
List<MesEmergencyLocation> locationList = findMesEmergencyLocationList(model.getOrganizeCode(), null, model.getWorkCenterCode());
|
||||
int lastNumber = 0;
|
||||
if (!CollectionUtils.isEmpty(locationList)) {
|
||||
lastNumber = locationList.get(locationList.size() - MesPcnExtConstWords.ONE).getLocationNumber();
|
||||
if (locationList.size() > model.getLocationNumber()) {
|
||||
//禁用多于库位
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
||||
DdlPreparedPack.getStringEqualPack(model.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
|
||||
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.VALID, MesPcnExtConstWords.STATUS, packBean);
|
||||
DdlPreparedPack.getNumberBiggerPack(model.getLocationNumber(), MesPcnExtConstWords.LOCATION_NUMBER, packBean);
|
||||
mesEmergencyLocationRepository.updateByProperties(new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.STATUS},
|
||||
new Object[]{model.getUserName(), TimeTool.getNowTime(true), CommonEnumUtil.FALSE}, packBean);
|
||||
//解除小于库位
|
||||
packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
||||
DdlPreparedPack.getStringEqualPack(model.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
|
||||
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.FALSE, MesPcnExtConstWords.STATUS, packBean);
|
||||
DdlPreparedPack.getNumberSmallerEqualPack(model.getLocationNumber(), MesPcnExtConstWords.LOCATION_NUMBER, packBean);
|
||||
mesEmergencyLocationRepository.updateByProperties(new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.STATUS},
|
||||
new Object[]{model.getUserName(), TimeTool.getNowTime(true), CommonEnumUtil.VALID}, packBean);
|
||||
}
|
||||
}
|
||||
//新增加
|
||||
while (model.getLocationNumber() > lastNumber) {
|
||||
MesEmergencyLocation location = new MesEmergencyLocation();
|
||||
location.setOrganizeCode(model.getOrganizeCode());
|
||||
location.setWorkCenterCode(model.getWorkCenterCode());
|
||||
location.setStatus(CommonEnumUtil.VALID);
|
||||
location.setLocationNumber(lastNumber++);
|
||||
location.setLocation(model.getWorkCenterCode() + "kw" + StringUtilExt.stringFormat(String.valueOf(lastNumber), 4, true, "0"));
|
||||
ConvertBean.serviceModelInitialize(location, model.getUserName());
|
||||
mesEmergencyLocationRepository.insert(location);
|
||||
}
|
||||
}
|
||||
|
||||
private MesEmergencyLocation getMesEmergencyLocation(MesEmergencyLocationModel model) {
|
||||
MesEmergencyLocation locationWorkOrder = getMesEmergencyLocation(model.getOrganizeCode(), null, null, model.getWorkOrderNo());
|
||||
if (Objects.isNull(locationWorkOrder)) {
|
||||
MesPcnException.throwMesBusiException("加工单【%s】应急件库位管理信息不存在", model.getWorkOrderNo());
|
||||
}
|
||||
if (!model.getWorkCenterCode().equals(locationWorkOrder.getWorkCenterCode())) {
|
||||
MesPcnException.throwMesBusiException("加工单【%s】所在产线【%s】与当前产线【%s】不匹配", model.getWorkOrderNo(), locationWorkOrder.getWorkCenterCode(), model.getWorkCenterCode());
|
||||
}
|
||||
return locationWorkOrder;
|
||||
}
|
||||
|
||||
private void checkLocation(MesEmergencyLocationModel model, MesEmergencyLocation location) {
|
||||
//校验库位是否存在
|
||||
if (Objects.isNull(location)) {
|
||||
MesPcnException.throwMesBusiException("产线【%s】库位【%s】信息不存在", model.getWorkCenterCode(), model.getLocation());
|
||||
}
|
||||
if (!StringUtil.isEmpty(location.getWorkOrderNo())) {
|
||||
MesPcnException.throwMesBusiException("产线【%s】库位【%s】已存在加工单【%s】", model.getWorkCenterCode(), model.getLocation(), location.getWorkOrderNo());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void checkWorkOrderNo(MesEmergencyLocationModel model, MesWorkOrder workOrder) {
|
||||
//校验工单
|
||||
if (Objects.isNull(workOrder)) {
|
||||
MesPcnException.throwMesBusiException("加工单【%s】信息不存在", model.getWorkOrderNo());
|
||||
}
|
||||
//已完成状态才能入库
|
||||
if (Objects.isNull(workOrder.getWorkOrderStatus()) || MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue() != workOrder.getWorkOrderStatus()) {
|
||||
MesPcnException.throwMesBusiException("加工单【%s】状态为【%s】不为【已完成】", model.getWorkOrderNo(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()));
|
||||
}
|
||||
if (!model.getWorkCenterCode().equals(workOrder.getWorkCenterCode())) {
|
||||
MesPcnException.throwMesBusiException("加工单【%s】所在产线【%s】与当前产线【%s】不匹配", model.getWorkOrderNo(), workOrder.getWorkCenterCode(), model.getWorkCenterCode());
|
||||
}
|
||||
//校验是否已经入库
|
||||
MesEmergencyLocation locationWorkOrder = getMesEmergencyLocation(model.getOrganizeCode(), null, null, model.getWorkOrderNo());
|
||||
if (!Objects.isNull(locationWorkOrder)) {
|
||||
MesPcnException.throwMesBusiException("加工单号已经入库,产线【%s】库位【%s】", locationWorkOrder.getWorkCenterCode(), locationWorkOrder.getLocation());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public MesEmergencyLocation getMesEmergencyLocation(String organizeCode, String workCenterCode, String location, String workOrderNo) {
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getStringEqualPack(workCenterCode, MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
|
||||
DdlPreparedPack.getStringEqualPack(location, MesPcnExtConstWords.LOCATION, packBean);
|
||||
DdlPreparedPack.getStringEqualPack(workOrderNo, MesPcnExtConstWords.WORK_ORDER_NO, packBean);
|
||||
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.VALID, MesPcnExtConstWords.STATUS, packBean);
|
||||
return mesEmergencyLocationRepository.getByProperty(packBean);
|
||||
}
|
||||
}
|
@ -0,0 +1,173 @@
|
||||
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.pojo.context.*;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
||||
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
||||
import cn.estsh.i3plus.platform.common.tool.TimeTool;
|
||||
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssemblyUnique;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyUniqueRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderAssemblyRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
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 : 保存装配记录工步 【排序】
|
||||
* @Author : wangjie
|
||||
**/
|
||||
@Slf4j
|
||||
@Service("mesAssemblySaveSortStepService")
|
||||
public class MesAssemblySaveSortStepService extends BaseStepService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
|
||||
@Autowired
|
||||
private MesProductionAssemblyRepository productionAssemblyRepository;
|
||||
|
||||
@Autowired
|
||||
private MesWorkOrderAssemblyRepository workOrderAssemblyRepository;
|
||||
|
||||
@Autowired
|
||||
private MesProductionAssemblyUniqueRepository productionAssemblyUniqueRepository;
|
||||
|
||||
@Autowired
|
||||
private SnowflakeIdMaker snowflakeIdMaker;
|
||||
|
||||
@Autowired
|
||||
private IMesProduceSnExtService produceSnExtService;
|
||||
|
||||
public List<MesProdRuleContext> saveSortProductionAssembly(StationRequestBean reqBean, List<MesProdRuleContext> prodRuleContextList, List<MesProductionPsOutContext> productionPsOutContextList, MesScanMonitorContext scanMonitorContext) {
|
||||
|
||||
Map<Integer, MesProductionPsOutContext> ppMap = CollectionUtils.isEmpty(productionPsOutContextList) ? null : productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProductionPsOutContext::getForeignKey, o -> o));
|
||||
|
||||
Long mouldRecordId = null != scanMonitorContext ? scanMonitorContext.getMouldRecordId() : null;
|
||||
|
||||
List<Long> productSnIdList = new ArrayList<>();
|
||||
|
||||
//获取模具号
|
||||
String mouldNo = getMouldNo(reqBean, prodRuleContextList);
|
||||
|
||||
for (MesProdRuleContext prodRuleContext : prodRuleContextList) {
|
||||
|
||||
if (null == prodRuleContext) continue;
|
||||
|
||||
if (StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue;
|
||||
|
||||
//显示装配件的时候会进行赋值, 后续匹配的时候已经有值
|
||||
if (StringUtils.isEmpty(prodRuleContext.getProductionRecordId())) prodRuleContext.setProductionRecordId(snowflakeIdMaker.nextId());
|
||||
if (StringUtils.isEmpty(prodRuleContext.getMouldNo())) prodRuleContext.setMouldNo(mouldNo);
|
||||
|
||||
MesProductionPsOutContext productionPsOutContext = CollectionUtils.isEmpty(ppMap) ? null : ppMap.get(prodRuleContext.getForeignKey());
|
||||
|
||||
List<MesProductionAssemblySortContext> productionAssemblySortContextList = prodRuleContext.getSortAssemblyDataContext();
|
||||
|
||||
for (MesProductionAssemblySortContext productionAssemblySortContext : productionAssemblySortContextList) {
|
||||
|
||||
if (null == productionAssemblySortContext) continue;
|
||||
|
||||
if (productionAssemblySortContext.getIsSaveDb().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) continue;
|
||||
|
||||
if (productionAssemblySortContext.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0) continue;
|
||||
|
||||
if (StringUtils.isEmpty(productionAssemblySortContext.getId())) {
|
||||
MesProductionAssembly productionAssembly = new MesProductionAssembly();
|
||||
BeanUtils.copyProperties(productionAssemblySortContext, productionAssembly);
|
||||
productionAssembly.setIsOrigSn(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
|
||||
if (null != productionPsOutContext) {
|
||||
productionAssembly.setSerialNumber(productionPsOutContext.getSerialNumber());
|
||||
productionAssembly.setCustSn(productionPsOutContext.getCustSn());
|
||||
}
|
||||
productionAssembly.setMouldRecordId(mouldRecordId);
|
||||
productionAssembly.setProductionRecordId(prodRuleContext.getProductionRecordId());
|
||||
productionAssembly.setMouldNo(mouldNo);
|
||||
productionAssembly.setFid(UUID.randomUUID().toString());
|
||||
productionAssembly.setOrganizeCode(reqBean.getOrganizeCode());
|
||||
ConvertBean.serviceModelInitialize(productionAssembly, reqBean.getUserInfo());
|
||||
productionAssembly.setRemark(getRemark(reqBean.getWorkCellCode(), productionAssemblySortContext.getWorkCellCode(), null));
|
||||
productionAssembly = productionAssemblyRepository.insert(productionAssembly);
|
||||
|
||||
productionAssemblySortContext.setId(productionAssembly.getId());
|
||||
|
||||
} else {
|
||||
|
||||
productionAssemblyRepository.updateByProperties(
|
||||
new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE},
|
||||
new Object[]{productionAssemblySortContext.getId(), reqBean.getOrganizeCode()},
|
||||
new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS,
|
||||
MesPcnExtConstWords.ASSEMBLY_STATUS, MesPcnExtConstWords.ASSEMBLY_SN, MesPcnExtConstWords.IS_SKIP, MesPcnExtConstWords.MOULD_NO,
|
||||
MesPcnExtConstWords.MOULD_RECORD_ID, MesPcnExtConstWords.PRODUCTION_RECORD_ID, MesPcnExtConstWords.REMARK},
|
||||
new Object[]{reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),
|
||||
productionAssemblySortContext.getAssemblyStatus(), productionAssemblySortContext.getAssemblySn(), productionAssemblySortContext.getIsSkip(), mouldNo,
|
||||
mouldRecordId, prodRuleContext.getProductionRecordId(), getRemark(reqBean.getWorkCellCode(), productionAssemblySortContext.getWorkCellCode(), productionAssemblySortContext.getPaRemark())});
|
||||
|
||||
}
|
||||
|
||||
saveWorkOrderAssembly(reqBean, productionAssemblySortContext);
|
||||
|
||||
productionAssemblySortContext.isSaveDb();
|
||||
|
||||
saveProductionAssemblyUnique(reqBean, productionAssemblySortContext);
|
||||
|
||||
if (!StringUtils.isEmpty(productionAssemblySortContext.getProductSnId())) productSnIdList.add(productionAssemblySortContext.getProductSnId());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!CollectionUtils.isEmpty(productSnIdList)) produceSnExtService.saveProduceSnList(reqBean, MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY.getValue(), productSnIdList);
|
||||
|
||||
return prodRuleContextList;
|
||||
|
||||
}
|
||||
|
||||
private String getMouldNo(StationRequestBean reqBean, List<MesProdRuleContext> prodRuleContextList) {
|
||||
Optional<MesProdRuleContext> optional = prodRuleContextList.stream().filter(o -> null != o && !StringUtils.isEmpty(o.getMouldNo())).findFirst();
|
||||
if (null != optional && optional.isPresent()) return optional.get().getMouldNo();
|
||||
MesEquipVariableCollectContext equipVariableCollectContext = productionDispatchContextStepService.getMouldNoContext(reqBean);
|
||||
return null != equipVariableCollectContext ? equipVariableCollectContext.getEquipVariableValue() : null;
|
||||
}
|
||||
|
||||
private String getRemark(String curWorkCellCode, String workCellCode, String remark) {
|
||||
if (curWorkCellCode.equals(workCellCode)) return remark;
|
||||
StringJoiner sj = new StringJoiner(MesPcnExtConstWords.SEMICOLON);
|
||||
if (!StringUtils.isEmpty(remark)) sj.add(remark);
|
||||
return sj.add(String.format("装配工位[%s]", curWorkCellCode)).toString();
|
||||
}
|
||||
|
||||
private void saveProductionAssemblyUnique(StationRequestBean reqBean, MesProductionAssemblySortContext productionAssemblySortContext) {
|
||||
if (productionAssemblySortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_30.getValue()) != 0 || StringUtils.isEmpty(productionAssemblySortContext.getAssemblySn())) return;
|
||||
MesProductionAssemblyUnique productionAssemblyUnique = new MesProductionAssemblyUnique();
|
||||
BeanUtils.copyProperties(productionAssemblySortContext, productionAssemblyUnique, MesPcnExtConstWords.ID);
|
||||
productionAssemblyUnique.setPid(productionAssemblySortContext.getId());
|
||||
productionAssemblyUnique.setOrganizeCode(reqBean.getOrganizeCode());
|
||||
ConvertBean.serviceModelInitialize(productionAssemblyUnique, reqBean.getUserInfo());
|
||||
productionAssemblyUniqueRepository.insert(productionAssemblyUnique);
|
||||
}
|
||||
|
||||
private void saveWorkOrderAssembly(StationRequestBean reqBean, MesProductionAssemblySortContext productionAssemblySortContext) {
|
||||
workOrderAssemblyRepository.updateByProperties(
|
||||
new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE},
|
||||
new Object[]{productionAssemblySortContext.getSourceId(), reqBean.getOrganizeCode()},
|
||||
new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.ASSEMBLY_STATUS, MesPcnExtConstWords.REMARK},
|
||||
new Object[]{reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), productionAssemblySortContext.getAssemblyStatus(),
|
||||
getRemark(reqBean.getWorkCellCode(), productionAssemblySortContext.getWorkCellCode(), productionAssemblySortContext.getWoaRemark())});
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.pojo.model;
|
||||
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class MesEmergencyLocationModel {
|
||||
@ApiParam(name = "工厂代码")
|
||||
private String organizeCode;
|
||||
|
||||
@ApiParam(name = "产线代码")
|
||||
private String workCenterCode;
|
||||
|
||||
@ApiParam(name = "库位")
|
||||
private String location;
|
||||
|
||||
@ApiParam(name = "加工单号")
|
||||
private String workOrderNo;
|
||||
|
||||
@ApiParam(name = "库位数")
|
||||
private Integer locationNumber;
|
||||
|
||||
@ApiParam(name = "提醒天数")
|
||||
private Integer remindDay;
|
||||
|
||||
@ApiParam("操作类型")
|
||||
private Integer type;
|
||||
|
||||
@ApiParam("操作人")
|
||||
private String userName;
|
||||
}
|
Loading…
Reference in New Issue