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.LWhFormTransferParam;
|
import com.consum.base.pojo.LWhProcureModelParams;
|
import com.consum.base.pojo.LWhProcureModelUserDTO;
|
import com.consum.base.pojo.query.TransferQryDto;
|
import com.consum.base.util.IdUtil;
|
import com.consum.model.po.BaseGoodsModels;
|
import com.consum.model.po.BaseWarehouse;
|
import com.consum.model.po.FinSysTenant;
|
import com.consum.model.po.FinSysTenantUser;
|
import com.consum.model.po.LWhFormOutput;
|
import com.consum.model.po.LWhFormTransfer;
|
import com.consum.model.po.LWhGoodsRecord;
|
import com.consum.model.po.LWhProcureModel;
|
import com.consum.model.po.LWhProcureModelUser;
|
import com.consum.model.vo.LWhFormOutputVo;
|
import com.consum.model.vo.LWhFormTransferVo;
|
import com.consum.model.vo.LWhGoodsRecordVo;
|
import com.consum.model.vo.LWhProcureModelVo;
|
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 java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import org.apache.commons.compress.utils.Lists;
|
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;
|
|
/**
|
* @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;
|
@Autowired
|
private LWhProcureModelUserServiceImpl lWhProcureModelUserService;
|
|
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);
|
|
Integer businessType = param.getTransferBusinessType();
|
// 业务类型 调拨/部门分发/部门退回 单据类型。0仓库调拨;1部门分发;2部门物品回退
|
// TODO 枚举字典
|
lWhFormTransfer.setBusinessType(businessType);
|
|
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());
|
//0=待出库;1=待接收;2=已入库库:4=已撤销
|
lWhFormTransfer.setStates(0);
|
lWhFormTransfer.setProcureDoc(param.getProcureDoc());
|
|
//3.当业务类型为部门分发时 添加部门分发记录和使用人
|
if (businessType == 1) {
|
//部门分发类型 出库仓库类型0机构1部门
|
// TODO 出库业务类型 联系电话
|
lWhFormTransfer.setOutWarehouseType(1);
|
}
|
int flag1 = this.insert(lWhFormTransfer);
|
if (flag1 == 0) {
|
log.error("新增调拨单失败");
|
return 0;
|
}
|
|
//2.新增物品型号记录
|
List<LWhProcureModelParams> models = param.getModels();
|
List<LWhProcureModel> modelList = new ArrayList<>();
|
for (LWhProcureModelParams model : models) {
|
LWhProcureModel lWhProcureModel = new LWhProcureModel();
|
lWhProcureModel.setId(IdUtil.generateId());
|
// 物品型号业务类型
|
lWhProcureModel.setBusinessType(model.getProcureModelBusinessType());
|
lWhProcureModel.setBusinessId(lWhFormTransferId);
|
lWhProcureModel.setBaseGoodsModelsId(model.getBaseGoodsModelsId());
|
lWhProcureModel.setCounts(model.getCounts());
|
//根据物品型号查询物品库存
|
int goodsNum = this.lWhGoodsService.queryGoodsModelNum(0, warehouseId, model.getBaseGoodsModelsId(), (short) 1, null);
|
lWhProcureModel.setWorehouseCount(goodsNum);
|
|
//3.当业务类型为部门分发时 添加部门分发记录和使用人
|
// 单据类型 1 采购2 调拨 3出库4部门分发
|
if (model.getProcureModelBusinessType() == 4) {
|
List<LWhProcureModelUser> procureModelUserList = Lists.newArrayList();
|
for (LWhProcureModelUserDTO lWhProcureModelUserDTO : model.getlWhProcureModelUserList()) {
|
LWhProcureModelUser lWhProcureModelUser = new LWhProcureModelUser();
|
lWhProcureModelUser.setId(IdUtil.generateId());
|
lWhProcureModelUser.setTransBusinessId(lWhFormTransferId);
|
lWhProcureModelUser.setWhProcureModelId(lWhProcureModel.getId());
|
lWhProcureModelUser.setBaseGoodsModelsId(model.getBaseGoodsModelsId());
|
lWhProcureModelUser.setNowUserName(lWhProcureModelUserDTO.getNowUserName());
|
lWhProcureModelUser.setNowUserPhone(lWhProcureModelUserDTO.getNowUserPhone());
|
lWhProcureModelUser.setGoodsNum(lWhProcureModelUserDTO.getGoodsNum());
|
procureModelUserList.add(lWhProcureModelUser);
|
}
|
int procureInsertNum = lWhProcureModelUserService.insert(procureModelUserList);
|
if (procureInsertNum != procureModelUserList.size()) {
|
log.error("新增物品使用信息失败");
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
return 0;
|
}
|
}
|
|
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<LWhFormTransfer> queryFormTransferList(TransferQryDto param) {
|
HashMap<String, Object> 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<LWhProcureModel> models = this.lWhProcureModelService.getModelByForm(WhBusinessEnum.DIAOBO, id);
|
List<LWhProcureModel> models = this.lWhProcureModelService.getModelByForm(null, id);
|
|
if (!CollectionUtils.isEmpty(models)) {
|
List<LWhProcureModelVo> lWhProcureModelVoList = Lists.newArrayList();
|
for (LWhProcureModel model : models) {
|
LWhProcureModelVo lWhProcureModelVo = new LWhProcureModelVo();
|
BeanUtils.copyProperties(model, lWhProcureModelVo);
|
|
LWhProcureModelUser lWhProcureModelUser = new LWhProcureModelUser();
|
lWhProcureModelUser.setWhProcureModelId(model.getId());
|
List<LWhProcureModelUser> select = lWhProcureModelUserService.select(lWhProcureModelUser);
|
lWhProcureModelVo.setProcureModelUsersList(select);
|
lWhProcureModelVoList.add(lWhProcureModelVo);
|
}
|
vo.setModels(lWhProcureModelVoList);
|
}
|
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<LWhGoodsRecord> recordList = this.lWhGoodsRecordService.select(record);
|
List<LWhGoodsRecordVo> 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);
|
}
|
|
public GenericPager<Map<String, Object>> queryTransferInfo(TransferQryDto transferQryDto) {
|
|
HashMap<String, Object> paramts = new HashMap<>();
|
StringBuilder sql = new StringBuilder("SELECT\n"
|
+ "\tft.id,\n"
|
+ "\tft.BUSINESS_FORM_CODE businessCode,\n"
|
+ "\tbgt.GOODS_NAME goodsName,\n"
|
+ "\tbgt.CLASSIFICATION goodsType,\n"
|
+ "\tbgm.id goodsModelId,\n"
|
+ "\tbgm.MODEL_NAME goodsModelName,\n"
|
+ "\tpm.COUNTS goodsCount,\n"
|
+ "\tfst.`name` tennatName,\n"
|
+ "\tfstd.NAME departmentName,\n"
|
+ "\tft.OPERATOR_ID distributor,\n"
|
+ "\tft.CREATE_TIME TIME \n"
|
+ "FROM\n"
|
+ "\tl_wh_form_transfer ft\n"
|
+ "\tLEFT JOIN l_wh_procure_model pm ON ft.ID = pm.BUSINESS_ID\n"
|
+ "\tLEFT JOIN base_goods_models bgm ON bgm.GOODS_TEMPLATES_ID = pm.BASE_GOODS_MODELS_ID\n"
|
+ "\tLEFT JOIN base_goods_template bgt ON bgt.id = bgm.GOODS_TEMPLATES_ID\n"
|
+ "\tLEFT JOIN fin_sys_tenant_user fstu ON fstu.id = ft.OPERATOR_ID\n"
|
+ "\tLEFT JOIN fin_sys_tenant_department fstd ON fstu.SYS_DEPT_ID = fstd.ID \n"
|
+ "\tLEFT JOIN fin_sys_tenant fst ON fst.id = fstd.TENANT_ID where 1=1 ");
|
//单号
|
if (StringUtils.isNotEmpty(transferQryDto.getBusinessFormCode())) {
|
sql.append("AND BUSINESS_FORM_CODE like :businessFormCode ");
|
paramts.put("businessFormCode", StringUtils.CHAR_PERCENT + transferQryDto.getBusinessFormCode() + StringUtils.CHAR_PERCENT);
|
}
|
//物品名称
|
if (StringUtils.isNotEmpty(transferQryDto.getGoodsTemplateName())) {
|
sql.append("AND bgt.GOODS_NAME like:goodsName ");
|
paramts.put("goodsName", StringUtils.CHAR_PERCENT + transferQryDto.getGoodsTemplateName() + StringUtils.CHAR_PERCENT);
|
}
|
// 规格型号
|
if (transferQryDto.getBaseGoodsTemplateId() != null) {
|
sql.append("AND bgm.id =:goodsModelId ");
|
paramts.put("goodsModelId", transferQryDto.getBaseGoodsTemplateId());
|
}
|
//调拨机构
|
if (transferQryDto.getOutAgencyId() != null) {
|
sql.append("AND OUT_AGENCY_ID = :OUT_AGENCY_ID ");
|
paramts.put("OUT_AGENCY_ID", transferQryDto.getOutAgencyId());
|
}
|
|
//创建人
|
if (StringUtils.isNotEmpty(transferQryDto.getOperatorName())) {
|
sql.append("AND ft.OPERATOR_NAME =:OPERATOR_NAME ");
|
paramts.put("OPERATOR_NAME", transferQryDto.getOperatorName());
|
}
|
//申请时间
|
if (transferQryDto.getCreateTimeStart() != null) {
|
sql.append("AND ft.CREATE_TIME >=:createTimeStart ");
|
paramts.put("createTimeStart", transferQryDto.getCreateTimeStart() * 1000000);
|
}
|
if (transferQryDto.getCreateTimeEnd() != null) {
|
sql.append("AND ft.CREATE_TIME <:createTimeEnd ");
|
paramts.put("createTimeEnd", transferQryDto.getCreateTimeEnd() * 1000000 + 240000);
|
}
|
sql.append("ORDER BY ft.CREATE_TIME DESC");
|
|
GenericPager<Map<String, Object>> mapGenericPager = this.selectSplit(sql.toString(), paramts, transferQryDto.getPageNum(), transferQryDto.getPageSize(),
|
new MapRowMapper());
|
|
return mapGenericPager;
|
}
|
|
|
}
|