|
|
|
@ -3,25 +3,43 @@ package org.springblade.desk.order.service.impl; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|
|
|
|
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
|
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
|
|
|
|
import org.springblade.common.exception.BusinessException; |
|
|
|
|
|
|
|
import org.springblade.common.utils.StringPrefixUtils; |
|
|
|
import org.springblade.core.mp.base.BaseServiceImpl; |
|
|
|
import org.springblade.core.mp.base.BaseServiceImpl; |
|
|
|
|
|
|
|
import org.springblade.core.tool.utils.BeanUtil; |
|
|
|
|
|
|
|
import org.springblade.core.tool.utils.DateUtil; |
|
|
|
import org.springblade.core.tool.utils.ObjectUtil; |
|
|
|
import org.springblade.core.tool.utils.ObjectUtil; |
|
|
|
|
|
|
|
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.service.IDsCraftService; |
|
|
|
|
|
|
|
import org.springblade.desk.dashboard.service.IDsPartService; |
|
|
|
import org.springblade.desk.order.constant.YieldOrderConst; |
|
|
|
import org.springblade.desk.order.constant.YieldOrderConst; |
|
|
|
import org.springblade.desk.order.entity.YieldOrder; |
|
|
|
import org.springblade.desk.order.entity.YieldOrder; |
|
|
|
import org.springblade.desk.order.mapper.YieldOrderMapper; |
|
|
|
import org.springblade.desk.order.mapper.YieldOrderMapper; |
|
|
|
import org.springblade.desk.order.service.IYieldOrderService; |
|
|
|
import org.springblade.desk.order.service.IYieldOrderService; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.text.MessageFormat; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.List; |
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
import java.util.Random; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 服务实现类 |
|
|
|
* 服务实现类 |
|
|
|
* |
|
|
|
* |
|
|
|
* @author BladeX |
|
|
|
* @author BladeX |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
|
|
|
|
@RequiredArgsConstructor |
|
|
|
@Service |
|
|
|
@Service |
|
|
|
public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, YieldOrder> implements IYieldOrderService { |
|
|
|
public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, YieldOrder> implements IYieldOrderService { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final IDsPartService dsPartService; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final IDsCraftService dsCraftService; |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public IPage<YieldOrder> selectPage(IPage<YieldOrder> page, YieldOrder entity) { |
|
|
|
public IPage<YieldOrder> selectPage(IPage<YieldOrder> page, YieldOrder entity) { |
|
|
|
List<YieldOrder> dataList = baseMapper.selectPage(page, entity); |
|
|
|
List<YieldOrder> dataList = baseMapper.selectPage(page, entity); |
|
|
|
@ -66,24 +84,299 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public Boolean verifyYieldOrderData(String yieldOrderId) { |
|
|
|
public Boolean verifyYieldOrderData(YieldOrder yieldOrder) { |
|
|
|
return null; |
|
|
|
// 1. 验证是否已有该流程卡号的数据, 若已有
|
|
|
|
|
|
|
|
LambdaQueryWrapper<YieldOrder> wrapper = Wrappers.lambdaQuery(YieldOrder.class) |
|
|
|
|
|
|
|
.eq(YieldOrder::getYoCode, yieldOrder.getYoCode()) |
|
|
|
|
|
|
|
.ne(YieldOrder::getId, yieldOrder.getId()); |
|
|
|
|
|
|
|
YieldOrder yieldOrderCheck = baseMapper.selectOne(wrapper); |
|
|
|
|
|
|
|
if (ObjectUtil.isNotEmpty(yieldOrderCheck)) { |
|
|
|
|
|
|
|
yieldOrder.setValidationResult(YieldOrderConst.VALIDATION_RESULT_LESS_DATA); |
|
|
|
|
|
|
|
yieldOrder.setValidationTime(DateUtil.now()); |
|
|
|
|
|
|
|
yieldOrder.setValidationMomo("已存在该流程卡号的数据"); |
|
|
|
|
|
|
|
this.updateById(yieldOrder); |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 2. 当生产订单类型为:表处理,壳体,插针订单,当镀种为空或面积为0时,不得自动分派并提示
|
|
|
|
|
|
|
|
if (YieldOrderConst.YIELD_TYPE_1.equals(yieldOrder.getYieldType()) || YieldOrderConst.YIELD_TYPE_4.equals(yieldOrder.getYieldType()) || YieldOrderConst.YIELD_TYPE_5.equals(yieldOrder.getYieldType())) { |
|
|
|
|
|
|
|
if (StringUtils.isBlank(yieldOrder.getPlate()) || yieldOrder.getYpArea() == 0) { |
|
|
|
|
|
|
|
yieldOrder.setValidationResult(YieldOrderConst.VALIDATION_RESULT_LESS_DATA); |
|
|
|
|
|
|
|
yieldOrder.setValidationTime(DateUtil.now()); |
|
|
|
|
|
|
|
yieldOrder.setValidationMomo("生产订单中镀种或面积为空,请维护基础数据"); |
|
|
|
|
|
|
|
this.updateById(yieldOrder); |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 3. 玻璃饼订单工艺路线包含外购不再自动分派,直接关闭订单
|
|
|
|
|
|
|
|
if (YieldOrderConst.YIELD_TYPE_3.equals(yieldOrder.getYieldType()) && yieldOrder.getPrimaryCraft().contains(YieldOrderConst.PRIMARY_CRAFT_WG)) { |
|
|
|
|
|
|
|
yieldOrder.setStatus(YieldOrderConst.STATUS_CLOSED); |
|
|
|
|
|
|
|
yieldOrder.setValidationTime(DateUtil.now()); |
|
|
|
|
|
|
|
yieldOrder.setValidationMomo("玻璃饼订单工艺路线包含外购,关闭订单无需自动分派"); |
|
|
|
|
|
|
|
this.updateById(yieldOrder); |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 4. 如果是烧结订单并且不是返工单据,则需要验证子件清单是否存在,存在跳过,不存在则新增
|
|
|
|
|
|
|
|
if (YieldOrderConst.YIELD_TYPE_2.equals(yieldOrder.getYieldType()) && StringUtils.isBlank(yieldOrder.getReworkCode())) { |
|
|
|
|
|
|
|
//验证订单是否存在当前B号,如果不存在则不能下发
|
|
|
|
|
|
|
|
if (StringUtils.isBlank(yieldOrder.getRoamNo())) { |
|
|
|
|
|
|
|
yieldOrder.setValidationResult(YieldOrderConst.VALIDATION_RESULT_LESS_DATA); |
|
|
|
|
|
|
|
yieldOrder.setValidationTime(DateUtil.now()); |
|
|
|
|
|
|
|
yieldOrder.setValidationMomo("订单不存在B号,请手动匹配B号!"); |
|
|
|
|
|
|
|
this.updateById(yieldOrder); |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String roamNoText = dsPartService.findNameByRoamNo(yieldOrder.getPartCode(), yieldOrder.getRoamNo()); |
|
|
|
|
|
|
|
if (StringUtils.isBlank(roamNoText)) { |
|
|
|
|
|
|
|
yieldOrder.setValidationResult(YieldOrderConst.VALIDATION_RESULT_LESS_DATA); |
|
|
|
|
|
|
|
yieldOrder.setValidationTime(DateUtil.now()); |
|
|
|
|
|
|
|
yieldOrder.setValidationMomo("未找到ERP一级B号路线,请核查!"); |
|
|
|
|
|
|
|
this.updateById(yieldOrder); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// 验证烧结订单的b号描述,如果包含封接字样则验证子件,不包含则不验证
|
|
|
|
|
|
|
|
if (roamNoText.contains(YieldOrderConst.ROAMNO_TEXT_FJ)) { |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
this.saveSubYieldOrder(yieldOrder, Boolean.FALSE, yieldOrder.getReceiveUser()); |
|
|
|
|
|
|
|
} catch (BusinessException e) { |
|
|
|
|
|
|
|
yieldOrder.setValidationResult(YieldOrderConst.VALIDATION_RESULT_LESS_DATA); |
|
|
|
|
|
|
|
yieldOrder.setValidationTime(DateUtil.now()); |
|
|
|
|
|
|
|
yieldOrder.setValidationMomo(e.getErrorMessage()); |
|
|
|
|
|
|
|
this.updateById(yieldOrder); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//TODO 急件维护标识厂内
|
|
|
|
|
|
|
|
// pjAutomaticDispatchService.urgentUpholdOrder(yieldOrder);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public Boolean verifyYieldOrderCraft(String yieldOrderId) { |
|
|
|
public Boolean verifyYieldOrderCraft(YieldOrder yieldOrder) { |
|
|
|
|
|
|
|
//TODO 匹配工艺
|
|
|
|
|
|
|
|
if (StringUtils.isBlank(yieldOrder.getReworkCode())) { |
|
|
|
|
|
|
|
// pjYieldCraftService.renewYieldCraft(yieldOrder);
|
|
|
|
|
|
|
|
} |
|
|
|
return null; |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public Boolean verifyYieldOrderResource(String yieldOrderId) { |
|
|
|
public Boolean verifyYieldOrderResource(YieldOrder yieldOrder) { |
|
|
|
return null; |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public Boolean verifyYieldOrderDelivery(String yieldOrderId) { |
|
|
|
public Boolean verifyYieldOrderDelivery(YieldOrder yieldOrder) { |
|
|
|
|
|
|
|
// 根据工艺, 计算订单的额定加工时长
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 交期时间-当前时间, 与 额定加工时长对比, 判断是否有超期风险
|
|
|
|
return null; |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public void saveSubYieldOrder(YieldOrder yieldOrder, Boolean isManual, Long receiveUser) throws BusinessException { |
|
|
|
|
|
|
|
// 验证是否存在玻璃饼子件信息
|
|
|
|
|
|
|
|
this.checkSub(yieldOrder.getPartCode(), DsPartConst.SIN_TER_TYPE_BLB, "玻璃饼"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//查询所有的烧结子件清单
|
|
|
|
|
|
|
|
List<DsPartEntity> subList = new ArrayList<>(); |
|
|
|
|
|
|
|
subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConst.SIN_TER_TYPE_SMM, "石墨模")); |
|
|
|
|
|
|
|
subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConst.SIN_TER_TYPE_KT, "壳体")); |
|
|
|
|
|
|
|
subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConst.SIN_TER_TYPE_CZ, "插针")); |
|
|
|
|
|
|
|
if (subList.size() == 0) { |
|
|
|
|
|
|
|
throw new BusinessException("未找到烧结前处理子件信息,请联系工艺编制!"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//获取已经产生的烧结子件清单
|
|
|
|
|
|
|
|
List<YieldOrder> subYieldOrderList = this.listByFatherYoId(yieldOrder.getFatherYoId()); |
|
|
|
|
|
|
|
List<String> keyLst = new ArrayList<>(); |
|
|
|
|
|
|
|
List<DsPartEntity> returnList = new ArrayList<>(); |
|
|
|
|
|
|
|
if (subYieldOrderList.size() > 0) { |
|
|
|
|
|
|
|
//组装已生成的子件号和父级订单id
|
|
|
|
|
|
|
|
for (YieldOrder yo : subYieldOrderList) { |
|
|
|
|
|
|
|
keyLst.add(yieldOrder.getId() + "_" + yo.getPartCode()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//剔除已经生成生成订单的子件
|
|
|
|
|
|
|
|
for (DsPartEntity sub : subList) { |
|
|
|
|
|
|
|
if (!keyLst.contains(yieldOrder.getId() + "_" + sub.getPartCode())) { |
|
|
|
|
|
|
|
returnList.add(sub); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
returnList.addAll(subList); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (returnList != null && returnList.size() > 0) { |
|
|
|
|
|
|
|
this.createSubYieldOrder(yieldOrder, returnList, isManual, receiveUser); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public List<YieldOrder> listByFatherYoId(Long fatherYoId) { |
|
|
|
|
|
|
|
LambdaQueryWrapper<YieldOrder> wrapper = Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getFatherYoId, fatherYoId); |
|
|
|
|
|
|
|
List<YieldOrder> subYieldOrderList = this.list(wrapper); |
|
|
|
|
|
|
|
return subYieldOrderList; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* 验证零件子件信息 |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* @param partCode |
|
|
|
|
|
|
|
* @param sinTerType |
|
|
|
|
|
|
|
* @param text |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
private List<DsPartEntity> checkSub(String partCode, Integer sinTerType, String text) throws BusinessException { |
|
|
|
|
|
|
|
// 按零件号查询子件
|
|
|
|
|
|
|
|
List<DsPartEntity> lst = dsPartService.selectDsPartByPatCode(partCode, sinTerType); |
|
|
|
|
|
|
|
if (lst == null || lst.size() == 0) { |
|
|
|
|
|
|
|
String errMsg = MessageFormat.format("未找到{0}子件信息!", text); |
|
|
|
|
|
|
|
throw new BusinessException(errMsg); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return lst; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* 验证并创建子件 |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* @param yieldOrder |
|
|
|
|
|
|
|
* @param subList |
|
|
|
|
|
|
|
* @param receiveUser |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
private void createSubYieldOrder(YieldOrder yieldOrder, List<DsPartEntity> subList, Boolean isManual, Long receiveUser) throws BusinessException { |
|
|
|
|
|
|
|
List<DsCraftEntity> dsCraftList; |
|
|
|
|
|
|
|
for (DsPartEntity dsPartSub : subList) { |
|
|
|
|
|
|
|
//如果子件号为空或者是无,则跳过
|
|
|
|
|
|
|
|
if (StringUtils.isBlank(dsPartSub.getPartCode()) || dsPartSub.getPartCode().equals("无")) { |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DsPartEntity dsPart = dsPartService.selectDsPartByPatCode(dsPartSub.getPartCode()); |
|
|
|
|
|
|
|
//验证子件是否存在对应零件,不存在则提示异常
|
|
|
|
|
|
|
|
if (dsPart == null) { |
|
|
|
|
|
|
|
String errMsg = MessageFormat.format("子件{0}未编制!", dsPartSub.getPartCode()); |
|
|
|
|
|
|
|
throw new BusinessException(errMsg); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Integer yieldType = YieldOrderConst.YIELD_TYPE_6; |
|
|
|
|
|
|
|
if (DsPartConst.SIN_TER_TYPE_KT.equals(dsPartSub.getSinTerType())) { |
|
|
|
|
|
|
|
yieldType = YieldOrderConst.YIELD_TYPE_4; |
|
|
|
|
|
|
|
} else if (DsPartConst.SIN_TER_TYPE_CZ.equals(dsPartSub.getSinTerType())) { |
|
|
|
|
|
|
|
yieldType = YieldOrderConst.YIELD_TYPE_5; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//非石墨模子件,面积不允许为空
|
|
|
|
|
|
|
|
if (!yieldType.equals(YieldOrderConst.YIELD_TYPE_6) && dsPart.getArea() == null) { |
|
|
|
|
|
|
|
String errMsg = "非石墨模子件面积为空无法创建生产订单!"; |
|
|
|
|
|
|
|
throw new BusinessException(errMsg); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//验证子件是否存在二级工艺路线
|
|
|
|
|
|
|
|
dsCraftList = dsCraftService.listByPartId(dsPart.getId()); |
|
|
|
|
|
|
|
if (dsCraftList == null || dsCraftList.size() == 0) { |
|
|
|
|
|
|
|
String errMsg = MessageFormat.format("子件{0}未编制二级工艺!", dsPartSub.getPartCode()); |
|
|
|
|
|
|
|
throw new BusinessException(errMsg); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//获取金属件子件B号,如果未获取到,提示异常
|
|
|
|
|
|
|
|
String roamNo = null; |
|
|
|
|
|
|
|
if (DsPartConst.SIN_TER_TYPE_KT.equals(dsPartSub.getSinTerType()) || DsPartConst.SIN_TER_TYPE_CZ.equals(dsPartSub.getSinTerType())) { |
|
|
|
|
|
|
|
roamNo = dsPartService.findRoamNoByPartCode(dsPartSub.getPartCode()); |
|
|
|
|
|
|
|
if (StringUtils.isBlank(roamNo)) { |
|
|
|
|
|
|
|
String errMsg = MessageFormat.format("子件{0}未找到对应B号,请在ERP核查子件一级路线!", dsPartSub.getPartCode()); |
|
|
|
|
|
|
|
throw new BusinessException(errMsg); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
YieldOrder subYield = BeanUtil.copy(yieldOrder, YieldOrder.class); |
|
|
|
|
|
|
|
subYield.setFatherYoId(yieldOrder.getId()); |
|
|
|
|
|
|
|
subYield.setYoCode(nextYieldOrderCode(yieldOrder.getYoCode())); |
|
|
|
|
|
|
|
subYield.setPartCode(dsPart.getPartCode()); |
|
|
|
|
|
|
|
subYield.setProductType(dsPart.getProductType()); |
|
|
|
|
|
|
|
subYield.setPartName(dsPart.getPartName()); |
|
|
|
|
|
|
|
subYield.setPlate(dsPart.getPlate()); |
|
|
|
|
|
|
|
subYield.setUseDept("热表分厂"); |
|
|
|
|
|
|
|
subYield.setYpArea(dsPart.getArea() == null ? 0d : dsPart.getArea()); |
|
|
|
|
|
|
|
subYield.setDemandDate(DateUtil.minusDays(DateUtil.now(), 2)); |
|
|
|
|
|
|
|
subYield.setReleaseDate(DateUtil.now()); |
|
|
|
|
|
|
|
subYield.setCardNo(nextCardNo()); |
|
|
|
|
|
|
|
subYield.setBatchNo(nextBatchNo()); |
|
|
|
|
|
|
|
subYield.setSiteWork(Boolean.TRUE); |
|
|
|
|
|
|
|
subYield.setYpQty(yieldOrder.getYpQty() * dsPartSub.getQuota().intValue()); |
|
|
|
|
|
|
|
subYield.setPrimaryCraft(dsPart.getCraftWay()); |
|
|
|
|
|
|
|
subYield.setRoamNo(roamNo); |
|
|
|
|
|
|
|
subYield.setStatus(YieldOrderConst.STATUS_NORMAL); |
|
|
|
|
|
|
|
subYield.setYieldType(yieldType); |
|
|
|
|
|
|
|
subYield.setEntrustDept("热表分厂"); |
|
|
|
|
|
|
|
subYield.setBusinessType(-1); |
|
|
|
|
|
|
|
// 父件订单中无接收人信息时, 以当前人为接收人
|
|
|
|
|
|
|
|
if (yieldOrder.getReceiveUser() == null) { |
|
|
|
|
|
|
|
subYield.setReceiveUser(receiveUser); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (yieldOrder.getReceiveTime() == null) { |
|
|
|
|
|
|
|
subYield.setReceiveTime(DateUtil.now()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
subYield.setProduceBool(Boolean.FALSE); |
|
|
|
|
|
|
|
if (isManual) { |
|
|
|
|
|
|
|
subYield.setManualIncrease(Boolean.TRUE); |
|
|
|
|
|
|
|
subYield.setMemo("手动创建子件"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
this.save(subYield); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private String nextYieldOrderCode(String yoCode) { |
|
|
|
|
|
|
|
// 自增总长度
|
|
|
|
|
|
|
|
int len = 2; |
|
|
|
|
|
|
|
// 自增值
|
|
|
|
|
|
|
|
Integer num = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 编码模式
|
|
|
|
|
|
|
|
String codePattern = yoCode.toString() + "-B"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 当前模式下最大编码
|
|
|
|
|
|
|
|
LambdaQueryWrapper<YieldOrder> wrapper = Wrappers.lambdaQuery(YieldOrder.class).likeRight(YieldOrder::getYoCode, codePattern).orderBy(true, false, YieldOrder::getYoCode); |
|
|
|
|
|
|
|
YieldOrder yieldOrder = baseMapper.selectOne(wrapper); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (yieldOrder != null) { |
|
|
|
|
|
|
|
num = Integer.parseInt(yieldOrder.getYoCode().substring(codePattern.length())); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
num++; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 下个编码
|
|
|
|
|
|
|
|
return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private String nextCardNo() { |
|
|
|
|
|
|
|
// 自增总长度
|
|
|
|
|
|
|
|
int len = 5; |
|
|
|
|
|
|
|
String codePattern = "R" + DateUtil.today() + StringPrefixUtils.prefix(String.valueOf(new Random().nextInt(10000)), "0", len); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LambdaQueryWrapper<YieldOrder> wrapper = Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getCardNo, codePattern); |
|
|
|
|
|
|
|
YieldOrder yieldOrder = baseMapper.selectOne(wrapper); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (yieldOrder != null && yieldOrder.getId() != null) { |
|
|
|
|
|
|
|
return this.nextCardNo(); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return codePattern; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private String nextBatchNo() { |
|
|
|
|
|
|
|
// 自增总长度
|
|
|
|
|
|
|
|
int len = 3; |
|
|
|
|
|
|
|
// 自增值
|
|
|
|
|
|
|
|
int num = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 编码模式
|
|
|
|
|
|
|
|
String codePattern = "R" + DateUtil.today(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LambdaQueryWrapper<YieldOrder> wrapper = Wrappers.lambdaQuery(YieldOrder.class).likeRight(YieldOrder::getBatchNo, codePattern).orderBy(true, false, YieldOrder::getYoCode); |
|
|
|
|
|
|
|
YieldOrder yieldOrder = baseMapper.selectOne(wrapper); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (yieldOrder != null) { |
|
|
|
|
|
|
|
num = Integer.parseInt(yieldOrder.getBatchNo().substring(codePattern.length(), codePattern.length() + len)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
num++; |
|
|
|
|
|
|
|
// 下个编码
|
|
|
|
|
|
|
|
return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|