package com.consum.base.service; import com.consum.base.core.CodeGeneratorEnum; import com.consum.base.core.CodeGeneratorService; import com.consum.base.core.tools.MapRowMapper; import com.consum.base.pojo.LWhFormInventoryDto; import com.consum.base.pojo.LWhFormInventoryParam; import com.consum.base.util.IdUtil; import com.consum.model.po.*; import com.iplatform.model.po.S_user_core; import com.walker.db.page.GenericPager; import com.walker.infrastructure.utils.DateUtils; import com.walker.infrastructure.utils.StringUtils; import com.walker.jdbc.service.BaseServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @Description 盘点 * @Author 卢庆阳 * @Date 2023/10/23 */ @Slf4j @Service public class LWhFormInventoryServiceImpl extends BaseServiceImpl { @Autowired private CodeGeneratorService codeGeneratorService; @Autowired private BaseWarehouseServiceImpl baseWarehouseService; @Autowired private FinSysTenantUserServiceImpl finSysTenantUserService; @Autowired private LWhFormInventoryGoodsServiceImpl inventoryGoodsService; private static final String QUERY_LIST = "select * from l_wh_form_inventory where 1=1 "; private static final String QUERY_PD_List = "SELECT bgt.GOODS_NAME goodsName,model.MODEL_NAME modelName,bgt.CLASSIFICATION,model.UNIT,\n" + " record.endCount,bgt.ID goodsTemplateId,model.ID modelsId\n" + "FROM BASE_GOODS_MODELS model\n" + " LEFT JOIN (SELECT COUNT(1) endCount, BASE_GOODS_MODELS_ID\n" + " FROM L_WH_GOODS\n" + " WHERE WAREHOUSE_TYPE = 0\n" + " AND WAREHOUSE_ID = 1\n" + " AND STATES = ?\n" + " GROUP BY BASE_GOODS_MODELS_ID) record ON record.BASE_GOODS_MODELS_ID = model.id\n" + "left join base_goods_template bgt on bgt.ID = model.GOODS_TEMPLATES_ID; "; private static final String QUERY_PD_DETAIL_LIST = "select lwfi.WAREHOUSE_NAME,lwfig.GOODS_TEMPLATE_NAME,\n" + " lwfig.BASE_GOODS_MODELS_NAME,\n" + " lwfig.INVENTORY_RESULT,\n" + " lwfig.INIT_COUNTS,\n" + " lwfig.INVENTORY_COUNTS,\n" + " lwfig.ERROR_COUNTS,\n" + " lwfi.AGENCY_NAME,\n" + " lwfi.OPERATOR_NAME,\n" + " lwfi.STOP_TIME\n" + "from l_wh_form_inventory lwfi\n" + " inner join l_wh_form_inventory_goods lwfig on lwfi.ID = lwfig.WH_FORM_INVENTORY_ID "; /** * @Description 新增 * @Author 卢庆阳 * @Date 2023/10/31 * @param param * @param currentUser 当前登录用户 * @param operatorUser 盘点人 * @param operatorUser2 监盘人 * @return */ public int add(LWhFormInventoryParam param, FinSysTenantUser currentUser, S_user_core operatorUser, S_user_core operatorUser2) { //新增盘点单 LWhFormInventory lWhFormInventory = new LWhFormInventory(); BeanUtils.copyProperties(param,lWhFormInventory); lWhFormInventory.setId(IdUtil.generateId()); //盘点单编码 String businessFormCode = codeGeneratorService.createBusinessFormCode(CodeGeneratorEnum.Inventory); lWhFormInventory.setBusinessFormCode(businessFormCode); //根据仓库id查询仓库 BaseWarehouse baseWarehouse = this.baseWarehouseService.getById(param.getWarehouseId()); if (baseWarehouse != null) { lWhFormInventory.setWarehouseName(baseWarehouse.getWarehouseName()); } lWhFormInventory.setOperatorName(operatorUser.getUser_name()); lWhFormInventory.setOperatorName2(operatorUser2.getUser_name()); lWhFormInventory.setStates(0); lWhFormInventory.setAgencyId(Long.valueOf(currentUser.getTenantId())); lWhFormInventory.setAgencyName(currentUser.getTenantName()); lWhFormInventory.setCreatorId(currentUser.getSysUserId()); lWhFormInventory.setCreatorName(currentUser.getUserName()); lWhFormInventory.setCreateTime(DateUtils.getDateTimeNumber(System.currentTimeMillis())); return this.insert(lWhFormInventory); } /** * @Description 盘点单列表查询 * @Author 卢庆阳 * @Date 2023/10/31 */ public GenericPager queryList(LWhFormInventoryParam param, FinSysTenantUser sysInfo) { StringBuilder sql = new StringBuilder(QUERY_LIST); HashMap paramts = new HashMap<>(); //盘点单号 if (!StringUtils.isEmpty(param.getBusinessFormCode())) { sql.append(" and BUSINESS_FORM_CODE like:BUSINESS_FORM_CODE "); paramts.put("BUSINESS_FORM_CODE", StringUtils.CHAR_PERCENT + param.getBusinessFormCode() + StringUtils.CHAR_PERCENT); } //盘点单名称 if (!StringUtils.isEmpty(param.getBusinessFormName())) { sql.append(" and BUSINESS_FORM_NAME =:BUSINESS_FORM_NAME "); paramts.put("BUSINESS_FORM_NAME", StringUtils.CHAR_PERCENT + param.getBusinessFormName() + StringUtils.CHAR_PERCENT); } //仓库编号 if (param.getWarehouseId() != null) { sql.append(" and WAREHOUSE_ID =:WAREHOUSE_ID "); paramts.put("WAREHOUSE_ID", param.getWarehouseId()); } //盘点时间 if (param.getInventoryDateStart() != null) { sql.append(" and INVENTORY_DATE >=:inventoryDateStart "); paramts.put("inventoryDateStart", param.getInventoryDateStart() * 1000000); } if (param.getInventoryDateEnd() != null) { sql.append(" and INVENTORY_DATE <:inventoryDateEnd "); paramts.put("inventoryDateEnd", param.getInventoryDateEnd() * 1000000 + 240000); } //机构 sql.append(" and AGENCY_ID =:AGENCY_ID "); paramts.put("AGENCY_ID", sysInfo.getTenantId()); sql.append(" ORDER BY CREATE_TIME DESC "); return selectSplit(sql.toString(), paramts, new LWhFormInventory()); } /** * @Description 盘点 * @Author 卢庆阳 * @Date 2023/10/31 * @param id 盘点单id */ public List queryPdList(Long id) { //1.根据盘点单id查询盘点单 LWhFormInventory lWhFormInventory = this.get(new LWhFormInventory(id)); if (lWhFormInventory == null) { log.error("盘点失败"); } //2.查询盘点单数据 List> list = this.select(QUERY_PD_List, new Object[]{lWhFormInventory.getWarehouseId()}); if (CollectionUtils.isEmpty(list)) { log.error("盘点失败"); return null; } //3.新增盘点单物品记录 int flag = inventoryGoodsService.add(list, lWhFormInventory.getWarehouseId()); if (flag != list.size()) { log.error("新增盘点单记录"); return null; } //4.根据盘点单id查询盘点单物品 return inventoryGoodsService.getByInventoryId(id); } /** * 暂存 * @author 卢庆阳 * @date 2023/10/31 */ public int temporaryStorage(LWhFormInventoryDto dto) { //1.根据盘点单id查询盘点单 LWhFormInventory lWhFormInventory = this.get(new LWhFormInventory(dto.getId())); if (lWhFormInventory == null) { log.error("根据盘点单id查询盘点单 失败"); return 0; } //2.修改盘点单 lWhFormInventory.setStates(1); lWhFormInventory.setInventoryDate(DateUtils.getDateTimeNumber(System.currentTimeMillis())); int flag1 = this.update(lWhFormInventory); if (flag1 == 0) { log.error("修改盘点单 失败"); return 0; } //3.更新盘点单物品 List inventoryGoodsList = dto.getInventoryGoodsList(); int flag2 = inventoryGoodsService.update(inventoryGoodsList); if (flag2 != inventoryGoodsList.size()) { log.error("更新盘点单物品 失败"); return 0; } return 1; } /** * 完成盘点 * @author 卢庆阳 * @date 2023/10/31 */ public int finishPd(LWhFormInventoryDto dto) { //1.根据盘点单id查询盘点单 LWhFormInventory lWhFormInventory = this.get(new LWhFormInventory(dto.getId())); if (lWhFormInventory == null) { log.error("根据盘点单id查询盘点单 失败"); return 0; } //2.修改盘点单 lWhFormInventory.setStates(2); lWhFormInventory.setStopTime(DateUtils.getDateTimeNumber(System.currentTimeMillis())); int flag1 = this.update(lWhFormInventory); if (flag1 == 0) { log.error("修改盘点单 失败"); return 0; } //3.更新盘点单物品 List inventoryGoodsList = dto.getInventoryGoodsList(); if (CollectionUtils.isEmpty(inventoryGoodsList)) { log.error("盘点单物品 为空"); return 0; } for (LWhFormInventoryGoods inventoryGoods : inventoryGoodsList) { int errorCounts = inventoryGoods.getInitCounts() - inventoryGoods.getInventoryCounts(); if (errorCounts >0 ) { inventoryGoods.setInventoryResult(3); } else if (errorCounts <0){ inventoryGoods.setInventoryResult(2); } else { inventoryGoods.setInventoryResult(1); } inventoryGoods.setErrorCounts(Math.abs(errorCounts)); } int flag2 = inventoryGoodsService.update(inventoryGoodsList); if (flag2 != inventoryGoodsList.size()) { log.error("更新盘点单物品 失败"); return 0; } return 1; } /** * @Description 异常明细列表查询 * @Author 卢庆阳 * @Date 2023/11/1 * @return */ public GenericPager> queryPdDetailList(LWhFormInventoryParam param, FinSysTenantUser sysInfo) { StringBuilder sql = new StringBuilder(QUERY_PD_DETAIL_LIST); HashMap paramts = new HashMap<>(); //机构 sql.append(" and AGENCY_ID like:AGENCY_ID "); if (param.getAgencyId() != null) { paramts.put("AGENCY_ID", param.getAgencyId() + StringUtils.CHAR_PERCENT); } else { paramts.put("AGENCY_ID", sysInfo.getTenantId() + StringUtils.CHAR_PERCENT); } //仓库编号 if (param.getWarehouseId() != null) { sql.append(" and WAREHOUSE_ID =:WAREHOUSE_ID "); paramts.put("WAREHOUSE_ID", param.getWarehouseId()); } //物品名称 if (!StringUtils.isEmpty(param.getGoodsTemplateName())) { sql.append(" and GOODS_TEMPLATE_NAME =:GOODS_TEMPLATE_NAME "); paramts.put("GOODS_TEMPLATE_NAME", StringUtils.CHAR_PERCENT + param.getGoodsTemplateName() + StringUtils.CHAR_PERCENT); } //规格型号 if (param.getBaseGoodsModelsId() != null) { sql.append(" and BASE_GOODS_MODELS_ID =:BASE_GOODS_MODELS_ID "); paramts.put("BASE_GOODS_MODELS_ID", param.getBaseGoodsModelsId()); } //类型(出入库类型) Integer inventoryResult = param.getInventoryResult(); if (inventoryResult != null) { sql.append(" and INVENTORY_RESULT =:INVENTORY_RESULT "); paramts.put("INVENTORY_RESULT", inventoryResult); } //出入库单号 if (param.getWarehouseFormCode() != null) { if (inventoryResult == 2) { //盘盈入库 sql.append(" and IN_BUSINESS_FORM_CODE =:IN_BUSINESS_FORM_CODE "); paramts.put("IN_BUSINESS_FORM_CODE", StringUtils.CHAR_PERCENT + param.getWarehouseFormCode() + StringUtils.CHAR_PERCENT); } else { //盘亏出库 sql.append(" and OUT_BUSINESS_FORM_CODE =:OUT_BUSINESS_FORM_CODE "); paramts.put("OUT_BUSINESS_FORM_CODE", StringUtils.CHAR_PERCENT + param.getWarehouseFormCode() + StringUtils.CHAR_PERCENT); } } //操作人 if (!StringUtils.isEmpty(param.getOperatorName())) { sql.append(" and OPERATOR_NAME =:OPERATOR_NAME "); paramts.put("OPERATOR_NAME", StringUtils.CHAR_PERCENT + param.getOperatorName() + StringUtils.CHAR_PERCENT); } //结束时间 if (param.getStopTimeStart() != null) { sql.append(" and STOP_TIME >=:stopTimeStart "); paramts.put("stopTimeStart", param.getStopTimeStart() * 1000000); } if (param.getStopTimeEnd() != null) { sql.append(" and STOP_TIME <:stopTimeEnd "); paramts.put("stopTimeEnd", param.getStopTimeEnd() * 1000000 + 240000); } sql.append(" ORDER BY CREATE_TIME DESC "); return selectSplit(sql.toString(), paramts, param.getPageNum(), param.getPageSize(), new MapRowMapper()); } }