Browse Source

feat(automatedWarehouse): 添加关闭申请单任务功能

- 在NotifyDetailQueryController中新增closeNotifyTask接口
- 在NotifyDetailQueryMapper中添加相关数据库查询和更新方法
- 在NotifyDetailQueryMapper.xml中实现SQL查询语句
- 在NotifyDetailQueryService中定义closeNotifyTask服务方法
- 在NotifyDetailQueryServiceImpl中实现完整的业务逻辑
- 添加参数校验、数据验证和事务处理机制
- 实现栈板调用状态解除和订单状态更新功能
master
常熟吴彦祖 3 months ago
parent
commit
0a78fd2630
  1. 20
      src/main/java/com/gaotao/modules/automatedWarehouse/controller/NotifyDetailQueryController.java
  2. 38
      src/main/java/com/gaotao/modules/automatedWarehouse/mapper/NotifyDetailQueryMapper.java
  3. 16
      src/main/java/com/gaotao/modules/automatedWarehouse/service/NotifyDetailQueryService.java
  4. 88
      src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/NotifyDetailQueryServiceImpl.java
  5. 50
      src/main/resources/mapper/automatedWarehouse/NotifyDetailQueryMapper.xml

20
src/main/java/com/gaotao/modules/automatedWarehouse/controller/NotifyDetailQueryController.java

@ -45,4 +45,24 @@ public class NotifyDetailQueryController {
List<SOIssueNotifyOrderMaterialListDetail> rows = notifyDetailQueryService.searchMaterialListDetail(data);
return R.ok().put("rows", rows);
}
/**
* @Description 关闭申请单任务 - rqrq
* <p><b>功能说明</b></p>
* <ul>
* <li>校验pushWmsFlag必须是'Y'transportFlag必须是'N'</li>
* <li>校验pushWcsTime到当前时间超过1天</li>
* <li>更新SOIssueNotifyOrderList的transport_flag改为'Y'用主键site+notify_no+item_no定位</li>
* <li>解除相关栈板调用状态用soorder_no匹配remarkcalling_flag改为'N'remark清空</li>
* </ul>
* @param data 查询条件包含sitenotifyNoitemNosoorderNo
* @return R 成功消息包含解除的栈板列表
* @author rqrq
* @date 2026/03/05
*/
@PostMapping("/closeNotifyTask")
public R closeNotifyTask(@RequestBody SOIssueNotifyOrderListData data) throws Exception {
String message = notifyDetailQueryService.closeNotifyTask(data);
return R.ok(message);
}
}

38
src/main/java/com/gaotao/modules/automatedWarehouse/mapper/NotifyDetailQueryMapper.java

@ -33,5 +33,43 @@ public interface NotifyDetailQueryMapper {
* @author rqrq
*/
List<SOIssueNotifyOrderMaterialListDetail> searchMaterialListDetail(@Param("query") SOIssueNotifyOrderMaterialListDetail data);
/**
* @Description 根据主键查询申请单订单记录 - rqrq
* @param site 工厂
* @param notifyNo 领料单号
* @param itemNo 行号
* @return SOIssueNotifyOrderList
* @author rqrq
*/
com.gaotao.modules.notify.entity.SOIssueNotifyOrderList getOrderByPrimaryKey(@Param("site") String site, @Param("notifyNo") String notifyNo, @Param("itemNo") java.math.BigDecimal itemNo);
/**
* @Description 查询要解除调用的栈板列表 - rqrq
* @param site 工厂
* @param notifyNo 领料单号
* @param soorderNo 订单号
* @return List<String> 栈板ID列表
* @author rqrq
*/
java.util.List<String> getPalletsToRelease(@Param("site") String site, @Param("notifyNo") String notifyNo, @Param("soorderNo") String soorderNo);
/**
* @Description 更新申请单的transport_flag为'Y'用主键定位- rqrq
* @param site 工厂
* @param notifyNo 领料单号
* @param itemNo 行号
* @author rqrq
*/
void updateTransportFlag(@Param("site") String site, @Param("notifyNo") String notifyNo, @Param("itemNo") java.math.BigDecimal itemNo);
/**
* @Description 解除栈板调用状态根据remark匹配- rqrq
* @param site 工厂
* @param notifyNo 领料单号
* @param soorderNo 订单号
* @author rqrq
*/
void releasePalletCallingFlag(@Param("site") String site, @Param("notifyNo") String notifyNo, @Param("soorderNo") String soorderNo);
}

