1. 分派特殊工序处理(工序表:bs_process_set)

2. 异常订单-数据缺失:修改后调用合规校验接口
master
liuqingkun 3 weeks ago
parent f53d87c04f
commit 39fcd23178
  1. 5
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/constant/BizTypeConstant.java
  2. 31
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/pojo/entity/MesNotifyMessageEntity.java
  3. 11
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsTeamSetEntity.java
  4. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/IMesNotifyMessageService.java
  5. 16
      blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/impl/MesNotifyMessageServiceImpl.java
  6. 18
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsTeamSetService.java
  7. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsTeamSetServiceImpl.java
  8. 11
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/MoldDemandController.java
  9. 15
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/PlateGoodsApplyController.java
  10. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/controller/YieldOrderController.java
  11. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/mapper/YieldPlanMapper.xml
  12. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IMoldDemandService.java
  13. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java
  14. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldPlanService.java
  15. 50
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/MoldDemandServiceImpl.java
  16. 18
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderCraftServiceImpl.java
  17. 76
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  18. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldPlanServiceImpl.java
  19. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/IProReTemplateService.java
  20. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/ProReTemplateServiceImpl.java

@ -6,4 +6,9 @@ package org.springblade.desk.common.constant;
* @create 2026-02-26 14:40
*/
public interface BizTypeConstant {
/**
* 镀层物料添加量申报
*/
String GOODS_APPLY = "镀层物料添加量申报";
}

@ -1,34 +1,8 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.desk.common.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.*;
import org.springblade.core.mp.base.BaseEntity;
import java.io.Serial;
@ -39,6 +13,9 @@ import java.io.Serial;
* @since 2026-02-26
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("MES_NOTIFY_MESSAGE")
@Schema(description = "MesNotifyMessage对象")
@EqualsAndHashCode(callSuper = true)

@ -25,15 +25,14 @@
*/
package org.springblade.desk.dashboard.pojo.entity;
import lombok.Data;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableName;
import java.math.BigDecimal;
import java.util.Date;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.tenant.mp.TenantEntity;
import java.io.Serial;
import java.math.BigDecimal;
/**
* 班组设置表 实体类
@ -115,6 +114,6 @@ public class BsTeamSetEntity extends BaseEntity {
* 作业中心外键
*/
@Schema(description = "作业中心(外键)")
private BigDecimal wcId;
private Long wcId;
}

@ -55,4 +55,14 @@ public interface IMesNotifyMessageService extends BaseService<MesNotifyMessageEn
* @return
*/
boolean updateReadStatus(List<Long> ids);
/**
* 新增消息提醒
* @param bizType
* @param title
* @param content
* @param receiveUserId
* @return
*/
boolean saveMsg(String bizType, String title, String content, Long receiveUserId);
}

@ -31,7 +31,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springblade.desk.common.mapper.MesNotifyMessageMapper;
import org.springblade.desk.common.pojo.entity.MesNotifyMessageEntity;
import org.springblade.desk.common.pojo.vo.MesNotifyMessageVO;
@ -81,9 +80,20 @@ public class MesNotifyMessageServiceImpl extends BaseServiceImpl<MesNotifyMessag
@Override
public boolean updateReadStatus(List<Long> ids) {
this.update(new LambdaUpdateWrapper<MesNotifyMessageEntity>()
.in(MesNotifyMessageEntity::getId, ids)
.set(MesNotifyMessageEntity::getStatus, 1));
.in(MesNotifyMessageEntity::getId, ids)
.set(MesNotifyMessageEntity::getStatus, 1));
return true;
}
@Override
public boolean saveMsg(String bizType, String title, String content, Long receiveUserId) {
MesNotifyMessageEntity mesNotifyMessage = MesNotifyMessageEntity.builder()
.bizType(bizType)
.title(title)
.content(content)
.receiveUserId(receiveUserId)
.build();
return this.save(mesNotifyMessage);
}
}

