Merge remote-tracking branch 'origin/master'

liweidong
maxiangong 14 hours ago
commit 007b0a0f95
  1. 30
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/produce/YieldOrderAutoDispatchProcessor.java
  2. 1
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/common/enums/MesApprovalRecordBizTypeEnum.java
  3. 11
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/feign/IApsProduceClient.java
  4. 3
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StRealtimeStock.java
  5. 3
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/vo/StGoodsVO.java
  6. 50
      blade-service/blade-desk/src/main/java/org/springblade/desk/common/service/impl/MesPlateGoodsApplyServiceImpl.java
  7. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java
  8. 26
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/PlateGoodsApplyServiceImpl.java
  9. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/PlateGoodsRecordServiceImpl.java
  10. 16
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  11. 16
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/feign/ApsProduceClient.java
  12. 6
      blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGoodsController.java
  13. 5
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsMapper.xml
  14. 6
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherOutRecordServiceImpl.java

@ -0,0 +1,30 @@
package org.springblade.job.processor.produce;
import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springblade.desk.produce.feign.IApsProduceClient;
import org.springframework.stereotype.Component;
import tech.powerjob.worker.core.processor.ProcessResult;
import tech.powerjob.worker.core.processor.TaskContext;
import tech.powerjob.worker.core.processor.sdk.BasicProcessor;
/**
* 异常订单自动分派
*
* @author litao
*/
@Component
@Data
@Slf4j
public class YieldOrderAutoDispatchProcessor implements BasicProcessor {
@Resource
private IApsProduceClient client;
@Override
public ProcessResult process(TaskContext context) throws Exception {
log.info("异常订单自动分派开始");
return new ProcessResult(client.yieldOrderAutoDispatch());
}
}

