Browse Source

feat(check): 更新盘点处理机制和系统参数管理

- 修改CountResult实体类中的处理方式常量,从调整库存、忽略差异、重新盘点改为人工处理和系统处理
- 新增manualHandleCount接口用于手动处理盘点结果
- 在PhysicalInventoryMapper中添加获取和更新盘点结果、系统参数等数据库操作方法
- 实现manualHandleCount业务逻辑,包括验证和更新处理标记
- 添加系统参数管理功能,支持开启关闭盘点模式和周期性盘点控制
- 集成系统参数验证和盘点状态检查机制
master
常熟吴彦祖 2 months ago
parent
commit
f7eae18a06
  1. 7
      src/main/java/com/gaotao/modules/check/controller/PhysicalInventoryController.java
  2. 11
      src/main/java/com/gaotao/modules/check/entity/CountResult.java
  3. 14
      src/main/java/com/gaotao/modules/check/mapper/PhysicalInventoryMapper.java
  4. 21
      src/main/java/com/gaotao/modules/check/service/PhysicalInventoryService.java
  5. 72
      src/main/java/com/gaotao/modules/check/service/impl/PhysicalInventoryServiceImpl.java
  6. 28
      src/main/resources/mapper/check/PhysicalInventoryMapper.xml

7
src/main/java/com/gaotao/modules/check/controller/PhysicalInventoryController.java

@ -421,4 +421,11 @@ public class PhysicalInventoryController {
int result = physicalInventoryService.saveExceptionHandle(site, countNo, username, exceptionList);
return R.ok().put("result", result);
}
@PostMapping("/manualHandleCount")
public R manualHandleCount(@RequestBody CountResultData query) {
physicalInventoryService.manualHandleCount(query);
return R.ok();
}
}

11
src/main/java/com/gaotao/modules/check/entity/CountResult.java

@ -187,11 +187,10 @@ public class CountResult {
/** 处理标记:已处理 - rqrq */
public static final String HANDLE_FLAG_YES = "Y";
/** 处理方式:调整库存 - rqrq */
public static final String HANDLE_TYPE_ADJUST = "ADJUST";
/** 处理方式:忽略差异 - rqrq */
public static final String HANDLE_TYPE_IGNORE = "IGNORE";
/** 处理方式:重新盘点 - rqrq */
public static final String HANDLE_TYPE_RECOUNT = "RECOUNT";
/** 处理方式:人工处理 - rqrq */
public static final String HANDLE_TYPE_MANUAL = "MANUAL";
/** 处理方式:系统处理 - rqrq */
public static final String HANDLE_TYPE_SYSTEM = "SYSTEM";
}

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

@ -9,6 +9,7 @@ import com.gaotao.modules.automatedWarehouse.entity.WmsOrderTaskDetailData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/**
@ -575,4 +576,17 @@ public interface PhysicalInventoryMapper extends BaseMapper<CountHeader> {
@Param("countNo") String countNo, @Param("unitId") String unitId,
@Param("palletId") String palletId, @Param("handleFlag") String handleFlag,
@Param("handleType") String handleType, @Param("username") String username);
CountResultData getCountResultById(Long id);
void updateCountResultHandleFlagForId(@Param("id") Long id,@Param("handleFlag") String handleFlag);
String getSysIfCount(@Param("site") String site);
String getSysCountCycle(@Param("site") String site);
void updateLastPandianHU(@Param("site") String site,@Param("lastPandian") Date lastPandian);
void updateSysIfCount(@Param("site") String site,@Param("value") String value);
}

21
src/main/java/com/gaotao/modules/check/service/PhysicalInventoryService.java

@ -370,4 +370,25 @@ public interface PhysicalInventoryService {
*/
int saveExceptionHandle(String site, String countNo, String username,
java.util.List<java.util.Map<String, Object>> exceptionList);
void manualHandleCount( CountResultData data);
/**
* @Description 根据工厂获取系统参数判断当前是否盘点模式
* @param site 工厂编码
* @return String 结果 Y 可以盘点 N不可盘点
* @author rqrq
*/
String getSysIfCount(String site);
/**
*
* @description 开启或者关闭盘点模式
* @author 常熟吴彦祖
* @date 2025/12/23 13:52
* @return void
*/
void updateSysIfCount(String site, String value);
}

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

