erp同步计划关闭订单

liweidong
sugy 3 months ago
parent 3b514cb9b8
commit b8e3ba4652
  1. 5
      blade-ops/blade-job/src/main/java/org/springblade/job/processor/erp/SynGlassCakeProcessor.java
  2. 6
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/order/feign/IApsOrderClient.java
  3. 5
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/table/Prtbasdef.java
  4. 5
      blade-service-api/blade-erpdata-api/src/main/java/org/springblade/erpdata/pojo/dto/table/Prtmsg.java
  5. 11
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/vo/StGoodStatisVO.java
  6. 12
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/feign/ApsOrderClient.java
  7. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldOrderService.java
  8. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/IYieldPlanService.java
  9. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  10. 69
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldPlanServiceImpl.java
  11. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.java
  12. 17
      blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/WorkOrderMapper.xml
  13. 14
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpPrtmsgMapper.java
  14. 5
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/mapper/ErpPrtmsgMapper.xml
  15. 12
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/IErpPrtmsgService.java
  16. 40
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpMesRbWoServiceImpl.java
  17. 20
      blade-service/blade-erpdata/src/main/java/org/springblade/erpdata/service/impl/ErpPrtmsgServiceImpl.java
  18. 16
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StRealtimeStockMapper.java
  19. 35
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StRealtimeStockMapper.xml
  20. 13
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStRealtimeStockService.java
  21. 15
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StRealtimeStockServiceImpl.java

@ -2,6 +2,7 @@ package org.springblade.job.processor.erp;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.desk.order.feign.IApsOrderClient;
import org.springblade.erpdata.feign.IErpMesRbWoClient;
import tech.powerjob.worker.core.processor.ProcessResult;
import tech.powerjob.worker.core.processor.TaskContext;
@ -13,14 +14,14 @@ import java.util.concurrent.CompletableFuture;
@Slf4j
public class SynGlassCakeProcessor implements BasicProcessor {
private final IErpMesRbWoClient mesRbWoClient;
private final IApsOrderClient orderClient;
@Override
public ProcessResult process(TaskContext taskContext) throws Exception {
log.info("同步玻璃饼订单定时任务开始");
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> mesRbWoClient.synGlassCake());
CompletableFuture<Void> runFuture = CompletableFuture.runAsync(()-> orderClient.synGlassCake());
log.info("同步玻璃饼订单定时任务结束");
return new ProcessResult(true);
}