@ -26,12 +26,13 @@
package org.springblade.desk.dashboard.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.dashboard.excel.BsTeamSetExcel;
import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity;
import org.springblade.desk.dashboard.pojo.vo.BsTeamSetEntityVO;
import org.springblade.desk.dashboard.pojo.vo.BsTeamSetVO;
import org.springblade.desk.dashboard.excel.BsTeamSetExcel;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import java.util.List;
/**
@ -69,8 +70,17 @@ public interface IBsTeamSetService extends BaseService<BsTeamSetEntity> {
/**
* 根据班组ID查询
*
* @param tsId
* @return
*/
BsTeamSetEntity selectBsTeamSetByTsId(Long tsId);
BsTeamSetEntity selectBsTeamSetByTsId(Long tsId);
/**
* 根据班组名称查询
*
* @param teamName
* @return
*/
BsTeamSetEntity selectByTeamName(String teamName);
}

@ -25,6 +25,7 @@
*/
package org.springblade.desk.dashboard.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity;
import org.springblade.desk.dashboard.pojo.vo.BsTeamSetEntityVO;
import org.springblade.desk.dashboard.pojo.vo.BsTeamSetVO;
@ -75,4 +76,9 @@ public class BsTeamSetServiceImpl extends BaseServiceImpl<BsTeamSetMapper, BsTea
return bsTeamSetMapper.selectById(tsId);
}
@Override
public BsTeamSetEntity selectByTeamName(String teamName) {
return bsTeamSetMapper.selectOne(Wrappers.lambdaQuery(BsTeamSetEntity.class).eq(BsTeamSetEntity::getTsName, teamName));
}
}

@ -64,6 +64,17 @@ public class MoldDemandController extends BladeController {
return R.data(vo);
}
/**
* 根据订单ID生成模具烧结需求
*/
@GetMapping("/createByOderId")
@Operation(summary = "详情", description = "")
public R<MoldDemandVo> createByOderId(String orderId) {
Boolean result = moldDemandService.createByOderId(orderId);
return R.success();
}
/**
* 批量关闭
*/

@ -14,6 +14,8 @@ import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.common.constant.BizTypeConstant;
import org.springblade.desk.common.service.IMesNotifyMessageService;
import org.springblade.desk.order.pojo.entity.AssayContentDetail;
import org.springblade.desk.order.pojo.entity.PlateGoodsApply;
import org.springblade.desk.order.pojo.entity.PlateGoodsRecord;
@ -41,6 +43,7 @@ public class PlateGoodsApplyController extends BladeController {
private final IPlateGoodsApplyService plateGoodsApplyService;
private final IPlateGoodsApplyDetailService plateGoodsApplyDetailService;
private final IMesNotifyMessageService mesNotifyMessageService;
/**
* 分页
@ -82,11 +85,13 @@ public class PlateGoodsApplyController extends BladeController {
@Operation(summary = "新增", description = "")
public R save(@Valid @RequestBody PlateGoodsApplySave saveData) {
PlateGoodsApply apply = saveData.getApply();
List<AssayContentDetail> assayContentDetailList = saveData.getAssayContentDetailList();
List<Long> recordIdList = saveData.getRecordIdList();
plateGoodsApplyService.save(apply, assayContentDetailList, recordIdList);
return R.status(true);
}
List<AssayContentDetail> assayContentDetailList = saveData.getAssayContentDetailList();
List<Long> recordIdList = saveData.getRecordIdList();
plateGoodsApplyService.save(apply, assayContentDetailList, recordIdList);
mesNotifyMessageService.saveMsg(BizTypeConstant.GOODS_APPLY, "", "", apply.getApprovalMan());
return R.status(true);
}
/**
* 批量审核

@ -154,7 +154,8 @@ public class YieldOrderController extends BladeController {
@Operation(summary = "修改", description = "")
public R update(@Valid @RequestBody YieldOrder entity) {
Boolean result = yieldOrderService.updateById(entity);
return R.status(result);
String msg = yieldOrderService.dataVerify(Func.toLongList(entity.getId().toString()));
return R.success(msg);
}
/**

@ -74,8 +74,7 @@
</where>
</select>
<select id="getSelectTime" resultType="java.lang.String">
select to_date(DICT_VALUE,'yyyy-mm-dd hh24:mi:ss')
AS vSelectTime
select to_date(DICT_VALUE,'yyyy-mm-dd hh24:mi:ss') AS vSelectTime
from BLADE_DICT
<where>
<if test="sycnTime != null">

@ -29,4 +29,11 @@ public interface IMoldDemandService extends BaseService<MoldDemand> {
* @return
*/
boolean save(List<MoldDemand> planList);
/**
* 根据订单id生成烧结模具需求
* @param orderId
* @return
*/
boolean createByOderId(String orderId);
}