@ -20,6 +20,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.time.*;
import java.util.*;
import java.util.stream.Collectors;
import java.util.Set;
@ -1867,6 +1868,77 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl<PhysicalInventoryM
System.out.println("saveExceptionHandle 结束,更新数量: " + updateCount);
return updateCount;
}
@Override
public void manualHandleCount( CountResultData data){
CountResultData result = baseMapper.getCountResultById(data.getId());
if(result==null){
throw new RuntimeException("盘点结果标签不存在");
}
if( "Y".equals(result.getHandleFlag())){
throw new RuntimeException("盘点结果标签已处理");
}
if( CountResult.HANDLE_TYPE_SYSTEM.equals(data.getHandleType())){
throw new RuntimeException("后台数据不一致,请刷新界面");
}
baseMapper.updateCountResultHandleFlagForId(data.getId(), "Y");
}
@Override
public String getSysIfCount(String site){
return baseMapper.getSysIfCount(site);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateSysIfCount(String site, String value) {
String nowStatus=baseMapper.getSysIfCount(site);
if("Y".equals( value)){
if("Y".equals(nowStatus)){
throw new RuntimeException("盘点模式已开启,无需重复开启");
}
String strCycle=baseMapper.getSysCountCycle(site);
Integer cycle=Integer.parseInt(strCycle);
if (cycle <= 0 || cycle > 12) {
throw new RuntimeException("盘点周期必须在1-12之间");
}
YearMonth now = YearMonth.now(); // 获取当前年月
int currentMonth = now.getMonthValue(); // 1~12
// 计算当前处于第几个周期从0开始
int lastCompletedCycleIndex = (currentMonth - 1) / cycle;
int month;
if (lastCompletedCycleIndex < 0) {
month= 0;
} else {
// 上一周期的最后一个月
month= (lastCompletedCycleIndex ) * cycle;
}
// 获取当前年份
int currentYear = LocalDate.now().getYear();
YearMonth yearMonth = YearMonth.of(currentYear, month);
LocalDate lastDay = yearMonth.atEndOfMonth();
LocalDateTime lastDayTime = lastDay.atTime(23, 59, 59);
Date lastPandian=Date.from(lastDayTime.atZone(ZoneId.of("Asia/Shanghai")).toInstant());
log.info("获得上次盘点结束日期: {}", lastPandian.toString());
baseMapper.updateLastPandianHU(site, lastPandian);
//开启盘点模式
}else {
if("N".equals(nowStatus)){
throw new RuntimeException("盘点模式已关闭,无需重复关闭");
}
// 盘点单结束才能退出盘点- rqrq
CountHeaderData activeCount = baseMapper.checkActiveCountExists(site);
if (activeCount != null) {
throw new RuntimeException("存在进行中的盘点单:" + activeCount.getCountNo() + "(" + activeCount.getStatusDesc() + "),请先完成或取消该盘点单");
}
}
baseMapper.updateSysIfCount(site, value);
}
/**
* @Description 盘点完成后处理任务单与RFID接口逻辑一致- rqrq

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

@ -1004,4 +1004,32 @@
<!-- AND count_no = #{countNo}-->
</update>
<select id="getCountResultById" resultType="CountResultData">
select
id,site,count_no,unit_id,part_no,qty,batch_no,location_id,warehouse_id,wdr,pallet_id,count_date,count_user,count_result,
remark,created_by,created_date,diff_qty,handle_flag,handle_type
from count_result where id = #{id}
</select>
<update id="updateCountResultHandleFlagForId">
UPDATE count_result
SET handle_flag = #{handleFlag}
WHERE id = #{id}
</update>
<select id="getSysIfCount" resultType="String">
select dbo.Get_SysParamenter(#{site},10001)
</select>
<select id="getSysCountCycle" resultType="String">
select dbo.Get_SysParamenter(#{site},10002)
</select>
<update id="updateLastPandianHU">
update handling_unit set count_flag='N' where site=#{site} and count_flag='Y' and #{lastPandian}> isnull(last_count_date,'2000-01-01')
</update>
<update id="updateSysIfCount">
update sysParameters set paraValue=#{value} where site=#{site} and parameterId='10001'
</update>
</mapper>
Loading…
Cancel
Save