package com.consum.base.service; import com.consum.base.Constants; import com.consum.base.core.CodeGeneratorEnum; import com.consum.base.core.CodeGeneratorService; import com.consum.base.core.WhBusinessEnum; import com.consum.base.core.param.BaseWarehouseParam1; import com.consum.base.pojo.*; import com.consum.base.util.IdUtil; import com.consum.model.po.*; import com.consum.model.vo.LWhFormOutputVo; import com.consum.model.vo.LWhFormTransferVo; import com.consum.model.vo.LWhGoodsRecordVo; 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 org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; /** * @Description 调拨管理 * @Author 卢庆阳 * @Date 2023/10/30 */ @Service public class LWhFormTransferServiceImpl extends BaseServiceImpl { @Autowired private BaseWarehouseServiceImpl baseWarehouseService; @Autowired private CodeGeneratorService codeGeneratorService; @Autowired private FinSysTenantServiceImpl finSysTenantService; @Autowired private LWhGoodsService lWhGoodsService; @Autowired private LWhProcureModelService lWhProcureModelService; @Autowired private LWhFormOutputCoreService lWhFormOutputCoreService; @Autowired private LWhFormOutputServiceImpl lWhFormOutputService; @Autowired private LWhGoodsRecordService lWhGoodsRecordService; @Autowired private BaseGoodsModelsServiceImpl baseGoodsModelsService; private static String QUERY_FORM_TRANSFER_LIST = "SELECT * FROM l_wh_form_transfer WHERE 1 = 1"; /** * @Description 新增 * @Author 卢庆阳 * @Date 2023/10/30 */ public int add(LWhFormTransferParam param, S_user_core currentUser, FinSysTenantUser sysInfo) { //1.新增调拨单记录 LWhFormTransfer lWhFormTransfer = new LWhFormTransfer(); //调拨单id long lWhFormTransferId = IdUtil.generateId(); lWhFormTransfer.setId(lWhFormTransferId); lWhFormTransfer.setBusinessType(0); lWhFormTransfer.setBusinessFormCode(codeGeneratorService.createBusinessFormCode(CodeGeneratorEnum.Transfer)); Long warehouseId = param.getInWarehouseId(); lWhFormTransfer.setInWarehouseId(warehouseId); //根据仓库id查询仓库 BaseWarehouse warehouse = this.baseWarehouseService.getById(warehouseId); if (warehouse == null) { log.error("仓库不存在"); return 0; } lWhFormTransfer.setInWarehouseName(warehouse.getWarehouseName()); lWhFormTransfer.setInAgencyId(Long.valueOf(sysInfo.getTenantId())); lWhFormTransfer.setInAgencyName(sysInfo.getTenantName()); //根据机构id查询调拨机构 FinSysTenant finSysTenant = finSysTenantService.get(new FinSysTenant(param.getOutAgencyId())); if (finSysTenant == null) { log.error("调拨机构不存在"); return 0; } lWhFormTransfer.setOutAgencyId(finSysTenant.getId()); lWhFormTransfer.setOutAgencyName(finSysTenant.getName()); lWhFormTransfer.setOperatorId(sysInfo.getId()); lWhFormTransfer.setOperatorName(sysInfo.getUserName()); lWhFormTransfer.setCreateTime(param.getCreateTime()); lWhFormTransfer.setStates(0); lWhFormTransfer.setProcureDoc(param.getProcureDoc()); int flag1 = this.insert(lWhFormTransfer); if (flag1 == 0) { log.error("新增调拨单失败"); return 0; } //2.新增物品型号记录 List models = param.getModels(); List modelList = new ArrayList<>(); for (LWhProcureModelParams model : models) { LWhProcureModel lWhProcureModel = new LWhProcureModel(); lWhProcureModel.setId(IdUtil.generateId()); lWhProcureModel.setBusinessType(2); lWhProcureModel.setBusinessId(lWhFormTransferId); lWhProcureModel.setBaseGoodsModelsId(model.getBaseGoodsModelsId()); lWhProcureModel.setCounts(model.getCounts()); //根据物品型号查询物品库存 int goodsNum = this.lWhGoodsService.queryGoodsModelNum(warehouseId, model.getBaseGoodsModelsId(), (short) 1, null); lWhProcureModel.setWorehouseCount(goodsNum); modelList.add(lWhProcureModel); } int flag2 = this.lWhProcureModelService.insert(modelList); if (flag2 != modelList.size()) { log.error("新增物品型号失败"); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return 0; } return 1; } /** * @Description 列表查询 * @Author 卢庆阳 * @Date 2023/10/30 */ public GenericPager queryFormTransferList(LWhFormTransferParam param) { HashMap paramts = new HashMap<>(); StringBuilder sql = new StringBuilder(QUERY_FORM_TRANSFER_LIST); //调拨单号 if (!StringUtils.isEmpty(param.getBusinessFormCode())) { sql.append(" and BUSINESS_FORM_CODE like :businessFormCode "); paramts.put("businessFormCode", StringUtils.CHAR_PERCENT + param.getBusinessFormCode() + StringUtils.CHAR_PERCENT); } //物品名称 if (!StringUtils.isEmpty(param.getGoodsTemplateName())) { sql.append(" AND id IN (SELECT BUSINESS_ID FROM L_WH_PROCURE_MODEL procureModel LEFT JOIN BASE_GOODS_MODELS baseModel ON procureModel.BASE_GOODS_MODELS_ID=baseModel.ID LEFT JOIN BASE_GOODS_TEMPLATE baseTemp ON baseModel.GOODS_TEMPLATES_ID=baseTemp.id WHERE procureModel.BUSINESS_TYPE=1 AND baseTemp.GOODS_NAME LIKE :goodsTemplateName)"); paramts.put("goodsTemplateName", StringUtils.CHAR_PERCENT + param.getGoodsTemplateName() + StringUtils.CHAR_PERCENT); } //调拨机构 if (param.getOutAgencyId() != null){ sql.append(" and OUT_AGENCY_ID = :OUT_AGENCY_ID "); paramts.put("OUT_AGENCY_ID", param.getOutAgencyId()); } //接收机构 if (param.getInAgencyId() != null){ sql.append(" and IN_AGENCY_ID = :IN_AGENCY_ID "); paramts.put("IN_AGENCY_ID", param.getInAgencyId() ); } //状态 if (param.getStates() != null) { sql.append(" and states =:states "); paramts.put("states", param.getStates()); } //创建人 if (!StringUtils.isEmpty(param.getOperatorName())) { sql.append(" and OPERATOR_NAME =:OPERATOR_NAME "); paramts.put("OPERATOR_NAME", param.getOperatorName()); } //申请时间 if (param.getCreateTimeStart() != null) { sql.append(" and CREATE_TIME >=:createTimeStart "); paramts.put("createTimeStart", param.getCreateTimeStart() * 1000000); } if (param.getCreateTimeEnd() != null) { sql.append(" and CREATE_TIME <:createTimeEnd "); paramts.put("createTimeEnd", param.getCreateTimeEnd() * 1000000 + 240000); } //接收时间 if (param.getInTimeStart() != null) { sql.append(" and IN_TIME >=:inTimeStart "); paramts.put("inTimeStart", param.getInTimeStart() * 1000000); } if (param.getInTimeEnd() != null) { sql.append(" and IN_TIME <:inTimeEnd "); paramts.put("inTimeEnd", param.getInTimeEnd() * 1000000 + 240000); } sql.append(" ORDER BY CREATE_TIME DESC"); GenericPager genericPager = selectSplit(sql.toString(), paramts, new LWhFormTransfer()); return genericPager; } /** * @Description 根据id查询详情 * @Author 卢庆阳 * @Date 2023/10/30 */ public LWhFormTransferVo getById(Long id) { LWhFormTransferVo vo = new LWhFormTransferVo(); //1.查询调拨单 LWhFormTransfer lWhFormTransfer = this.get(new LWhFormTransfer(id)); if (lWhFormTransfer != null) { BeanUtils.copyProperties(lWhFormTransfer,vo); } //2.查询物品型号 List models = this.lWhProcureModelService.getModelByForm(WhBusinessEnum.DIAOBO, id); if (!CollectionUtils.isEmpty(models)) { vo.setModels(models); } return vo; } /** * @Description 导出调拨出库单 * @Author 卢庆阳 * @Date 2023/10/31 */ public LWhFormOutputVo export(Long id, S_user_core currentUser) { LWhFormOutputVo result = new LWhFormOutputVo(); long dealTime = DateUtils.getDateTimeNumber(System.currentTimeMillis()); //1.根据调拨单生成出库单 Long outWarehouseFormId = this.lWhFormOutputCoreService.createOutFormByTransId(id, currentUser, dealTime); //2.出库单id查询出库单 LWhFormOutput lWhFormOutput = this.lWhFormOutputService.get(new LWhFormOutput(outWarehouseFormId)); if (lWhFormOutput!= null) { BeanUtils.copyProperties(lWhFormOutput,result); } //3.根据进出库流水总表id查询l_wh_goods_record LWhGoodsRecord record = new LWhGoodsRecord(); record.setWarehouseFlowId(lWhFormOutput.getWarehouseFlowId()); List recordList = this.lWhGoodsRecordService.select(record); List voList = new ArrayList<>(); if (!CollectionUtils.isEmpty(recordList)) { for (LWhGoodsRecord lWhGoodsRecord : recordList) { LWhGoodsRecordVo vo = new LWhGoodsRecordVo(); BeanUtils.copyProperties(lWhGoodsRecord,vo); //根据型号id查询型号 BaseGoodsModels baseGoodsModels = baseGoodsModelsService.get(new BaseGoodsModels(id)); if (baseGoodsModels != null) { vo.setUnit(baseGoodsModels.getUnit()); } voList.add(vo); } } result.setRecordVoList(voList); return result; } /** * 撤销 * @author 卢庆阳 * @date 2023/10/31 */ public int updateStatus(Long id) { LWhFormTransfer lWhFormTransfer = new LWhFormTransfer(id); lWhFormTransfer.setStates(4); return this.update(lWhFormTransfer); } }