@ -100,6 +100,14 @@ public interface IYieldOrderService extends BaseService<YieldOrder> {
*/
Boolean checkCode(String yieldOrderId, String yieldOrderCode);
/**
* 生产烧结子件订单
*
* @param yieldOrder
* @return
*/
Boolean createSubOrder(YieldOrder yieldOrder);
/**
* 订单校验-数据
*

@ -32,6 +32,14 @@ public interface IYieldPlanService extends BaseService<YieldPlan> {
*/
IPage<YieldPlan> selectPageSintering(IPage<YieldPlan> page, YieldPlan entity);
/**
* 根据编码查询生产计划
*
* @param code
* @return
*/
YieldPlan getByCode(String code);
/**
* 根据生产计划ID获取二级工艺
*

@ -9,6 +9,8 @@ import org.springblade.desk.order.mapper.MoldDemandMapper;
import org.springblade.desk.order.pojo.entity.MoldDemand;
import org.springblade.desk.order.pojo.enums.MoldDemandEnum;
import org.springblade.desk.order.service.IMoldDemandService;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.order.service.IYieldPlanService;
import org.springframework.stereotype.Service;
import java.util.List;
@ -23,6 +25,8 @@ import java.util.List;
public class MoldDemandServiceImpl extends BaseServiceImpl<MoldDemandMapper, MoldDemand> implements IMoldDemandService {
private final IDsPartService dsPartService;
private final IYieldPlanService planService;
private final IYieldOrderService orderService;
@Override
public IPage<MoldDemand> selectPage(IPage<MoldDemand> page, MoldDemand entity) {
@ -47,4 +51,50 @@ public class MoldDemandServiceImpl extends BaseServiceImpl<MoldDemandMapper, Mol
return this.saveBatch(planList);
}
@Override
public boolean createByOderId(String orderId) {
// TODO 如何根据生产订单确定需要的工装和模具
// YieldOrder order = orderService.getById(orderId);
// MoldDemand moldDemand = new MoldDemand();
// moldDemand.setMdCode();
// moldDemand.setPartCode(order.getPartCode());
// moldDemand.setPartName(order.getPartName());
// /**
// * 工装编码
// */
// private String toolCode;
//
// /**
// * 工装名称
// */
// private String toolName;
//
//
// moldDemand.setDemandNum(order.getYpQty());
// moldDemand.setOccupyNum(order.getYpQty().intValue());
// moldDemand.setLinkOrderIds(order.getId().toString());
//
// /**
// * 模具编码
// */
// @TableField(value = "MO_CODE")
// private String moCode;
//
// /**
// * 模具名称
// */
// @TableField(value = "MO_NAME")
// private String moName;
//
// moldDemand.setQuantity(Long.valueOf(order.getYpQty().toString()));
// YieldPlan yieldPlan = planService.getByCode(order.getYpCode());
// if (Func.isNotEmpty(yieldPlan)) {
// moldDemand.setYpId(yieldPlan.getId());
// }
//
// List<MoldDemand> planList = new ArrayList<>();
// planList.add(moldDemand);
// return this.save(planList);
return true;
}
}

