package com.consum.base.service; import com.consum.base.core.CodeGeneratorEnum; import com.consum.base.core.CodeGeneratorService; 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.security.core.parameters.P; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.ArrayList; 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; "; /** * @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(errorCounts); } int flag2 = inventoryGoodsService.update(inventoryGoodsList); if (flag2 != inventoryGoodsList.size()) { log.error("更新盘点单物品 失败"); return 0; } return 1; } }