@ -22,6 +22,7 @@ public enum MesApprovalRecordBizTypeEnum {
BATCH_PLANNING_CATEGORY("槽液计划类/审核"),
BATCH_PLANNING_TASK("槽液任务/审核"),
PLATE_GOODS_RECORD("镀层物料需求申报/审核"),
PLATE_GOODS_APPLY("镀层物料添加量申报/审核"),
;
private final String desc;

@ -18,8 +18,7 @@ public interface IApsProduceClient {
String SYNC_ORDER_FROM_OLD_MES = API_PREFIX + "/syncOrderFromOldMes";
String CONFIRM_ORDER = API_PREFIX + "/confirmOrder";
String YIELD_ORDER_AUTO_DISPATCH = API_PREFIX + "/yieldOrderAutoDispatch";
/**
* 从旧mes平台同步生产订单
*
@ -35,4 +34,12 @@ public interface IApsProduceClient {
*/
@GetMapping(CONFIRM_ORDER)
boolean confirmOrder();
/**
* 异常订单自动分派
*
* @return
*/
@GetMapping(YIELD_ORDER_AUTO_DISPATCH)
boolean yieldOrderAutoDispatch();
}

@ -203,7 +203,8 @@ public class StRealtimeStock extends TenantEntity {
@TableField(exist = false)
private Long outRecordId;
@Schema(description = "领料人ID")
private Long picker;
}

@ -30,4 +30,7 @@ public class StGoodsVO extends StGoods {
@Schema(description = "库房ID(关联st_storehouse表)")
private Long shId;
@TableField(exist = false)
private String goodsCodeAndGoodsName;
}

@ -0,0 +1,50 @@
package org.springblade.desk.common.service.impl;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.common.enums.MesApprovalRecordBizTypeEnum;
import org.springblade.desk.common.service.ApprovalRecordDetailStrategy;
import org.springblade.desk.order.pojo.entity.PlateGoodsApply;
import org.springblade.desk.order.pojo.entity.PlateGoodsRecord;
import org.springblade.desk.order.pojo.vo.PlateGoodsApplyVo;
import org.springblade.desk.order.service.IPlateGoodsApplyDetailService;
import org.springblade.desk.order.service.IPlateGoodsApplyService;
import org.springblade.desk.order.wrapper.PlateGoodsApplyWrapper;
import org.springblade.desk.order.wrapper.PlateGoodsRecordWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 物料添加量申报审核待办策略实现类
*/
@Service
public class MesPlateGoodsApplyServiceImpl implements ApprovalRecordDetailStrategy<PlateGoodsApplyVo> {
@Autowired
IPlateGoodsApplyService plateGoodsApplyService;
@Autowired
IPlateGoodsApplyDetailService plateGoodsApplyDetailService;
@Override
public String getBizType() {
return MesApprovalRecordBizTypeEnum.PLATE_GOODS_APPLY.getDesc();
}
@Override
public PlateGoodsApplyVo getDetail(Long bizId) {
PlateGoodsApply apply = plateGoodsApplyService.getById(bizId);
PlateGoodsApplyVo vo = PlateGoodsApplyWrapper.build().entityVO(apply);
// 查询关联订单列表
List<PlateGoodsRecord> recordList = plateGoodsApplyDetailService.listRecordByApplyId(apply.getId());
if (Func.isNotEmpty(recordList)) {
vo.setRecordVos(PlateGoodsRecordWrapper.build().listVO(recordList));
}
return vo;
}
}

@ -340,4 +340,11 @@ public interface IYieldOrderService extends BaseService<YieldOrder> {
YieldOrder getByCardNo(String cardNo);
List<SjCompleteVO> getSubCompleteData(YieldOrder yieldOrder);
/**
* 生产订单自动分派
* @param yieldOrder
* @return
*/
List<YieldOrderCraft> yieldOrderAutoDispatch(YieldOrder yieldOrder);
}

@ -10,6 +10,8 @@ import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.common.enums.MesApprovalRecordBizTypeEnum;
import org.springblade.desk.common.service.IMesApprovalRecordService;
import org.springblade.desk.order.mapper.PlateGoodsApplyMapper;
import org.springblade.desk.order.pojo.entity.AssayContentDetail;
import org.springblade.desk.order.pojo.entity.PlateGoodsApply;
@ -18,6 +20,7 @@ import org.springblade.desk.order.pojo.entity.PlateGoodsRecord;
import org.springblade.desk.order.pojo.enums.AssayContentEnum;
import org.springblade.desk.order.pojo.enums.PlateGoodsEnum;
import org.springblade.desk.order.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -40,6 +43,9 @@ public class PlateGoodsApplyServiceImpl extends BaseServiceImpl<PlateGoodsApplyM
private final IPlateGoodsRecordService goodsRecordService;
private final IPlateGoodsApplyDetailService goodsApplyDetailService;
@Autowired
IMesApprovalRecordService mesApprovalRecordService;
@Override
public IPage<PlateGoodsApply> selectPage(IPage<PlateGoodsApply> page, PlateGoodsApply entity) {
List<PlateGoodsApply> dataList = baseMapper.selectPage(page, entity);
@ -60,6 +66,14 @@ public class PlateGoodsApplyServiceImpl extends BaseServiceImpl<PlateGoodsApplyM
item.setStatus(approvalStatus);
item.setApprovalMemo(approvalMemo);
dataList.add(item);
if(approvalStatus.equals(PlateGoodsEnum.STATUS_PASS.getCode())){
//审批通过
mesApprovalRecordService.passApproval(id, MesApprovalRecordBizTypeEnum.PLATE_GOODS_APPLY.getDesc(), AuthUtil.getUserId(), new Date());
}
if(approvalStatus.equals(PlateGoodsEnum.STATUS_NOT_PASS.getCode())){
//审批驳回
mesApprovalRecordService.rejectApproval(id, MesApprovalRecordBizTypeEnum.PLATE_GOODS_APPLY.getDesc(), AuthUtil.getUserId(), new Date());
}
});
return this.updateBatchById(dataList);
@ -85,6 +99,14 @@ public class PlateGoodsApplyServiceImpl extends BaseServiceImpl<PlateGoodsApplyM
// 3. 更新数据库
this.updateById(plateGoodsApply);
if(approvalStatus.equals(PlateGoodsEnum.SECOND_STATUS_PASS.getCode())){
//审批通过
mesApprovalRecordService.passApproval(id, MesApprovalRecordBizTypeEnum.PLATE_GOODS_APPLY.getDesc(), AuthUtil.getUserId(), new Date());
}
if(approvalStatus.equals(PlateGoodsEnum.SECOND_STATUS_NOT_PASS.getCode())){
//审批驳回
mesApprovalRecordService.rejectApproval(id, MesApprovalRecordBizTypeEnum.PLATE_GOODS_APPLY.getDesc(), AuthUtil.getUserId(), new Date());
}
}
return true;
}
@ -176,6 +198,10 @@ public class PlateGoodsApplyServiceImpl extends BaseServiceImpl<PlateGoodsApplyM
goodsRecordService.updateBatchById(addRecordList);
this.save(apply);
//创建代办
mesApprovalRecordService.createApproval
(apply.getId(), MesApprovalRecordBizTypeEnum.PLATE_GOODS_APPLY.getDesc(),AuthUtil.getUser().getUserId(),new Date());
//关联订单
List<PlateGoodsApplyDetail> goodsApplyDetailList = new ArrayList<>();
for (PlateGoodsRecord goodsRecord : addRecordList) {

@ -614,6 +614,14 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl<PlateGoodsRecor
// 4. 更新数据库
this.updateById(plateGoodsRecord);
if(approvalStatus.equals(PlateGoodsEnum.SECOND_STATUS_PASS.getCode())){
//审批通过
mesApprovalRecordService.passApproval(id, MesApprovalRecordBizTypeEnum.PLATE_GOODS_RECORD.getDesc(), AuthUtil.getUserId(), new Date());
}
if(approvalStatus.equals(PlateGoodsEnum.SECOND_STATUS_NOT_PASS.getCode())){
//审批驳回
mesApprovalRecordService.rejectApproval(id, MesApprovalRecordBizTypeEnum.PLATE_GOODS_RECORD.getDesc(), AuthUtil.getUserId(), new Date());
}
}
return true;