16
src/main/java/com/gaotao/modules/automatedWarehouse/service/NotifyDetailQueryService.java

@ -28,5 +28,21 @@ public interface NotifyDetailQueryService {
* @author rqrq
*/
List<SOIssueNotifyOrderMaterialListDetail> searchMaterialListDetail(SOIssueNotifyOrderMaterialListDetail data);
/**
* @Description 关闭申请单任务 - rqrq
* <p><b>功能说明</b></p>
* <ul>
* <li>校验pushWmsFlag必须是'Y'transportFlag必须是'N'</li>
* <li>校验pushWcsTime到当前时间超过1天</li>
* <li>更新SOIssueNotifyOrderList的transport_flag改为'Y'用主键site+notify_no+item_no定位</li>
* <li>解除相关栈板调用状态用soorder_no匹配remarkcalling_flag改为'N'remark清空</li>
* </ul>
* @param data 查询条件包含sitenotifyNoitemNosoorderNo
* @return String 成功消息包含解除的栈板列表
* @author rqrq
* @date 2026/03/05
*/
String closeNotifyTask(SOIssueNotifyOrderListData data);
}

88
src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/NotifyDetailQueryServiceImpl.java

@ -5,12 +5,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gaotao.common.utils.PageUtils;
import com.gaotao.modules.automatedWarehouse.mapper.NotifyDetailQueryMapper;
import com.gaotao.modules.automatedWarehouse.service.NotifyDetailQueryService;
import com.gaotao.modules.notify.entity.SOIssueNotifyOrderList;
import com.gaotao.modules.notify.entity.SOIssueNotifyOrderListData;
import com.gaotao.modules.notify.entity.SOIssueNotifyOrderMaterialListDetail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* @Description 申请单明细通用查询Service实现类 - rqrq
@ -56,5 +61,88 @@ public class NotifyDetailQueryServiceImpl implements NotifyDetailQueryService {
System.out.println("查询申请单物料明细完成,共" + (rows != null ? rows.size() : 0) + "条记录 - rqrq");
return rows;
}
/**
* @Description 关闭申请单任务 - rqrq
* @param data 查询条件包含sitenotifyNoitemNosoorderNo
* @return String 成功消息包含解除的栈板列表
* @author rqrq
* @date 2026/03/05
*/
@Override
@Transactional(rollbackFor = Exception.class)
public String closeNotifyTask(SOIssueNotifyOrderListData data) {
System.out.println("开始关闭申请单任务 - rqrq,site=" + data.getSite() + ", notifyNo=" + data.getNotifyNo() + ", itemNo=" + data.getItemNo() + ", soorderNo=" + data.getSoorderNo());
// 1. 参数校验 - rqrq
if (!StringUtils.hasText(data.getSite())) {
throw new RuntimeException("工厂不能为空");
}
if (!StringUtils.hasText(data.getNotifyNo())) {
throw new RuntimeException("领料单号不能为空");
}
if (data.getItemNo() == null) {
throw new RuntimeException("行号不能为空");
}
if (!StringUtils.hasText(data.getSoorderNo())) {
throw new RuntimeException("订单号不能为空");
}
// 2. 查询该订单记录校验条件用主键查询- rqrq
SOIssueNotifyOrderList existOrder = notifyDetailQueryMapper.getOrderByPrimaryKey(data.getSite(), data.getNotifyNo(), data.getItemNo());
if (existOrder == null) {
throw new RuntimeException("订单不存在");
}
// 2.1 校验pushWmsFlag必须是'Y' - rqrq
if (!"Y".equals(existOrder.getPushWmsFlag())) {
throw new RuntimeException("只能关闭已推送WCS的任务(推送WCS=是)");
}
// 2.2 校验transportFlag必须是'N' - rqrq
if (!"N".equals(existOrder.getTransportFlag())) {
throw new RuntimeException("该任务已经是立库取出状态,无法关闭");
}
// 2.3 校验pushWcsTime到当前时间超过1天 - rqrq
Date pushWcsTime = existOrder.getPushWcsTime();
if (pushWcsTime == null) {
throw new RuntimeException("该订单未记录推送WCS时间,无法关闭");
}
long diffMillis = new Date().getTime() - pushWcsTime.getTime();
long diffDays = TimeUnit.MILLISECONDS.toDays(diffMillis);
if (diffDays < 1) {
throw new RuntimeException("推送WCS时间未超过1天,无法关闭任务(已推送" + diffDays + "天)");
}
System.out.println("校验通过,推送WCS时间=" + pushWcsTime + ",已超过1天 - rqrq");
// 3. 先查询要解除调用的栈板列表 - rqrq
List<String> palletIds = notifyDetailQueryMapper.getPalletsToRelease(data.getSite(), data.getNotifyNo(), data.getSoorderNo());
System.out.println("查询到" + (palletIds != null ? palletIds.size() : 0) + "个栈板需要解除调用 - rqrq");
// 4. 更新SOIssueNotifyOrderList的transport_flag为'Y'用主键site+notify_no+item_no- rqrq
notifyDetailQueryMapper.updateTransportFlag(data.getSite(), data.getNotifyNo(), data.getItemNo());
System.out.println("已更新transport_flag为Y - rqrq");
// 5. 解除相关栈板调用状态用soorder_no匹配remark- rqrq
String resultMessage;
if (palletIds != null && !palletIds.isEmpty()) {
notifyDetailQueryMapper.releasePalletCallingFlag(data.getSite(), data.getNotifyNo(), data.getSoorderNo());
System.out.println("已解除栈板调用状态,栈板列表:" + String.join(", ", palletIds) + " - rqrq");
// 返回成功信息包含解除的栈板列表 - rqrq
resultMessage = "强制完成成功!已解除以下栈板的调用状态:" + String.join("、", palletIds);
} else {
System.out.println("未找到需要解除调用的栈板 - rqrq");
resultMessage = "强制完成成功!未找到需要解除调用的栈板";
}
System.out.println("关闭申请单任务完成 - rqrq");
return resultMessage;
}
}

