Browse Source

盘点

master
常熟吴彦祖 3 weeks ago
parent
commit
ab5d68a42f
  1. 2
      src/main/java/com/gaotao/modules/api/entity/NotifyDataToWcs.java
  2. 9
      src/main/java/com/gaotao/modules/check/mapper/PhysicalInventoryMapper.java
  3. 165
      src/main/java/com/gaotao/modules/check/service/impl/PhysicalInventoryServiceImpl.java
  4. 8
      src/main/resources/mapper/check/PhysicalInventoryMapper.xml

2
src/main/java/com/gaotao/modules/api/entity/NotifyDataToWcs.java

@ -13,6 +13,6 @@ public class NotifyDataToWcs {
private Integer itemNo; //任务行号
private String orderNo;//生产订单
private String orderPartNo;//订单料号
private Integer orderType;//订单类型 1-生产订单 2-分切订单 3-销售发货
private Integer orderType;//订单类型 1-生产订单 2-分切订单 3-销售发货 4-手工盘点 5-循环盘点 6-委外订单
private List<NotifyDataToWcsPalletList> materialRequisitions;
}

9
src/main/java/com/gaotao/modules/check/mapper/PhysicalInventoryMapper.java

@ -589,4 +589,13 @@ public interface PhysicalInventoryMapper extends BaseMapper<CountHeader> {
void updateLastPandianHU(@Param("site") String site,@Param("lastPandian") Date lastPandian);
void updateSysIfCount(@Param("site") String site,@Param("value") String value);
/**
* @Description 统计该盘点单已有的任务单数量用于计算流水号- rqrq
* @param site 工厂编码
* @param countNo 盘点单号
* @return int 任务单数量
* @author rqrq
*/
int countOrderTaskByCountNo(@Param("site") String site, @Param("countNo") String countNo);
}

165
src/main/java/com/gaotao/modules/check/service/impl/PhysicalInventoryServiceImpl.java

