forked from I3-YF/i3plus-mes-yfai
裁片功能主数据表
parent
b69151daa1
commit
92b6b1be41
@ -0,0 +1,12 @@
|
||||
package cn.estsh.i3plus.ext.mes.api.base;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesCutScheme;
|
||||
|
||||
/**
|
||||
* @Description:
|
||||
* @CreateDate 2024/04/16
|
||||
* @Author mingliang.li
|
||||
*/
|
||||
public interface IMesCutSchemeService extends IBaseMesService<MesCutScheme> {
|
||||
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesCutScheme;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 裁片工单
|
||||
*/
|
||||
@Api("裁片工单信息")
|
||||
@RestController
|
||||
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesCutScheme")
|
||||
public class MesCutSchemeController extends BaseMesController<MesCutScheme>{
|
||||
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderCutService;
|
||||
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCut;
|
||||
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.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 裁片工单
|
||||
*/
|
||||
@Api("裁片工单信息")
|
||||
@RestController
|
||||
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesWorkOrderCut")
|
||||
public class MesWorkOrderCutController extends BaseMesController<MesWorkOrderCut>{
|
||||
|
||||
@Autowired
|
||||
private IMesWorkOrderCutService workOrderCutService;
|
||||
|
||||
@PostMapping(value = "/generate")
|
||||
@ApiOperation(value = "裁片工单生成", notes = "裁片工单生成")
|
||||
public ResultBean doGenerateCutWorkOrder(List<Long> workOrderIds, String cutCode, String remark) {
|
||||
try {
|
||||
|
||||
ValidatorBean.checkNotNull(workOrderIds, "工单不存在");
|
||||
ValidatorBean.checkNotNull(cutCode, "裁片方案不存在");
|
||||
|
||||
workOrderCutService.doGenerateCutWorkOrder(workOrderIds, cutCode, remark, AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName());
|
||||
return ResultBean.success("生成成功")
|
||||
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
|
||||
} catch (ImppBusiException busExcep) {
|
||||
return ResultBean.fail(busExcep);
|
||||
} catch (Exception e) {
|
||||
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping(value = "/release")
|
||||
@ApiOperation(value = "裁片工单发布", notes = "裁片工单发布")
|
||||
public ResultBean doReleaseCutWorkOrder(String cutWorkOrderNo) {
|
||||
try {
|
||||
|
||||
ValidatorBean.checkNotNull(cutWorkOrderNo, "裁片工单不存在");
|
||||
|
||||
workOrderCutService.doReleaseCutWorkOrder(cutWorkOrderNo, AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName());
|
||||
return ResultBean.success("发布成功")
|
||||
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
|
||||
} catch (ImppBusiException busExcep) {
|
||||
return ResultBean.fail(busExcep);
|
||||
} catch (Exception e) {
|
||||
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,216 @@
|
||||
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderCutService;
|
||||
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
|
||||
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
|
||||
import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService;
|
||||
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
||||
import cn.estsh.i3plus.platform.common.tool.TimeTool;
|
||||
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.*;
|
||||
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.*;
|
||||
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
||||
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;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class MesWorkOrderCutService extends BaseMesService<MesWorkOrderCut> implements IMesWorkOrderCutService {
|
||||
|
||||
@Autowired
|
||||
private ISyncFuncService syncFuncService;
|
||||
|
||||
@Autowired
|
||||
private MesWorkOrderCutRepository workOrderCutRepository;
|
||||
|
||||
@Autowired
|
||||
private MesWorkOrderRepository workOrderRepository;
|
||||
|
||||
@Autowired
|
||||
private MesCutSchemeFgRepository cutSchemeFgRepository;
|
||||
|
||||
@Autowired
|
||||
private MesCutSchemeRepository cutSchemeRepository;
|
||||
|
||||
@Autowired
|
||||
private MesCutSchemeMaterialRepository cutSchemeMaterialRepository;
|
||||
|
||||
@Autowired
|
||||
private MesWorkOrderCutMaterialRepository workOrderCutMaterialRepository;
|
||||
|
||||
@Autowired
|
||||
private MesWorkOrderCutDetailRepository workOrderCutDetailRepository;
|
||||
|
||||
protected void setPackQueryBean(MesWorkOrderCut bean, DdlPackBean packBean) {
|
||||
DdlPreparedPack.getStringLikerPack(bean.getCutWorkOrderNo(), MesExtConstWords.CUT_WORK_ORDER_NO, packBean);
|
||||
DdlPreparedPack.getStringLikerPack(bean.getCutCode(), MesExtConstWords.CUT_CODE, packBean);
|
||||
if (!StringUtils.isEmpty(bean.getCreateDateTimeStart()) || !StringUtils.isEmpty(bean.getCreateDateTimeEnd())) {
|
||||
DdlPreparedPack.timeBuilder(
|
||||
bean.getCreateDateTimeStart(),
|
||||
bean.getCreateDateTimeEnd(),
|
||||
MesExtConstWords.CREATE_DATE_TIME, packBean, true);
|
||||
}
|
||||
DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), MesExtConstWords.WORK_ORDER_STATUS, packBean);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doGenerateCutWorkOrder(List<Long> workOrderIds, String cutCode, String remark, String organizeCode, String userName) {
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getInPackList(workOrderIds, MesExtConstWords.ID, packBean);
|
||||
List<MesWorkOrder> workOrderList = workOrderRepository.findByHqlWhere(packBean);
|
||||
|
||||
if (CollectionUtils.isEmpty(workOrderList)) {
|
||||
MesException.throwMesBusiException("工单信息不存在");
|
||||
}
|
||||
|
||||
for (Long workOrderId : workOrderIds) {
|
||||
if (!workOrderList.contains(workOrderId)) {
|
||||
MesException.throwMesBusiException("工单信息ID【%s】不存在", workOrderId);
|
||||
}
|
||||
}
|
||||
|
||||
for (MesWorkOrder mesWorkOrder : workOrderList) {
|
||||
if (mesWorkOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) {
|
||||
MesException.throwMesBusiException("工单状态不为【%s】", MesExtEnumUtil.ORDER_STATUS.valueOfDescription(mesWorkOrder.getWorkOrderStatus()));
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, List<MesWorkOrder>> workOrderListMapByPartNo = workOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getPartNo));
|
||||
|
||||
List<MesCutSchemeMaterial> cutSchemeMaterialList = getCutSchemeMaterialList(cutCode, organizeCode);
|
||||
|
||||
if (CollectionUtils.isEmpty(cutSchemeMaterialList)) MesException.throwMesBusiException("裁片方案【%s】缺少原材料配置", cutCode);
|
||||
|
||||
List<MesCutSchemeFg> cutSchemeFgList = getCutSchemeFgList(cutCode, organizeCode);
|
||||
|
||||
if (CollectionUtils.isEmpty(cutSchemeFgList)) MesException.throwMesBusiException("裁片方案【%s】缺少裁片方案成品配置", cutCode);
|
||||
|
||||
List<String> partNoList = workOrderList.stream().map(MesWorkOrder::getPartNo).distinct().collect(Collectors.toList());
|
||||
List<String> fgPartNoList = cutSchemeFgList.stream().map(MesCutSchemeFg::getPartNo).distinct().collect(Collectors.toList());
|
||||
|
||||
partNoList.removeAll(fgPartNoList);
|
||||
|
||||
if (CollectionUtils.isEmpty(partNoList)) MesException.throwMesBusiException("物料【%s】未在裁片方案成品中维护", partNoList);
|
||||
|
||||
Map<String, Double> workOrderUnCompleteMap = new HashMap<>();
|
||||
List<MesWorkOrderCutDetail> workOrderCutDetailtList = new ArrayList<>();
|
||||
for (MesCutSchemeFg cutSchemeFg : cutSchemeFgList) {
|
||||
|
||||
List<MesWorkOrder> workOrders = workOrderListMapByPartNo.get(cutSchemeFg.getPartNo());
|
||||
|
||||
if (workOrders.size() > 1) {
|
||||
MesException.throwMesBusiException("零件号【%s】存在多个工单", cutSchemeFg.getPartNo());
|
||||
}
|
||||
|
||||
MesWorkOrder workOrder = workOrders.get(0);
|
||||
|
||||
if (cutSchemeFg.getQty().compareTo(workOrder.getUnCompleteQty()) < 0) {
|
||||
MesException.throwMesBusiException("零件号【%s】工单未完成数量不满足产成总数", cutSchemeFg.getPartNo());
|
||||
}
|
||||
|
||||
Double unCompleteQty = workOrder.getUnCompleteQty();
|
||||
|
||||
workOrderUnCompleteMap.put(workOrder.getWorkOrderNo(), unCompleteQty - cutSchemeFg.getQty());
|
||||
|
||||
MesWorkOrderCutDetail detail = new MesWorkOrderCutDetail();
|
||||
ConvertBean.serviceModelInitialize(detail, userName);
|
||||
detail.setOrganizeCode(organizeCode);
|
||||
detail.setPartNo(workOrder.getPartNo());
|
||||
detail.setPartName(workOrder.getPartName());
|
||||
detail.setWorkOrderNo(workOrder.getWorkOrderNo());
|
||||
detail.setRemark(cutSchemeFg.getRemark());
|
||||
detail.setQty(cutSchemeFg.getQty());
|
||||
workOrderCutDetailtList.add(detail);
|
||||
|
||||
}
|
||||
|
||||
MesCutScheme cutScheme = getCutScheme(cutCode, organizeCode);
|
||||
|
||||
MesWorkOrderCut workOrderCut = new MesWorkOrderCut();
|
||||
ConvertBean.serviceModelInitialize(workOrderCut, userName);
|
||||
workOrderCut.setCutCode(cutScheme.getCutCode());
|
||||
workOrderCut.setCutName(cutScheme.getCutName());
|
||||
workOrderCut.setWorkOrderStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == cutScheme.getIsAutoRelease() ? MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue() : MesExtEnumUtil.CUT_ORDER_STATUS.CREATE.getValue());
|
||||
workOrderCut.setRemark(remark);
|
||||
workOrderCut.setCutWorkOrderNo(doGererateSerialNo(cutScheme.getCutCode(), organizeCode, userName));
|
||||
workOrderCut.setOrganizeCode(organizeCode);
|
||||
|
||||
List<MesWorkOrderCutMaterial> workOrderCutMaterialList = new ArrayList<>();
|
||||
for (MesCutSchemeMaterial cutSchemeMaterial : cutSchemeMaterialList) {
|
||||
MesWorkOrderCutMaterial workOrderCutMaterial = new MesWorkOrderCutMaterial();
|
||||
BeanUtils.copyProperties(cutSchemeMaterial, workOrderCutMaterial, MesExtConstWords.ID);
|
||||
ConvertBean.serviceModelInitialize(workOrderCut, userName);
|
||||
workOrderCutMaterial.setOrganizeCode(organizeCode);
|
||||
workOrderCutMaterial.setCutWorkOrderNo(workOrderCut.getCutWorkOrderNo());
|
||||
workOrderCutMaterial.setSystemSyncStatus(CommonEnumUtil.FALSE);
|
||||
workOrderCutMaterialList.add(workOrderCutMaterial);
|
||||
}
|
||||
|
||||
workOrderCutMaterialRepository.saveAll(workOrderCutMaterialList);
|
||||
workOrderCutDetailRepository.saveAll(workOrderCutDetailtList);
|
||||
workOrderCutRepository.save(workOrderCut);
|
||||
|
||||
for (MesWorkOrder mesWorkOrder : workOrderList) {
|
||||
mesWorkOrder.setUnCompleteQty(workOrderUnCompleteMap.get(mesWorkOrder.getWorkOrderNo()));
|
||||
}
|
||||
|
||||
workOrderRepository.saveAll(workOrderList);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doReleaseCutWorkOrder(String cutWorkOrderNo, String organizeCode, String userName) {
|
||||
|
||||
if (StringUtils.isEmpty(cutWorkOrderNo)) MesException.throwMesBusiException("裁片工单为空");
|
||||
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getStringEqualPack(cutWorkOrderNo, MesExtConstWords.CUT_WORK_ORDER_NO, packBean);
|
||||
MesWorkOrderCut workOrderCutDb = workOrderCutRepository.getByProperty(packBean);
|
||||
|
||||
if (workOrderCutDb == null) MesException.throwMesBusiException("裁片工单不存在", cutWorkOrderNo);
|
||||
|
||||
if (workOrderCutDb.getWorkOrderStatus() != MesExtEnumUtil.CUT_ORDER_STATUS.CREATE.getValue()) MesException.throwMesBusiException("裁片工单【%】状态不为【%s】,当前状态为【%s】", cutWorkOrderNo, MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue(), MesExtEnumUtil.CUT_ORDER_STATUS.valueOfDescription(workOrderCutDb.getWorkOrderStatus()));
|
||||
|
||||
workOrderCutDb.setWorkOrderStatus(MesExtEnumUtil.CUT_ORDER_STATUS.RELEASED.getValue());
|
||||
|
||||
ConvertBean.serviceModelUpdate(workOrderCutDb, userName);
|
||||
|
||||
workOrderCutRepository.save(workOrderCutDb);
|
||||
}
|
||||
|
||||
private String doGererateSerialNo(String cutCode, String organizeCode, String userName) {
|
||||
return syncFuncService.syncSerialNo(
|
||||
new GenSerialNoModel(MesExtConstWords.CUT_WORK_ORDER_NO_FUL).dynamicRule(cutCode).year(TimeTool.pareDateToString(MesExtConstWords.DATE_FORMAT_YY, new Date())).organizeCode(organizeCode),
|
||||
userName, organizeCode, 1).getResultList().get(0).toString();
|
||||
}
|
||||
|
||||
private MesCutScheme getCutScheme(String cutCode, String organizeCode) {
|
||||
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getStringEqualPack(cutCode, MesExtConstWords.CUT_CODE, packBean);
|
||||
return cutSchemeRepository.getByProperty(packBean);
|
||||
|
||||
}
|
||||
|
||||
private List<MesCutSchemeFg> getCutSchemeFgList(String cutCode, String organizeCode) {
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getStringEqualPack(cutCode, MesExtConstWords.CUT_CODE, packBean);
|
||||
return cutSchemeFgRepository.findByHqlWhere(packBean);
|
||||
}
|
||||
|
||||
private List<MesCutSchemeMaterial> getCutSchemeMaterialList(String cutCode, String organizeCode) {
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getStringEqualPack(cutCode, MesExtConstWords.CUT_CODE, packBean);
|
||||
return cutSchemeMaterialRepository.findByHqlWhere(packBean);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue