|
|
@ -3,11 +3,14 @@ package com.ruoyi.warehouse.service.impl; |
|
|
|
import java.text.DecimalFormat; |
|
|
|
import java.text.SimpleDateFormat; |
|
|
|
import java.util.*; |
|
|
|
import java.util.function.Function; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
import com.github.pagehelper.Page; |
|
|
|
import com.ruoyi.common.core.domain.entity.SysUser; |
|
|
|
import com.ruoyi.common.core.page.PageDomain; |
|
|
|
import com.ruoyi.common.core.page.TableSupport; |
|
|
|
import com.ruoyi.common.core.redis.RedisCache; |
|
|
|
import com.ruoyi.common.exception.BusinessException; |
|
|
|
import com.ruoyi.common.utils.DateUtils; |
|
|
|
import com.ruoyi.common.utils.ShiroUtils; |
|
|
@ -18,6 +21,7 @@ import com.ruoyi.process.general.service.IProcessService; |
|
|
|
import com.ruoyi.process.todoitem.mapper.BizTodoItemMapper; |
|
|
|
import com.ruoyi.system.mapper.SysUserMapper; |
|
|
|
import com.ruoyi.system.service.impl.SysRoleServiceImpl; |
|
|
|
import com.ruoyi.warehouse.domain.VO.ExportWarehouseInventoryCheckVo; |
|
|
|
import com.ruoyi.warehouse.domain.VO.WarehouseInventoryCheckVO; |
|
|
|
import com.ruoyi.warehouse.domain.VO.WarehouseMaterialVO; |
|
|
|
import com.ruoyi.warehouse.domain.WarehouseInventoryCheckDetail; |
|
|
@ -57,6 +61,9 @@ public class WarehouseInventoryCheckServiceImpl implements IWarehouseInventoryCh |
|
|
|
@Autowired |
|
|
|
private SysRoleServiceImpl roleService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private RedisCache redisCache; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private TaskService taskService; |
|
|
|
|
|
|
@ -159,24 +166,27 @@ public class WarehouseInventoryCheckServiceImpl implements IWarehouseInventoryCh |
|
|
|
return returnList; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
public List<WarehouseInventoryCheckVO> selectWarehouseInventoryCheckListByObject(WarehouseInventoryCheck warehouseInventoryCheck) { |
|
|
|
return warehouseInventoryCheckMapper.selectWarehouseInventoryCheckList(warehouseInventoryCheck); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 新增仓库库存盘点 |
|
|
|
* |
|
|
|
* @param warehouseInventoryCheck 仓库库存盘点 |
|
|
|
* @return 结果 |
|
|
|
*/ |
|
|
|
@Transactional |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
@Override |
|
|
|
public int insertWarehouseInventoryCheck(WarehouseInventoryCheck warehouseInventoryCheck) |
|
|
|
{ |
|
|
|
String loginName = ShiroUtils.getLoginName(); |
|
|
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
|
|
|
String prefix = "KCPD" + simpleDateFormat.format(new Date()).replace("-", ""); |
|
|
|
|
|
|
|
String maxCode = warehouseInventoryCheckMapper.findMaxRoundCode(prefix); |
|
|
|
String inventoryCheckCode = redisCache.generateBillNo("KCPD"); |
|
|
|
|
|
|
|
String newCode = generateCode(prefix,maxCode); |
|
|
|
warehouseInventoryCheck.setInventoryCheckCode(newCode); |
|
|
|
warehouseInventoryCheck.setInventoryCheckCode(inventoryCheckCode); |
|
|
|
warehouseInventoryCheck.setCreateTime(DateUtils.getNowDate()); |
|
|
|
warehouseInventoryCheck.setCreateBy(loginName); |
|
|
|
|
|
|
@ -188,7 +198,7 @@ public class WarehouseInventoryCheckServiceImpl implements IWarehouseInventoryCh |
|
|
|
warehouseInventoryCheck.setMaterialTotal(inventoryCheckDetails.size()); |
|
|
|
for (WarehouseInventoryCheckDetail tempInventoryCheckDetail : inventoryCheckDetails) { |
|
|
|
WarehouseInventoryCheckDetail inventoryCheckDetail = new WarehouseInventoryCheckDetail(); |
|
|
|
inventoryCheckDetail.setInventoryCheckCode(newCode); |
|
|
|
inventoryCheckDetail.setInventoryCheckCode(inventoryCheckCode); |
|
|
|
inventoryCheckDetail.setInventoryCheckName(warehouseInventoryCheck.getInventoryCheckName()); |
|
|
|
inventoryCheckDetail.setMaterialNo(tempInventoryCheckDetail.getMaterialNo()); |
|
|
|
inventoryCheckDetail.setMaterialName(tempInventoryCheckDetail.getMaterialName()); |
|
|
@ -445,26 +455,62 @@ public class WarehouseInventoryCheckServiceImpl implements IWarehouseInventoryCh |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
*库存盘点单号生成规则 |
|
|
|
*系统自动生成,按照特定编码,编码暂用【KCPD+年月日+001】, |
|
|
|
*自增长,如:KCPD20231111001,KCPD20231111002 |
|
|
|
* |
|
|
|
*/ |
|
|
|
public static String generateCode(String prefix, String maxCode){ |
|
|
|
if (StringUtils.isEmpty(maxCode)){ |
|
|
|
return prefix + "001"; |
|
|
|
} |
|
|
|
* 根据盘点单号批量查找库存盘点 |
|
|
|
* */ |
|
|
|
@Override |
|
|
|
public List<WarehouseInventoryCheckVO> selectInventoryCheckListByCodes(String[] checkCodes) { |
|
|
|
return warehouseInventoryCheckMapper.selectInventoryCheckListByCodes(checkCodes); |
|
|
|
} |
|
|
|
|
|
|
|
//解析并递增编号
|
|
|
|
int sequence = Integer.parseInt(maxCode.substring(4)) + 1; |
|
|
|
/** |
|
|
|
* 导出库存盘点列表明细 |
|
|
|
* */ |
|
|
|
@Override |
|
|
|
public List<ExportWarehouseInventoryCheckVo> exportWarehouseInventoryCheckList(List<WarehouseInventoryCheckVO> list) { |
|
|
|
// 获取所有的库存盘点单号
|
|
|
|
List<String> collectInventoryCheckCodes = list.stream() |
|
|
|
.map(WarehouseInventoryCheckVO::getInventoryCheckCode) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
// 根据库存盘点单号查询对应的物料详情列表
|
|
|
|
List<WarehouseInventoryCheckDetail> warehouseInventoryCheckDetails = inventoryCheckDetailMapper.selectWarehouseInventoryCheckDetailByCodeList(collectInventoryCheckCodes); |
|
|
|
|
|
|
|
// 创建一个 WarehouseInventoryCheckVO 的 Map,键为库存盘点单号
|
|
|
|
Map<String, WarehouseInventoryCheckVO> warehouseInventoryCheckVOMap = list.stream() |
|
|
|
.collect(Collectors.toMap(WarehouseInventoryCheckVO::getInventoryCheckCode, Function.identity())); |
|
|
|
|
|
|
|
// 初始化导出列表
|
|
|
|
List<ExportWarehouseInventoryCheckVo> exportWarehouseInventoryCheckVos = new ArrayList<>(); |
|
|
|
|
|
|
|
for (WarehouseInventoryCheckDetail detail : warehouseInventoryCheckDetails) { |
|
|
|
ExportWarehouseInventoryCheckVo exportVo = new ExportWarehouseInventoryCheckVo(); |
|
|
|
|
|
|
|
// 从 WarehouseInventoryCheckDetail 填充数据
|
|
|
|
exportVo.setMaterialNo(detail.getMaterialNo()); |
|
|
|
exportVo.setMaterialName(detail.getMaterialName()); |
|
|
|
exportVo.setMaterialUnit(detail.getMaterialUnit()); |
|
|
|
exportVo.setMaterialDescribe(detail.getMaterialDescribe()); |
|
|
|
exportVo.setInventoryCheckNum(detail.getInventoryCheckNum()); |
|
|
|
exportVo.setInventoryAccountNum(detail.getInventoryAccountNum()); |
|
|
|
exportVo.setBatchNumber(detail.getBatchNumber()); |
|
|
|
exportVo.setWarehouseStoreAddress(detail.getWarehouseStoreAddress()); |
|
|
|
|
|
|
|
// 从 WarehouseInventoryCheckVO 填充数据,通过库存盘点单号进行关联
|
|
|
|
WarehouseInventoryCheckVO checkVO = warehouseInventoryCheckVOMap.get(detail.getInventoryCheckCode()); |
|
|
|
if (checkVO != null) { |
|
|
|
exportVo.setInventoryCheckCode(checkVO.getInventoryCheckCode()); |
|
|
|
exportVo.setInventoryCheckName(checkVO.getInventoryCheckName()); |
|
|
|
exportVo.setWarehouseCode(checkVO.getWarehouseCode()); |
|
|
|
exportVo.setWarehouseName(checkVO.getWarehouseName()); |
|
|
|
exportVo.setInventoryCheckDate(checkVO.getInventoryCheckDate()); |
|
|
|
exportVo.setMaterialTotal(checkVO.getMaterialTotal()); |
|
|
|
exportVo.setNumTotal(checkVO.getNumTotal()); |
|
|
|
} |
|
|
|
|
|
|
|
//检查序列号是否溢出
|
|
|
|
if (sequence > 999){ |
|
|
|
throw new BusinessException("当前编号已达到最大值999,请检查或调整策略"); |
|
|
|
// 添加到结果列表
|
|
|
|
exportWarehouseInventoryCheckVos.add(exportVo); |
|
|
|
} |
|
|
|
|
|
|
|
//格式化序列号,自动补零至三位
|
|
|
|
DecimalFormat df = new DecimalFormat("000"); |
|
|
|
return prefix + df.format(sequence); |
|
|
|
return exportWarehouseInventoryCheckVos; |
|
|
|
} |
|
|
|
} |
|
|
|