|
|
|
|
@ -24,6 +24,7 @@ import org.springblade.desk.dashboard.constant.DsPartConst; |
|
|
|
|
import org.springblade.desk.dashboard.pojo.entity.DsCraftEntity; |
|
|
|
|
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; |
|
|
|
|
import org.springblade.desk.dashboard.pojo.entity.DsProcessEntity; |
|
|
|
|
import org.springblade.desk.dashboard.pojo.enums.DsCraftEnum; |
|
|
|
|
import org.springblade.desk.dashboard.service.IDsCraftService; |
|
|
|
|
import org.springblade.desk.dashboard.service.IDsPartService; |
|
|
|
|
import org.springblade.desk.dashboard.service.IDsProcessService; |
|
|
|
|
@ -41,10 +42,7 @@ import org.springframework.stereotype.Service; |
|
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
|
|
import java.text.MessageFormat; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Date; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Random; |
|
|
|
|
import java.util.*; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 服务实现类 |
|
|
|
|
@ -120,49 +118,46 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie |
|
|
|
|
@Override |
|
|
|
|
public String dataVerify(List<Long> ids) { |
|
|
|
|
// 先根据ID查询订单列表
|
|
|
|
|
LambdaQueryWrapper<YieldOrder> queryWrapper = Wrappers.lambdaQuery(YieldOrder.class) |
|
|
|
|
.eq(YieldOrder::getIsDeleted, CommonConstant.DELETE_FALSE) |
|
|
|
|
.in(YieldOrder::getId, ids); |
|
|
|
|
LambdaQueryWrapper<YieldOrder> queryWrapper = Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getIsDeleted, CommonConstant.DELETE_FALSE).in(YieldOrder::getId, ids); |
|
|
|
|
List<YieldOrder> yieldOrderList = baseMapper.selectList(queryWrapper); |
|
|
|
|
|
|
|
|
|
// 遍历订单列表,根据异常钻状态,判断调用的校验方法
|
|
|
|
|
// for (YieldOrder yieldOrder : yieldOrderList) {
|
|
|
|
|
// if (YieldOrderEnum.VALIDATION_NO.getCode() == yieldOrder.getValidationResult()
|
|
|
|
|
// || YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode() == yieldOrder.getValidationResult()) {
|
|
|
|
|
// // 进行数据校验,验证不通过,不进行后续验证,直接返回;
|
|
|
|
|
// if (!this.verifyYieldOrderData(yieldOrder)) {
|
|
|
|
|
// continue;
|
|
|
|
|
// }
|
|
|
|
|
// // 进行工艺校验,验证不通过,不进行后续验证,直接返回;
|
|
|
|
|
// if (!this.verifyYieldOrderCraft(yieldOrder)) {
|
|
|
|
|
// continue;
|
|
|
|
|
// }
|
|
|
|
|
// // 进行资源校验,验证不通过,不进行后续验证,直接返回;
|
|
|
|
|
// if (!this.verifyYieldOrderResource(yieldOrder)) {
|
|
|
|
|
// continue;
|
|
|
|
|
// }
|
|
|
|
|
// // 最后进行超期校验
|
|
|
|
|
// this.verifyYieldOrderDelivery(yieldOrder);
|
|
|
|
|
// } else if (YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode() == yieldOrder.getValidationResult()) {
|
|
|
|
|
// // 进行工艺校验,验证不通过,不进行后续验证,直接返回;
|
|
|
|
|
// if (!this.verifyYieldOrderCraft(yieldOrder)) {
|
|
|
|
|
// continue;
|
|
|
|
|
// }
|
|
|
|
|
// // 进行资源校验,验证不通过,不进行后续验证,直接返回;
|
|
|
|
|
// if (!this.verifyYieldOrderResource(yieldOrder)) {
|
|
|
|
|
// continue;
|
|
|
|
|
// }
|
|
|
|
|
// // 最后进行超期校验
|
|
|
|
|
// this.verifyYieldOrderDelivery(yieldOrder);
|
|
|
|
|
// } else if (YieldOrderEnum.VALIDATION_RESULT_LESS_RESOURCE.getCode() == yieldOrder.getValidationResult()) {
|
|
|
|
|
// // 进行资源校验,验证不通过,不进行后续验证,直接返回;
|
|
|
|
|
// if (!this.verifyYieldOrderResource(yieldOrder)) {
|
|
|
|
|
// continue;
|
|
|
|
|
// }
|
|
|
|
|
// // 最后进行超期校验
|
|
|
|
|
// this.verifyYieldOrderDelivery(yieldOrder);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
for (YieldOrder yieldOrder : yieldOrderList) { |
|
|
|
|
if (YieldOrderEnum.VALIDATION_NO.getCode() == yieldOrder.getValidationResult() || YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode() == yieldOrder.getValidationResult()) { |
|
|
|
|
// 进行数据校验,验证不通过,不进行后续验证,直接返回;
|
|
|
|
|
if (!this.verifyYieldOrderData(yieldOrder)) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
// 进行工艺校验,验证不通过,不进行后续验证,直接返回;
|
|
|
|
|
if (!this.verifyYieldOrderCraft(yieldOrder)) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
// 进行资源校验,验证不通过,不进行后续验证,直接返回;
|
|
|
|
|
if (!this.verifyYieldOrderResource(yieldOrder)) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
// 最后进行超期校验
|
|
|
|
|
this.verifyYieldOrderDelivery(yieldOrder); |
|
|
|
|
} else if (YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode() == yieldOrder.getValidationResult()) { |
|
|
|
|
// 进行工艺校验,验证不通过,不进行后续验证,直接返回;
|
|
|
|
|
if (!this.verifyYieldOrderCraft(yieldOrder)) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
// 进行资源校验,验证不通过,不进行后续验证,直接返回;
|
|
|
|
|
if (!this.verifyYieldOrderResource(yieldOrder)) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
// 最后进行超期校验
|
|
|
|
|
this.verifyYieldOrderDelivery(yieldOrder); |
|
|
|
|
} else if (YieldOrderEnum.VALIDATION_RESULT_LESS_RESOURCE.getCode() == yieldOrder.getValidationResult()) { |
|
|
|
|
// 进行资源校验,验证不通过,不进行后续验证,直接返回;
|
|
|
|
|
if (!this.verifyYieldOrderResource(yieldOrder)) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
// 最后进行超期校验
|
|
|
|
|
this.verifyYieldOrderDelivery(yieldOrder); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return "校验成功"; |
|
|
|
|
} |
|
|
|
|
@ -221,7 +216,9 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 2. 当生产订单类型为:表处理,壳体,插针订单,当镀种为空或面积为0时,不得自动分派并提示
|
|
|
|
|
if (YieldOrderEnum.YIELD_TYPE_1.equals(yieldOrder.getYieldType()) || YieldOrderEnum.YIELD_TYPE_4.equals(yieldOrder.getYieldType()) || YieldOrderEnum.YIELD_TYPE_5.equals(yieldOrder.getYieldType())) { |
|
|
|
|
if (YieldOrderEnum.YIELD_TYPE_1.equals(yieldOrder.getYieldType()) |
|
|
|
|
|| YieldOrderEnum.YIELD_TYPE_4.equals(yieldOrder.getYieldType()) |
|
|
|
|
|| YieldOrderEnum.YIELD_TYPE_5.equals(yieldOrder.getYieldType())) { |
|
|
|
|
if (StringUtils.isBlank(yieldOrder.getPlate()) || yieldOrder.getYpArea() == 0) { |
|
|
|
|
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode()); |
|
|
|
|
yieldOrder.setValidationTime(DateUtil.now()); |
|
|
|
|
@ -232,7 +229,8 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 3. 玻璃饼订单工艺路线包含外购不再自动分派,直接关闭订单
|
|
|
|
|
if (YieldOrderEnum.YIELD_TYPE_3.equals(yieldOrder.getYieldType()) && yieldOrder.getPrimaryCraft().contains(YieldOrderConst.PRIMARY_CRAFT_WG)) { |
|
|
|
|
if (YieldOrderEnum.YIELD_TYPE_3.equals(yieldOrder.getYieldType()) |
|
|
|
|
&& yieldOrder.getPrimaryCraft().contains(YieldOrderConst.PRIMARY_CRAFT_WG)) { |
|
|
|
|
yieldOrder.setStatus(YieldOrderEnum.STATUS_CLOSED.getCode()); |
|
|
|
|
yieldOrder.setValidationTime(DateUtil.now()); |
|
|
|
|
yieldOrder.setValidationMomo("玻璃饼订单工艺路线包含外购,关闭订单无需自动分派"); |
|
|
|
|
@ -241,7 +239,8 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 4. 如果是烧结订单并且不是返工单据,则需要验证子件清单是否存在,存在跳过,不存在则新增
|
|
|
|
|
if (YieldOrderEnum.YIELD_TYPE_2.equals(yieldOrder.getYieldType()) && StringUtils.isBlank(yieldOrder.getReworkCode())) { |
|
|
|
|
if (YieldOrderEnum.YIELD_TYPE_2.equals(yieldOrder.getYieldType()) |
|
|
|
|
&& StringUtils.isBlank(yieldOrder.getReworkCode())) { |
|
|
|
|
//验证订单是否存在当前B号,如果不存在则不能下发
|
|
|
|
|
if (StringUtils.isBlank(yieldOrder.getRoamNo())) { |
|
|
|
|
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode()); |
|
|
|
|
@ -271,7 +270,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//TODO 急件维护标识厂内
|
|
|
|
|
//TODO 急件维护标识厂内, 急件维护功能未添加
|
|
|
|
|
// pjAutomaticDispatchService.urgentUpholdOrder(yieldOrder);
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
@ -280,33 +279,33 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie |
|
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
|
@Override |
|
|
|
|
public Boolean verifyYieldOrderCraft(YieldOrder yieldOrder) { |
|
|
|
|
//TODO 匹配工艺
|
|
|
|
|
if (StringUtils.isNotBlank(yieldOrder.getReworkCode())) { |
|
|
|
|
// 返工订单不进行校验
|
|
|
|
|
if (StringUtils.isBlank(yieldOrder.getReworkCode())) { |
|
|
|
|
return Boolean.TRUE; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
String roamNo = yieldOrder.getRoamNo(); |
|
|
|
|
String productIdent = yieldOrder.getProductIdent(); |
|
|
|
|
String prodIdent = yieldOrder.getProductIdent(); |
|
|
|
|
String partCode = yieldOrder.getPartCode(); |
|
|
|
|
|
|
|
|
|
DsCraftEntity craft = null; |
|
|
|
|
//石墨模零件不考虑B号匹配因素
|
|
|
|
|
// if (YieldOrderEnum.YIELD_TYPE_6.equals(yieldOrder.getYieldType())) {
|
|
|
|
|
// craft = dsCraftService.getCraft(partCode, null, prodIdent, DsCraft.RANK_TWO);
|
|
|
|
|
// } else {
|
|
|
|
|
// Short rank = judgeRank(yieldOrder);
|
|
|
|
|
// if (rank == null) {
|
|
|
|
|
// craft = dsCraftService.getCraft(partCode, roamNo, prodIdent, DsCraft.RANK_TWO);
|
|
|
|
|
// if (craft == null) {
|
|
|
|
|
// craft = dsCraftService.getCraft(partCode, roamNo, prodIdent, DsCraft.RANK_ONE);
|
|
|
|
|
// }
|
|
|
|
|
// if (craft == null) {
|
|
|
|
|
// craft = dsCraftService.getCraft(partCode, roamNo, prodIdent, DsCraft.RANK_THREE);
|
|
|
|
|
// }
|
|
|
|
|
// } else {
|
|
|
|
|
// craft = dsCraftService.getCraft(partCode, roamNo, prodIdent, rank);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// 石墨模零件不考虑B号匹配因素
|
|
|
|
|
if (YieldOrderEnum.YIELD_TYPE_6.equals(yieldOrder.getYieldType())) { |
|
|
|
|
craft = dsCraftService.getCraft(partCode, null, prodIdent, DsCraftEnum.RANK_TWO.getCode(), null); |
|
|
|
|
} else { |
|
|
|
|
Integer rank = judgeRank(yieldOrder); |
|
|
|
|
if (rank == null) { |
|
|
|
|
craft = dsCraftService.getCraft(partCode, roamNo, prodIdent, DsCraftEnum.RANK_TWO.getCode(), null); |
|
|
|
|
if (craft == null) { |
|
|
|
|
craft = dsCraftService.getCraft(partCode, roamNo, prodIdent, DsCraftEnum.RANK_ONE.getCode(), null); |
|
|
|
|
} |
|
|
|
|
if (craft == null) { |
|
|
|
|
craft = dsCraftService.getCraft(partCode, roamNo, prodIdent, DsCraftEnum.RANK_THREE.getCode(), null); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
craft = dsCraftService.getCraft(partCode, roamNo, prodIdent, rank, null); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (ObjectUtil.isEmpty(craft)) { |
|
|
|
|
String errMsg = StringUtils.isNotBlank(roamNo) ? "订单流转单号匹配失败,请联系工艺员!" : "未找到B号工艺,请核实订单是否存在B号!"; |
|
|
|
|
@ -372,7 +371,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Boolean verifyYieldOrderResource(YieldOrder yieldOrder) { |
|
|
|
|
return null; |
|
|
|
|
return Boolean.TRUE; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
@ -380,7 +379,7 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie |
|
|
|
|
// 根据工艺, 计算订单的额定加工时长
|
|
|
|
|
|
|
|
|
|
// 交期时间-当前时间, 与 额定加工时长对比, 判断是否有超期风险
|
|
|
|
|
return null; |
|
|
|
|
return Boolean.TRUE; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
@ -864,4 +863,45 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie |
|
|
|
|
// 下个编码
|
|
|
|
|
return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 判定工艺级别 |
|
|
|
|
* |
|
|
|
|
* @param yieldOrder |
|
|
|
|
* @return |
|
|
|
|
* @throws BusinessException |
|
|
|
|
*/ |
|
|
|
|
private Integer judgeRank(YieldOrder yieldOrder) { |
|
|
|
|
DsPartEntity part = dsPartService.selectDsPartByPatCodeAndVersion(yieldOrder.getPartCode(), null); |
|
|
|
|
String configNo = part.getConfigCode(); |
|
|
|
|
String prodIdent = yieldOrder.getProductIdent(); |
|
|
|
|
// TODO 工序资质未维护
|
|
|
|
|
// BsProcedureQua qua = bsProcedureQuaService.getByPqCode(prodIdent);
|
|
|
|
|
// if (qua == null) {
|
|
|
|
|
// throw new BusinessException("basic.not.prodIdent", new String[]{prodIdent});
|
|
|
|
|
// }
|
|
|
|
|
// 判定是否为镀金零件
|
|
|
|
|
if (CommonConstant.BOOLEAN_TRUE.equals(part.getGoldMark())) { |
|
|
|
|
//zxh 20251015 针对局部镀厚金零件,工作订单备注中包含大小写的HTBY时,执行二级工艺
|
|
|
|
|
if (yieldOrder.getYpMemo() != null && yieldOrder.getYpMemo().toLowerCase(Locale.ROOT).contains("htby")) { |
|
|
|
|
return DsCraftEnum.RANK_TWO.getCode(); |
|
|
|
|
} |
|
|
|
|
// if (qua.getGoldMark()) {
|
|
|
|
|
// // 生产订单总面积大于20时取一级工艺
|
|
|
|
|
// if (yieldOrder.getYpArea() * yieldOrder.getYpQty() > 20) {
|
|
|
|
|
// return DsCraftEnum.RANK_ONE.getCode();
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
return DsCraftEnum.RANK_TWO.getCode(); |
|
|
|
|
} |
|
|
|
|
if ("E9".equals(configNo) || "E12".equals(configNo)) { |
|
|
|
|
//E9判定
|
|
|
|
|
if (yieldOrder.getBatchNo().contains("MP") || yieldOrder.getBatchNo().contains("mp")) { |
|
|
|
|
return DsCraftEnum.RANK_ONE.getCode(); |
|
|
|
|
} |
|
|
|
|
return DsCraftEnum.RANK_TWO.getCode(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|