@ -382,9 +382,10 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
yieldOrder.getValidationResult().equals(YieldOrderEnum.VALIDATION_RESULT_PASS.getCode()) &&
yieldOrder.getReceiveStatus().equals(YieldOrderEnum.RECEIVE_STATUS_YES.getCode())) {
//订单状态为验证完成并且已接收 进行分派
boolean result = this.verifyYieldOrderResource(yieldOrder);
if (!result) {
throw new ServiceException("分派异常请及时处理");
try {
this.yieldOrderAutoDispatch(yieldOrder);
} catch (Exception e) {
log.error("分派异常:{}",yieldOrder.getId());
}
}
}
@ -1000,6 +1001,8 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
if (yieldOrder.getYieldType() != YieldOrderEnum.YIELD_TYPE_2.getCode()) {
yieldOrder.setStatus(YieldOrderEnum.STATUS_APS.getCode());
}
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_PASS.getCode());
yieldOrder.setValidationMomo("");
this.updateById(yieldOrder);
return Boolean.TRUE;
}
@ -1635,10 +1638,15 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
throw new ServiceException("订单接收成功,校验异常请及时处理");
}
return this.yieldOrderAutoDispatch(yieldOrder);
}
@Override
public List<YieldOrderCraft> yieldOrderAutoDispatch(YieldOrder yieldOrder) {
boolean result = this.verifyYieldOrderResource(yieldOrder);
if (result) {
List<YieldOrderCraft> list = yieldOrderCraftService.list(Wrappers.<YieldOrderCraft>lambdaQuery().eq(YieldOrderCraft::getYoId, yieldOrder.getId()).orderByAsc(YieldOrderCraft::getProcessNo));
list.stream().forEach(craft -> {
list.forEach(craft -> {
if (craft.getWorkCenterId() != null) {
WorkCenter workCenter = workCenterService.getById(craft.getWorkCenterId());
craft.setWorkCenterName(workCenter.getWcName());

@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@ -61,4 +62,19 @@ public class ApsProduceClient implements IApsProduceClient {
return true;
}
@Override
public boolean yieldOrderAutoDispatch() {
List<YieldOrder> orders = yieldOrderService.list(Wrappers.<YieldOrder>lambdaQuery().eq(YieldOrder::getValidationResult, YieldOrderEnum.VALIDATION_RESULT_LESS_RESOURCE.getCode()));
log.info("异常订单待自动分派数量:{}", orders.size());
for (YieldOrder yieldOrder : orders) {
try {
yieldOrderService.yieldOrderAutoDispatch(yieldOrder);
} catch (Exception e) {
log.error("异常订单自动分派失败,流程卡号{},错误信息为{}", yieldOrder.getCardNo(), e.getMessage());
}
}
log.info("异常订单自动分派结束");
return true;
}
}

@ -1,5 +1,6 @@
package org.springblade.wms.controller;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
@ -69,6 +70,11 @@ public class StGoodsController extends BladeController {
QueryWrapper<StGoods> wrapper = Condition.getQueryWrapper(stGoods, StGoods.class);
wrapper.eq("is_deleted", 0)
.orderByDesc("create_time");
String goodsCodeAndGoodsName = StrUtil.toString(stGoods.get("goodsCodeAndGoodsName"));
if (StrUtil.isNotBlank(goodsCodeAndGoodsName)) {
wrapper.and(w -> w.like("goods_code", goodsCodeAndGoodsName).or().like("goods_name", goodsCodeAndGoodsName));
}
IPage<StGoods> pages = stGoodsService.page(Condition.getPage(query), wrapper);
return R.data(StGoodsWrapper.build().pageVO(pages));
}

@ -115,6 +115,11 @@
ON g.goods_code = sl.goods_code
WHERE g.is_deleted = 0
AND g.used = 1
<if test="stGoods.goodsCodeAndGoodsName != null and stGoods.goodsCodeAndGoodsName != ''">
AND (g.goods_code LIKE '%' || #{stGoods.goodsCodeAndGoodsName} || '%'
OR g.goods_name LIKE '%' || #{stGoods.goodsCodeAndGoodsName} || '%')
</if>
<if test="stGoods.goodsCode != null and stGoods.goodsCode != ''">
AND g.goods_code LIKE '%' || #{stGoods.goodsCode} || '%'
</if>

@ -1,5 +1,6 @@
package org.springblade.wms.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import jakarta.annotation.Resource;
@ -254,6 +255,9 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl<StOtherOutRecor
}
detail.setDeptId(mainInout.getDeptId());
detail.setCreateUser(mainInout.getCreateUser());
if (stOtherOutRecord.getPicker() == null) {
detail.setUserId(stock.getPicker());
}
detail.setUserId(stOtherOutRecord.getPicker());
String pickerTeamSet = stStockInoutRecordService.getTeamSetByUserId(stOtherOutRecord.getPicker());
detail.setPickerTeamSet(pickerTeamSet);
@ -300,7 +304,7 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl<StOtherOutRecor
newOutRecord.setCreateTime(new Date());
newOutRecord.setUpdateUser(user.getUserId());
newOutRecord.setUpdateTime(new Date());
newOutRecord.setPicker(stOtherOutRecord.getPicker());
newOutRecord.setPicker(detail.getUserId());
// 保存当前出库单(每条明细对应一条新出库单)
this.save(newOutRecord);

Loading…
Cancel
Save