50
src/main/resources/mapper/automatedWarehouse/NotifyDetailQueryMapper.xml

@ -70,5 +70,55 @@
ORDER BY d.bom_item_no, d.serialNo
</select>
<!-- rqrq - 根据主键查询申请单订单记录 -->
<select id="getOrderByPrimaryKey" resultType="com.gaotao.modules.notify.entity.SOIssueNotifyOrderList">
SELECT
site,
notify_no AS notifyNo,
item_no AS itemNo,
soorder_no AS soorderNo,
fgpart_no AS fgPartNo,
push_wms_flag AS pushWmsFlag,
transport_flag AS transportFlag,
push_wcs_time AS pushWcsTime
FROM SOIssueNotifyOrderList WITH (NOLOCK)
WHERE site = #{site}
AND notify_no = #{notifyNo}
AND item_no = #{itemNo}
</select>
<!-- rqrq - 查询要解除调用的栈板列表 -->
<select id="getPalletsToRelease" resultType="String">
SELECT pallet_id
FROM pallet WITH (NOLOCK)
WHERE site = #{site}
AND calling_flag = 'Y'
AND remark LIKE '%' + #{site} + '%'
AND remark LIKE '%' + #{notifyNo} + '%'
AND remark LIKE '%' + #{soorderNo} + '%'
</select>
<!-- rqrq - 更新申请单的transport_flag为'Y'(用主键site+notify_no+item_no定位) -->
<update id="updateTransportFlag">
UPDATE SOIssueNotifyOrderList
SET transport_flag = 'Y'
WHERE site = #{site}
AND notify_no = #{notifyNo}
AND item_no = #{itemNo}
</update>
<!-- rqrq - 解除栈板调用状态(根据remark匹配) -->
<update id="releasePalletCallingFlag">
UPDATE pallet
SET calling_flag = 'N'
WHERE site = #{site}
AND calling_flag = 'Y'
AND remark LIKE '%' + #{site} + '%'
AND remark LIKE '%' + #{notifyNo} + '%'
AND remark LIKE '%' + #{soorderNo} + '%'
</update>
</mapper>
Loading…
Cancel
Save