@ -18,8 +18,12 @@ import org.springblade.desk.basic.service.IOemCraftAbilityService;
import org.springblade.desk.basic.service.IOemService;
import org.springblade.desk.basic.service.IWorkCenterService;
import org.springblade.desk.dashboard.pojo.entity.BsCraftAbilityEntity;
import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity;
import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity;
import org.springblade.desk.dashboard.pojo.entity.BsWorkCenterEntity;
import org.springblade.desk.dashboard.service.IBsCraftAbilityService;
import org.springblade.desk.dashboard.service.IBsProcessSetService;
import org.springblade.desk.dashboard.service.IBsTeamSetService;
import org.springblade.desk.order.mapper.YieldOrderCraftMapper;
import org.springblade.desk.order.pojo.dto.YieldOrderAssignCount;
import org.springblade.desk.order.pojo.entity.YieldOrder;
@ -53,6 +57,8 @@ public class YieldOrderCraftServiceImpl extends BaseServiceImpl<YieldOrderCraftM
private final IYieldOrderDailyAssignService dailyAssignService;
private final IYieldOrderAssignSteerService assignSteerService;
private final IBsProcessSetService processSetService;
private final IBsTeamSetService teamSetService;
@Override
public IPage<YieldOrderCraft> selectPage(IPage<YieldOrderCraft> page, YieldOrderCraft entity) {
@ -375,7 +381,17 @@ public class YieldOrderCraftServiceImpl extends BaseServiceImpl<YieldOrderCraftM
// 开始分派到作业中心
for (YieldOrderCraft orderCraft : orderCrafts) {
BsWorkCenterEntity workCenter = workCenterMap.get(orderCraft.getCaId());
Long centerId = orderCraft.getWorkCenterId();
// 判定是否是特殊工序
BsProcessSetEntity processSet = processSetService.selectBsProcessSetByProcessCode(orderCraft.getProcessCode());
if (Func.isNotEmpty(processSet) && Func.isNotBlank(processSet.getTeam())) {
BsTeamSetEntity teamSetEntity = teamSetService.selectByTeamName(processSet.getTeam());
if (Func.isNotEmpty(teamSetEntity)) {
centerId = teamSetEntity.getWcId();
}
}
BsWorkCenterEntity workCenter = workCenterMap.get(centerId);
orderCraft.setWorkCenterId(workCenter.getId());
orderCraft.setIsOutsource(Boolean.FALSE);
}

@ -229,6 +229,46 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
return ObjectUtil.isNotEmpty(yieldPlan);
}
@Override
public Boolean createSubOrder(YieldOrder yieldOrder) {
// 4. 如果是烧结订单并且不是返工单据,则需要验证子件清单是否存在,存在跳过,不存在则新增
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());
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(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode());
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(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo(e.getErrorMessage());
this.updateById(yieldOrder);
}
}
return true;
}
log.info("订单{}不是烧结订单,无需生成子件订单", yieldOrder.getYoCode());
return false;
}
@Override
public Boolean verifyYieldOrderData(YieldOrder yieldOrder) {
// 1. 验证是否已有该流程卡号的数据, 若已有
@ -268,38 +308,6 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
return true;
}
// 4. 如果是烧结订单并且不是返工单据,则需要验证子件清单是否存在,存在跳过,不存在则新增
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());
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(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode());
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(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo(e.getErrorMessage());
this.updateById(yieldOrder);
}
}
}
//TODO 急件维护标识厂内, 急件维护功能未添加
// pjAutomaticDispatchService.urgentUpholdOrder(yieldOrder);
@ -389,7 +397,11 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
boolean saveBatch = yieldOrderCraftService.saveBatch(yieldOrderCraftList);
log.info("添加数据返回结果:{}",saveBatch);
}
// 生成子件订单
createSubOrder(yieldOrder);
// TODO 生成模具计划
// TODO 生成物料需求
return Boolean.TRUE;
}

@ -68,6 +68,11 @@ public class YieldPlanServiceImpl extends BaseServiceImpl<YieldPlanMapper, Yield
return page.setRecords(dataList);
}
@Override
public YieldPlan getByCode(String code) {
return baseMapper.selectOne(Wrappers.lambdaQuery(YieldPlan.class).eq(YieldPlan::getYpCode, code));
}
@Override
public JSONObject getCraftData(Long yieldPlanId) {
JSONObject resultJson = new JSONObject();

@ -53,5 +53,5 @@ public interface IProReTemplateService extends EnBaseService<ProReTemplate> {
R removeFromDetail(Long tankId);
List<ProReTemplate> getDataByWcIdAndPpsId(BigDecimal wcId, Long ppsId, Boolean aTrue);
List<ProReTemplate> getDataByWcIdAndPpsId(Long wcId, Long ppsId, Boolean aTrue);
}

@ -157,7 +157,7 @@ public class ProReTemplateServiceImpl extends EnBaseServiceImpl<ProReTemplateMap
}
@Override
public List<ProReTemplate> getDataByWcIdAndPpsId(BigDecimal wcId, Long ppsId, Boolean aTrue) {
public List<ProReTemplate> getDataByWcIdAndPpsId(Long wcId, Long ppsId, Boolean aTrue) {
LambdaQueryWrapper<ProReTemplate> queryWrapper = Wrappers.lambdaQuery(ProReTemplate.class);
queryWrapper.eq(wcId != null, ProReTemplate::getWcId, wcId);
queryWrapper.eq(ProReTemplate::getPpsId, ppsId);

Loading…
Cancel
Save