@ -13,6 +13,9 @@ import com.gaotao.modules.check.mapper.PhysicalInventoryMapper;
import com.gaotao.modules.check.service.PhysicalInventoryService;
import com.gaotao.modules.trans.entity.TransNoControl;
import com.gaotao.modules.trans.service.TransNoControlService;
import com.gaotao.modules.api.entity.NotifyDataToWcs;
import com.gaotao.modules.api.entity.NotifyDataToWcsPalletList;
import com.gaotao.modules.api.service.WcsApiService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -41,6 +44,9 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl<PhysicalInventoryM
@Autowired
private WcsIntegrationMapper wcsIntegrationMapper;
@Autowired
private WcsApiService wcsApiService; // rqrq - 注入WCS接口服务
// ==================== 盘点主表 ====================
@ -787,24 +793,163 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl<PhysicalInventoryM
}
log.info("已更新栈板推送状态");
// 9. 推送给WCSTODO: 接口待确认- rqrq
pushToWcs(taskNo, selectedPallets);
// 9. 推送给WCS - rqrq
pushToWcs(site, countNo, taskNo, selectedPallets);
return selectedPallets.size();
}
/**
* @Description 推送任务给WCS - rqrq
* <p>TODO: WCS接口待确认暂时留空</p>
*
* <p><b>参数说明</b></p>
* <ul>
* <li>notifyNo = 盘点单号 + "-" + 流水号流水号是这个盘点单的第几个任务单</li>
* <li>taskNo = 方法里创建的任务单单号</li>
* <li>itemNo = 任务单行号固定为1</li>
* <li>orderNo = 盘点单号</li>
* <li>orderPartNo = 空字符串</li>
* <li>orderType = 循环盘点是5手工盘点是4</li>
* <li>materialRequisitions = 栈板列表每个栈板一条materials传空集合</li>
* </ul>
*
* @param site 工厂编码
* @param countNo 盘点单号
* @param taskNo 任务号
* @param pallets 栈板列表
* @author rqrq
*/
private void pushToWcs(String site, String countNo, String taskNo, List<CountPalletData> pallets) {
log.info("推送给WCS开始,site: {}, countNo: {}, taskNo: {}, 栈板数量: {}", site, countNo, taskNo, pallets.size());
try {
// 1. 查询盘点类型确定orderType - rqrq
String countType = baseMapper.getCountType(site, countNo);
int orderType = CountHeader.COUNT_TYPE_CYCLE.equals(countType) ? 5 : 4; // 循环盘点=5手工盘点=4
log.info("盘点类型: {}, orderType: {}", countType, orderType);
// 2. 计算流水号查询该盘点单已有多少个任务单- rqrq
int taskCount = baseMapper.countOrderTaskByCountNo(site, countNo);
String notifyNo = countNo + "-" + taskCount;
log.info("计算流水号:taskCount={}, notifyNo={}", taskCount, notifyNo);
// 3. 构建WCS数据 - rqrq
NotifyDataToWcs wcsData = new NotifyDataToWcs();
wcsData.setSite(site != null ? site.trim() : null);
wcsData.setNotifyNo(notifyNo);
wcsData.setTaskNo(taskNo != null ? taskNo.trim() : null);
wcsData.setItemNo(1); // 任务单行号固定为1
wcsData.setOrderNo(countNo != null ? countNo.trim() : null);
wcsData.setOrderPartNo(""); // 传空
wcsData.setOrderType(orderType);
// 4. 构建栈板列表 - rqrq
List<NotifyDataToWcsPalletList> palletList = new ArrayList<>();
for (CountPalletData pallet : pallets) {
NotifyDataToWcsPalletList palletData = new NotifyDataToWcsPalletList();
palletData.setPalletCode(pallet.getPalletId() != null ? pallet.getPalletId().trim() : null);
palletData.setMaterials(new ArrayList<>()); // materials传空集合
palletList.add(palletData);
}
wcsData.setMaterialRequisitions(palletList);
log.info("构建WCS数据完成,栈板数:{}", palletList.size());
// 5. 调用WCS接口 - rqrq
log.info("开始调用WCS接口 - rqrq");
wcsApiService.pushNotifyToWcsApi(wcsData);
log.info("WCS接口调用成功 - rqrq");
} catch (Exception e) {
String errorMsg = e.getMessage();
log.error("WCS接口调用失败:{} - rqrq", errorMsg);
// 超时错误直接抛出 - rqrq
if (errorMsg != null && (errorMsg.contains("timeout") || errorMsg.contains("超时"))) {
throw new RuntimeException("WCS接口调用超时:" + errorMsg);
}
// 其他错误也抛出让调用方处理 - rqrq
throw new RuntimeException("WCS接口调用失败:" + errorMsg);
}
log.info("推送给WCS结束");
}
/**
* @Description 推送复核任务给WCS - rqrq
*
* <p><b>参数说明</b></p>
* <ul>
* <li>notifyNo = 盘点单号 + "-" + 流水号流水号是这个盘点单的第几个任务单</li>
* <li>taskNo = 方法里创建的任务单单号</li>
* <li>itemNo = 任务单行号固定为1</li>
* <li>orderNo = 盘点单号</li>
* <li>orderPartNo = 空字符串</li>
* <li>orderType = 循环复核是5手工复核是4</li>
* <li>materialRequisitions = 栈板列表每个栈板一条materials传空集合</li>
* </ul>
*
* @param site 工厂编码
* @param countNo 盘点单号
* @param taskNo 任务号
* @param palletIds 栈板ID列表
* @param reviewType 复核类型MANUAL/CYCLE
* @author rqrq
*/
private void pushToWcs(String taskNo, List<CountPalletData> pallets) {
log.info("推送给WCS开始,taskNo: {}, 栈板数量: {}", taskNo, pallets.size());
// TODO: WCS接口待确认 - rqrq
// 调用WCS接口推送出库任务
log.info("推送给WCS结束(接口待实现)");
private void pushReviewToWcs(String site, String countNo, String taskNo, List<String> palletIds, String reviewType) {
log.info("推送复核任务给WCS开始,site: {}, countNo: {}, taskNo: {}, 栈板数量: {}, reviewType: {}",
site, countNo, taskNo, palletIds.size(), reviewType);
try {
// 1. 根据复核类型确定orderType - rqrq
int orderType = "MANUAL".equals(reviewType) ? 4 : 5; // 循环复核=5手工复核=4
log.info("复核类型: {}, orderType: {}", reviewType, orderType);
// 2. 计算流水号查询该盘点单已有多少个任务单- rqrq
int taskCount = baseMapper.countOrderTaskByCountNo(site, countNo);
String notifyNo = countNo + "-" + taskCount;
log.info("计算流水号:taskCount={}, notifyNo={}", taskCount, notifyNo);
// 3. 构建WCS数据 - rqrq
NotifyDataToWcs wcsData = new NotifyDataToWcs();
wcsData.setSite(site != null ? site.trim() : null);
wcsData.setNotifyNo(notifyNo);
wcsData.setTaskNo(taskNo != null ? taskNo.trim() : null);
wcsData.setItemNo(1); // 任务单行号固定为1
wcsData.setOrderNo(countNo != null ? countNo.trim() : null);
wcsData.setOrderPartNo(""); // 传空
wcsData.setOrderType(orderType);
// 4. 构建栈板列表 - rqrq
List<NotifyDataToWcsPalletList> palletList = new ArrayList<>();
for (String palletId : palletIds) {
NotifyDataToWcsPalletList palletData = new NotifyDataToWcsPalletList();
palletData.setPalletCode(palletId != null ? palletId.trim() : null);
palletData.setMaterials(new ArrayList<>()); // materials传空集合
palletList.add(palletData);
}
wcsData.setMaterialRequisitions(palletList);
log.info("构建WCS数据完成,栈板数:{}", palletList.size());
// 5. 调用WCS接口 - rqrq
log.info("开始调用WCS接口 - rqrq");
wcsApiService.pushNotifyToWcsApi(wcsData);
log.info("WCS接口调用成功 - rqrq");
} catch (Exception e) {
String errorMsg = e.getMessage();
log.error("WCS接口调用失败:{} - rqrq", errorMsg);
// 超时错误直接抛出 - rqrq
if (errorMsg != null && (errorMsg.contains("timeout") || errorMsg.contains("超时"))) {
throw new RuntimeException("WCS接口调用超时:" + errorMsg);
}
// 其他错误也抛出让调用方处理 - rqrq
throw new RuntimeException("WCS接口调用失败:" + errorMsg);
}
log.info("推送复核任务给WCS结束");
}
/**
@ -1572,8 +1717,8 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl<PhysicalInventoryM
}
log.info("已更新count_pallet表的task_no,栈板数量: {}", palletIds.size());
// 8. TODO: 推送给WCS接口待确认- rqrq
log.info("复核任务推送给WCS(接口待实现)");
// 8. 推送给WCS - rqrq
pushReviewToWcs(site, countNo, taskNo, palletIds, reviewType);
log.info("createReviewTask 结束,taskNo: {}", taskNo);
return taskNo;

8
src/main/resources/mapper/check/PhysicalInventoryMapper.xml

@ -1031,5 +1031,13 @@
<update id="updateSysIfCount">
update sysParameters set paraValue=#{value} where site=#{site} and parameterId='10001'
</update>
<!-- rqrq - 统计该盘点单已有的任务单数量(用于计算流水号) -->
<select id="countOrderTaskByCountNo" resultType="int">
SELECT COUNT(1)
FROM wms_order_task WITH (NOLOCK)
WHERE site = #{site}
AND source_bill_no = #{countNo}
</select>
</mapper>
Loading…
Cancel
Save