@ -29,6 +29,8 @@ public interface IApsOrderClient {
String GET_PART_LIST = API_PREFIX + "/getPartList";
String UPDATE_BY_ID = API_PREFIX + "/updateById";
String CLOSE_PLAN_LIST = API_PREFIX + "/getClosePlanList";
String MAX_CARD_NO = API_PREFIX + "/getMaxCardNo";
String SYN_GLASS_CAKE = API_PREFIX + "/synGlassCake";
@PostMapping(SYNC_PLAN_FROM_SAVE)
void saveList(List<YieldPlan> yieldOrderList);
@ -42,4 +44,8 @@ public interface IApsOrderClient {
void updateById(YieldPlan yieldPlan);
@GetMapping(CLOSE_PLAN_LIST)
List<YieldPlan> getClosePlanList();
@GetMapping(MAX_CARD_NO)
String getMaxCardNo();
@GetMapping(SYN_GLASS_CAKE)
void synGlassCake();
}

@ -1,6 +1,8 @@
package org.springblade.erpdata.pojo.dto.table;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import org.springblade.core.mp.base.BaseEntity;
/**
* 对应ERP中表 t_prtbasdef
@ -9,7 +11,8 @@ import lombok.Data;
* @date 2026-01-16 17:32
*/
@Data
public class Prtbasdef {
@TableName("t_prtbasdef")
public class Prtbasdef extends BaseEntity {
private String prtno; //物料号

@ -1,6 +1,8 @@
package org.springblade.erpdata.pojo.dto.table;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import org.springblade.core.mp.base.BaseEntity;
/**
* 对应ERP中表 t_prtmsg
@ -9,7 +11,8 @@ import lombok.Data;
* @date 2026-01-16 17:32
*/
@Data
public class Prtmsg {
@TableName("t_prtmsg")
public class Prtmsg extends BaseEntity {
private String prtarea; //面积

@ -0,0 +1,11 @@
package org.springblade.wms.pojo.vo;
import lombok.Data;
@Data
public class StGoodStatisVO {
private Double totalQuantity;
private Double zyQuantity;
}

@ -30,6 +30,8 @@ public class ApsOrderClient implements IApsOrderClient {
private final IYieldPlanService yieldPlanService;
private final IYieldOrderService yieldOrderService;
private final IDsCraftService dsCraftService;
private final IDsPartService dsPartService;
@ -71,4 +73,14 @@ public class ApsOrderClient implements IApsOrderClient {
.orderByAsc(YieldPlan::getCheckCloseTime)
.last("limit 1000"));
}
@Override
public String getMaxCardNo() {
return yieldOrderService.getMaxCardNo();
}
@Override
public void synGlassCake() {
yieldPlanService.synGlassCake();
}
}

@ -193,4 +193,7 @@ public interface IYieldOrderService extends BaseService<YieldOrder> {
* @return
*/
boolean moldComplete(Long yoId);
String getMaxCardNo();
}

@ -64,4 +64,8 @@ public interface IYieldPlanService extends BaseService<YieldPlan> {
* @return
*/
Boolean checkCode(String yieldPlanId, String yieldPlanCode);
/**
* 同步玻璃饼订单
*/
void synGlassCake();
}

@ -690,6 +690,11 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
return this.updateById(yieldOrder);
}
@Override
public String getMaxCardNo() {
return workOrderMapper.getMaxCardNo();
}
/**
* 验证零件子件信息
*

@ -2,20 +2,25 @@ package org.springblade.desk.order.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springblade.desk.order.pojo.entity.YieldPlan;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
import org.springblade.desk.dashboard.service.IDsPartService;
import org.springblade.desk.order.mapper.YieldPlanMapper;
import org.springblade.desk.order.pojo.entity.YieldPlan;
import org.springblade.desk.order.pojo.enums.YieldPlanEnum;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springblade.desk.order.service.IYieldPlanService;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
@ -29,6 +34,10 @@ public class YieldPlanServiceImpl extends BaseServiceImpl<YieldPlanMapper, Yield
private final IYieldOrderService yieldOrderService;
private final IDsPartService dsPartService;
//private final IStRealtimeStockService stRealtimeStockService;
@Override
public IPage<YieldPlan> selectPageElectroplate(IPage<YieldPlan> page, YieldPlan entity) {
List<YieldPlanEnum> planTypeList = new ArrayList<>();
@ -105,4 +114,62 @@ public class YieldPlanServiceImpl extends BaseServiceImpl<YieldPlanMapper, Yield
YieldPlan yieldPlan = baseMapper.selectOne(queryWrapper);
return ObjectUtil.isNotEmpty(yieldPlan);
}
/**
* 同步玻璃饼
*/
@Override
public void synGlassCake() {
List<YieldPlan> yieldPlanList=baseMapper.selectList(new QueryWrapper<YieldPlan>().lambda()
.eq(YieldPlan::getIsDeleted, 0).eq(YieldPlan::getPlanType, 12002)
.eq(YieldPlan::getGenerateGlassCake, 0));;
List<String> partCodeList=yieldPlanList.stream().map(x->x.getPartCode()).toList();
//b1. 查询该计划的零件是否是玻璃相关的零件列表(sub_cursor)
List<DsPartEntity> dsPartList=dsPartService.list(new QueryWrapper<DsPartEntity>().lambda()
.in(DsPartEntity::getPartCode, partCodeList)
.like(DsPartEntity::getPartName, "玻璃"));// 获取零件信息
List<String> partList=dsPartList.stream().map(x->x.getPartCode()).toList();
yieldPlanList.forEach(yieldPlan -> {
if(!partList.contains(yieldPlan.getPartCode())){
yieldPlan.setGenerateGlassCake(1);
yieldPlan.setId(yieldPlan.getId());
baseMapper.updateById(yieldPlan);
}
//b3.1 生成流程卡号、批次号
//查询RB相关的流程卡号
String cardNo=yieldOrderService.getMaxCardNo();;
Long num;
if(StringUtils.isEmpty(cardNo)){
num=1L;
}else {
num=Long.valueOf(cardNo.replace("RB"+new SimpleDateFormat("yyMMdd").format(new Date()), ""))+1;
}
cardNo="RB"+new SimpleDateFormat("yyMMdd").format(new Date())+String.format("%05d", num);
String bathNo="Y"+new SimpleDateFormat("yyMMdd").format(new Date())+String.format("%05d", num);
//调用公共保存方法 todo
// dsPartList.forEach(dsPart -> {
// List<StRealtimeStock> stockList=stRealtimeStockService.getGoodsByPartCode(dsPart.getPartCode());
// StGoodStatisVO statisVO=stRealtimeStockService.getGoodsByCode(dsPart.getPartCode());
// Double subPorqty=dsPart.getQuota()*yieldPlan.getDeliveryQty() ;
// if(statisVO.getTotalQuantity()-statisVO.getZyQuantity()>=subPorqty){
// stockList.forEach(stock -> {
// if(stock.getQuantity()-stock.getOccupyQuantity()>=subPorqty){
// StRealtimeStock rs=new StRealtimeStock();
// rs.setId(stock.getId());
// rs.setOccupyQuantity(rs.getOccupyQuantity()+subPorqty);
// stRealtimeStockService.updateById(rs);
// }else {
// StRealtimeStock rs=new StRealtimeStock();
// rs.setId(stock.getId());
// rs.setOccupyQuantity(rs.getQuantity());
// stRealtimeStockService.updateById(rs);
// }
// });
// }
// });
//更新状态标记为已读`update MES_YIELD_PLAN set GENERATE_GLASS_CAKE = 1 where id = ?`
yieldPlan.setGenerateGlassCake(1);
yieldPlan.setId(yieldPlan.getId());
baseMapper.updateById(yieldPlan);
});
}
}

@ -34,4 +34,6 @@ public interface WorkOrderMapper extends BaseMapper<WorkOrder> {
WorkOrder getMaxByBatchNo(String codePattern, String ypCode);
WorkOrder getMaxByMesCardNo(String codePattern);
String getMaxCardNo();
}

@ -108,4 +108,21 @@
ORDER BY mwo.CREATE_TIME DESC
</select>
<select id="getMaxCardNo" resultType="java.lang.String">
SELECT
MAX(card_no)
FROM
(
SELECT
*
FROM
MES_YIELD_ORDER
WHERE
card_no LIKE 'RB'||to_char(SYSDATE,'yymmdd')||'%'
ORDER BY
card_no DESC )
WHERE
ROWNUM = 1
</select>
</mapper>

@ -0,0 +1,14 @@
package org.springblade.erpdata.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springblade.erpdata.pojo.dto.table.Prtmsg;
/**
* Mapper 接口
*
* @author lqk
*/
public interface ErpPrtmsgMapper extends BaseMapper<Prtmsg> {
}

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = "org.springblade.erpdata.mapper.ErpPrtmsgMapper">
</mapper>

@ -0,0 +1,12 @@
package org.springblade.erpdata.service;
import org.springblade.core.mp.base.BaseService;
import org.springblade.erpdata.pojo.dto.table.Prtmsg;
/**
* ERP数据查询service
*
* @author lqk
*/
public interface IErpPrtmsgService extends BaseService<Prtmsg> {
}

@ -3,6 +3,7 @@ package org.springblade.erpdata.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.desk.dashboard.pojo.entity.DsCraftEntity;
import org.springblade.desk.dashboard.pojo.entity.DsPartEntity;
import org.springblade.desk.order.feign.IApsOrderClient;
@ -17,9 +18,11 @@ import org.springblade.erpdata.service.IErpRrbwoerptomesService;
import org.springblade.erpdata.service.IErpWoService;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.SimpleFormatter;
/**
* @author lqk
@ -116,18 +119,31 @@ public class ErpMesRbWoServiceImpl implements IErpMesRbWoService {
@Override
public void synGlassCake() {
List<YieldPlan> yieldPlanList=apsOrderClient.getPlanList();
List<String> partCodeList=yieldPlanList.stream().map(x->x.getPartCode()).toList();
//b1. 查询该计划的零件是否是玻璃相关的零件列表(sub_cursor)
List<DsPartEntity> dsPartList=apsOrderClient.getPartList(partCodeList);// 获取零件信息
List<String> partList=dsPartList.stream().map(x->x.getPartCode()).toList();
yieldPlanList.forEach(yieldPlan -> {
if(!partList.contains(yieldPlan.getPartCode())){
yieldPlan.setGenerateGlassCake(1);
yieldPlan.setId(yieldPlan.getId());
apsOrderClient.updateById(yieldPlan);
}
});
// List<YieldPlan> yieldPlanList=apsOrderClient.getPlanList();
// List<String> partCodeList=yieldPlanList.stream().map(x->x.getPartCode()).toList();
// //b1. 查询该计划的零件是否是玻璃相关的零件列表(sub_cursor)
// List<DsPartEntity> dsPartList=apsOrderClient.getPartList(partCodeList);// 获取零件信息
// List<String> partList=dsPartList.stream().map(x->x.getPartCode()).toList();
// yieldPlanList.forEach(yieldPlan -> {
// if(!partList.contains(yieldPlan.getPartCode())){
// yieldPlan.setGenerateGlassCake(1);
// yieldPlan.setId(yieldPlan.getId());
// apsOrderClient.updateById(yieldPlan);
// }
// //b3.1 生成流程卡号、批次号
// //查询RB相关的流程卡号
// String cardNo=apsOrderClient.getMaxCardNo();
// Long num;
// if(StringUtils.isEmpty(cardNo)){
// num=1L;
// }else {
// num=Long.valueOf(cardNo.replace("RB"+new SimpleDateFormat("yyMMdd").format(new Date()), ""))+1;
// }
// cardNo="RB"+new SimpleDateFormat("yyMMdd").format(new Date())+String.format("%05d", num);
// String bathNo="Y"+new SimpleDateFormat("yyMMdd").format(new Date())+String.format("%05d", num);
// //调用公共保存方法 todo
//
// });
}
/**

@ -0,0 +1,20 @@
package org.springblade.erpdata.service.impl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.erpdata.mapper.ErpPrtmsgMapper;
import org.springblade.erpdata.pojo.dto.table.Prtmsg;
import org.springblade.erpdata.service.IErpPrtmsgService;
import org.springframework.stereotype.Service;
/**
* @author lqk
* @date 2025-11-26 9:39
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class ErpPrtmsgServiceImpl extends BaseServiceImpl<ErpPrtmsgMapper, Prtmsg> implements IErpPrtmsgService {
}

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.springblade.wms.excel.StRealtimeStockExcel;
import org.springblade.wms.pojo.entity.StRealtimeStock;
import org.springblade.wms.pojo.vo.StGoodStatisVO;
import org.springblade.wms.pojo.vo.StRealtimeStockVO;
import java.util.List;
@ -68,6 +69,19 @@ public interface StRealtimeStockMapper extends BaseMapper<StRealtimeStock> {
void updateRealTimeLock(String woCode, String string, double doubleValue);
List<StRealtimeStockVO> selectToolsStockPage(IPage<StRealtimeStockVO> page, StRealtimeStockVO stRealtimeStock);
/**
* 根据物料编码查询库存信息
*
* @param partCode
* @return
*/
List<StRealtimeStock> getGoodsByPartCode(String partCode);
/**
* 根据物料编码查询库存信息
*
* @param partCode
* @return
*/
StGoodStatisVO getGoodsByCode(String partCode);
}

@ -348,5 +348,40 @@
AND h.type = 5
</where>
</select>
<select id="getGoodsByPartCode" resultMap="stRealtimeStockResultMap">
SELECT
a.ID,
a.quantity,
a.OCCUPY_QUANTITY
FROM
st_realtime_stock a,
st_goods b
<where>
a.is_deleted = 0
and a.goods_id = b.id
AND a.quantity - a.OCCUPY_QUANTITY > 0
<if test="partCode != null">
AND b.GOODS_CODE = #{partCode}
</if>
</where>
ORDER BY a.id ASC
</select>
<select id="getGoodsByCode" resultType="org.springblade.wms.pojo.vo.StGoodStatisVO">
SELECT
sum(a.QUANTITY) AS totalQuantity,
sum(a.OCCUPY_QUANTITY) AS zyQuantity
FROM
st_realtime_stock a,
st_goods b
<where>
a.is_deleted = 0
and a.goods_id = b.id
AND a.quantity - a.OCCUPY_QUANTITY > 0
<if test="partCode != null">
AND b.GOODS_CODE = #{partCode}
</if>
</where>
ORDER BY a.id ASC
</select>
</mapper>

@ -11,6 +11,7 @@ import org.springblade.wms.pojo.entity.StStorageLocation;
import org.springblade.wms.pojo.entity.StStoreBill;
import org.springblade.wms.pojo.vo.PrintParentWoLabel;
import org.springblade.wms.pojo.vo.PrintStoresList;
import org.springblade.wms.pojo.vo.StGoodStatisVO;
import org.springblade.wms.pojo.vo.StRealtimeStockVO;
import java.util.List;
@ -78,5 +79,17 @@ public interface IStRealtimeStockService extends BaseService<StRealtimeStock> {
IPage<StRealtimeStockVO> selectStockGoodsPage(IPage<StRealtimeStockVO> page, StRealtimeStockVO stRealtimeStock);
IPage<StRealtimeStockVO> selectToolsStockPage(IPage<StRealtimeStockVO> page, StRealtimeStockVO stRealtimeStock);
/**
* 根据物料编码查询库存信息
* @param partCode
* @return
*/
List<StRealtimeStock> getGoodsByPartCode(String partCode);
/**
* 根据物料编码统计信息
* @param partCode
* @return
*/
StGoodStatisVO getGoodsByCode(String partCode);
}

@ -18,10 +18,7 @@ import org.springblade.wms.mapper.StGoodsMapper;
import org.springblade.wms.mapper.StRealtimeStockMapper;
import org.springblade.wms.mapper.StStorageLocationMapper;
import org.springblade.wms.pojo.entity.*;
import org.springblade.wms.pojo.vo.PrintParentWoLabel;
import org.springblade.wms.pojo.vo.PrintStoresList;
import org.springblade.wms.pojo.vo.PrintWoLabel;
import org.springblade.wms.pojo.vo.StRealtimeStockVO;
import org.springblade.wms.pojo.vo.*;
import org.springblade.wms.service.*;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -75,6 +72,16 @@ public class StRealtimeStockServiceImpl extends BaseServiceImpl<StRealtimeStockM
return page.setRecords(baseMapper.selectToolsStockPage(page, stRealtimeStock));
}
@Override
public List<StRealtimeStock> getGoodsByPartCode(String partCode) {
return baseMapper.getGoodsByPartCode(partCode);
}
@Override
public StGoodStatisVO getGoodsByCode(String partCode) {
return baseMapper.getGoodsByCode(partCode);
}
@Override
public List<PrintParentWoLabel> printPrintWoLabel(List<Long> rlsIdList, Short quantity) {
if (rlsIdList == null || rlsIdList.size() == 0) {

Loading…
Cancel
Save