package com.consum.base.service.impl;
|
|
import com.consum.base.core.CodeGeneratorEnum;
|
import com.consum.base.core.CodeGeneratorService;
|
import com.consum.base.core.DepUsingFormBackCoreServiceImpl;
|
import com.consum.base.core.utils.IdUtil;
|
import com.consum.base.core.utils.MapUtils;
|
import com.consum.base.core.utils.MapperUtil;
|
import com.consum.base.core.utils.PageUtil;
|
import com.consum.base.pojo.dto.UsingFormBackDetailDTO;
|
import com.consum.base.pojo.query.UsingFormBackQry;
|
import com.consum.base.pojo.request.UsingFormBackGoodsInfo;
|
import com.consum.base.pojo.request.UsingFormBackParam;
|
import com.consum.base.pojo.request.baseGoodModel;
|
import com.consum.base.pojo.response.BaseGoodsTemplateInfo;
|
import com.consum.base.pojo.response.UseInfo;
|
import com.consum.base.pojo.response.UsingFormBackDetailListVO;
|
import com.consum.base.pojo.response.UsingFormBackDetailVO;
|
import com.consum.base.pojo.response.UsingFormBackGoodsTemplateInfo;
|
import com.consum.base.pojo.response.UsingFormBackModelInfo;
|
import com.consum.base.pojo.response.UsingFormBackVO;
|
import com.consum.base.service.BaseCategoryService;
|
import com.consum.base.service.FinSysTenantDepartmentService;
|
import com.consum.base.service.LWhFormTransferService;
|
import com.consum.base.service.UsingFormBackGoodsService;
|
import com.consum.base.service.UsingFormBackModelService;
|
import com.consum.base.service.UsingFormBackService;
|
import com.consum.model.po.BaseCategory;
|
import com.consum.model.po.FinSysTenantDepartment;
|
import com.consum.model.po.FinSysTenantUser;
|
import com.consum.model.po.LWhFormTransfer;
|
import com.consum.model.po.UsingFormBack;
|
import com.consum.model.po.UsingFormBackGoods;
|
import com.consum.model.po.UsingFormBackModel;
|
import com.iplatform.model.po.S_user_core;
|
import com.walker.db.page.GenericPager;
|
import com.walker.infrastructure.utils.CollectionUtils;
|
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 java.util.stream.Collectors;
|
import javax.annotation.Resource;
|
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.annotation.Transactional;
|
|
/**
|
* @author asus
|
* @version 1.0
|
* @description: 物品回收单
|
* @date 2023/12/1 11:27
|
*/
|
@Service
|
public class UsingFormBackServiceImpl extends BaseServiceImpl implements UsingFormBackService {
|
|
@Autowired
|
private CodeGeneratorService codeGeneratorService;
|
@Autowired
|
private BaseCategoryService baseCategoryService;
|
@Autowired
|
private UsingFormBackModelService usingFormBackModelService;
|
@Autowired
|
private UsingFormBackGoodsService usingFormBackGoodsService;
|
@Autowired
|
private FinSysTenantDepartmentService finSysTenantDepartmentService;
|
@Autowired
|
private LWhFormTransferService lWhFormTransferService;
|
@Resource
|
private DepUsingFormBackCoreServiceImpl depUsingFormBackCoreService;
|
|
@Override
|
public void add(UsingFormBackParam usingFormBackParam, FinSysTenantUser sysInfo, S_user_core currentUser) {
|
|
Long departmentId = usingFormBackParam.getDepartmentId();
|
Long operatorId = usingFormBackParam.getOperatorId();
|
String operatorName = usingFormBackParam.getOperatorName();
|
Long backTime = usingFormBackParam.getDealTime();
|
String procureDoc = usingFormBackParam.getProcureDoc();
|
List<UsingFormBackGoodsInfo> goodsList = usingFormBackParam.getGoods();
|
|
// 检查部门是否存在
|
FinSysTenantDepartment department = finSysTenantDepartmentService.getById(departmentId);
|
if (department == null) {
|
throw new RuntimeException("部门不存在");
|
}
|
String departmentName = department.getName();
|
|
// 添加退回表单
|
Long usingFormBackId = addUsingFormBack(sysInfo, departmentId, departmentName, operatorId, operatorName, backTime, procureDoc);
|
|
// 批量插入退回商品和退回商品模型
|
List<UsingFormBackGoods> goodsBatch = new ArrayList<>();
|
List<UsingFormBackModel> modelBatch = new ArrayList<>();
|
|
for (UsingFormBackGoodsInfo goodsInfo : goodsList) {
|
UsingFormBackGoods goods = createUsingFormBackGoods(usingFormBackId, goodsInfo);
|
goodsBatch.add(goods);
|
|
for (baseGoodModel model : goodsInfo.getModels()) {
|
UsingFormBackModel formModel = createUsingFormBackModel(usingFormBackId, goods.getId(), goodsInfo, model);
|
modelBatch.add(formModel);
|
}
|
}
|
|
// 批量插入退回商品和退回商品模型
|
usingFormBackModelService.insertBatch(goodsBatch);
|
usingFormBackGoodsService.insertBatch(modelBatch);
|
|
depUsingFormBackCoreService.updateBack(usingFormBackId, currentUser, DateUtils.getDateTimeNumber(System.currentTimeMillis()));
|
}
|
|
private UsingFormBackGoods createUsingFormBackGoods(Long usingFormBackId, UsingFormBackGoodsInfo goodsInfo) {
|
UsingFormBackGoods goods = new UsingFormBackGoods();
|
goods.setId(IdUtil.generateId());
|
goods.setUsingFormBackId(usingFormBackId);
|
goods.setBaseGoodsTemplateId(goodsInfo.getBaseGoodsTemplateId());
|
goods.setBaseGoodsTemplateName(goodsInfo.getGoodsTemplateName());
|
|
BaseCategory baseCategory = baseCategoryService.getById(goodsInfo.getBaseCategoryId());
|
goods.setCategoryName(baseCategory.getCategoryName());
|
goods.setClassification(baseCategory.getClassification());
|
|
LWhFormTransfer lWhFormTransfer = lWhFormTransferService.selectById(goodsInfo.getTransBusinessId());
|
goods.setTransOutWarehouseType(lWhFormTransfer.getOutWarehouseType());
|
goods.setTransOutWarehouseId(lWhFormTransfer.getOutWarehouseId());
|
|
return goods;
|
}
|
|
private UsingFormBackModel createUsingFormBackModel(Long usingFormBackId, Long usingFormBackGoodsId, UsingFormBackGoodsInfo goodsInfo,
|
baseGoodModel model) {
|
UsingFormBackModel formModel = new UsingFormBackModel();
|
formModel.setId(IdUtil.generateId());
|
formModel.setUsingFormBackId(usingFormBackId);
|
formModel.setUsingFormBackGoodsId(usingFormBackGoodsId);
|
formModel.setBaseGoodsTemplateId(model.getGoodsTemplatesId());
|
formModel.setBaseGoodsTemplateName(goodsInfo.getGoodsTemplateName());
|
formModel.setClassification(model.getClassification());
|
formModel.setUnit(model.getUnit());
|
formModel.setBaseGoodsModelsId(model.getBaseGoodsModelsId());
|
formModel.setBaseGoodsModelsName(model.getModelName());
|
formModel.setProcureModelUserId(model.getModelUserId());
|
formModel.setInitialCount(model.getGoodsNum());
|
formModel.setUseCount(model.getUserUseCount());
|
formModel.setCounts(model.getCounts());
|
formModel.setGoodsUserName(model.getNowUserName());
|
|
return formModel;
|
}
|
|
|
@Override
|
public PageUtil selectPageByList(UsingFormBackQry usingFormBackParam) {
|
|
StringBuilder sql = new StringBuilder("SELECT\n"
|
+ "\tDISTINCT ufb.ID,\n"
|
+ "\tufb.BUSINESS_FORM_CODE,\n"
|
+ "\tufb.DEPARTMENT_NAME,\n"
|
+ "\tufb.OPERATOR_NAME,\n"
|
+ "\tufb.DEAL_TIME\n"
|
+ "FROM\n"
|
+ "\tusing_form_back ufb\n"
|
+ "\tLEFT JOIN using_form_back_goods ufbg ON ufb.ID = ufbg.USING_FORM_BACK_ID\n"
|
+ "\tLEFT JOIN using_form_back_model ufbm ON ufbg.ID = ufbm.USING_FORM_BACK_GOODS_ID\n"
|
+ "where 1=1 ");
|
|
String businessFormCode = usingFormBackParam.getBusinessFormCode();
|
Long departmentId = usingFormBackParam.getDepartmentId();
|
String goodsTemplateName = usingFormBackParam.getGoodsTemplateName();
|
String goodsTemplateId = usingFormBackParam.getGoodsTemplateId();
|
Long startTime = usingFormBackParam.getStartTime();
|
Long endTime = usingFormBackParam.getEndTime();
|
Long baseGoodsModelsId = usingFormBackParam.getBaseGoodsModelsId();
|
Long agencyId = usingFormBackParam.getAgencyId();
|
String createName = usingFormBackParam.getCreateName();
|
Map<String, Object> map = new HashMap<>();
|
if (StringUtils.isNotEmpty(businessFormCode)) {
|
sql.append("AND ufb.BUSINESS_FORM_CODE = :businessFormCode ");
|
map.put("businessFormCode", businessFormCode);
|
}
|
if (departmentId != null) {
|
sql.append("AND ufb.DEPARTMENT_ID = :departmentId ");
|
map.put("departmentId", departmentId);
|
}
|
if (StringUtils.isNotEmpty(goodsTemplateName)) {
|
sql.append("AND ufbg.BASE_GOODS_TEMPLATE_NAME = :goodsTemplateName ");
|
map.put("goodsTemplateName", goodsTemplateName);
|
}
|
if (StringUtils.isNotEmpty(goodsTemplateId)) {
|
sql.append("AND ufbg.BASE_GOODS_TEMPLATE_ID = :goodsTemplateId ");
|
map.put("goodsTemplateId", goodsTemplateId);
|
}
|
if (startTime != null) {
|
sql.append("AND ufb.CREATE_TIME >= :startTime ");
|
map.put("startTime", startTime * 1000000);
|
}
|
if (endTime != null) {
|
sql.append("AND ufb.CREATE_TIME < :endTime ");
|
map.put("endTime", endTime * 1000000 + 240000);
|
}
|
if (baseGoodsModelsId != null) {
|
sql.append("AND ufbm.BASE_GOODS_MODELS_ID = :baseGoodsModelsId ");
|
map.put("baseGoodsModelsId", baseGoodsModelsId);
|
}
|
if (agencyId != null) {
|
sql.append("AND ufb.AGENCY_ID like :agencyId");
|
map.put("agencyId", agencyId);
|
}
|
if (StringUtils.isNotEmpty(createName)) {
|
sql.append("AND ufb.OPERATOR_NAME = :createName ");
|
map.put("createName", createName);
|
}
|
sql.append("ORDER BY ufb.CREATE_TIME DESC ");
|
GenericPager<Map<String, Object>> mapGenericPager = this.selectSplit(sql.toString(), map, usingFormBackParam.getPageNum(),
|
usingFormBackParam.getPageSize(), new MapperUtil());
|
PageUtil pageUtil = new PageUtil(mapGenericPager);
|
List<UsingFormBackVO> pageList = Lists.newArrayList();
|
mapGenericPager.getDatas().forEach(item -> {
|
UsingFormBackVO usingFormBackVO = MapUtils.convertMapToObj(item, UsingFormBackVO.class);
|
|
Long id = usingFormBackVO.getId();
|
StringBuilder countSql = new StringBuilder("SELECT \n"
|
+ "\tufbg.BASE_GOODS_TEMPLATE_NAME,\n"
|
+ "\tsum(ufbm.COUNTS) count,\n"
|
+ "\tufbm.UNIT\n"
|
+ "FROM\n"
|
+ "\tusing_form_back_goods ufbg\n"
|
+ "\tLEFT JOIN using_form_back_model ufbm ON ufbg.ID = ufbm.USING_FORM_BACK_GOODS_ID\n"
|
+ "where ufbg.USING_FORM_BACK_ID = :id group by ufbg.BASE_GOODS_TEMPLATE_ID ");
|
Map<String, Object> countSqlMap = new HashMap<>();
|
countSqlMap.put("id", id);
|
List<Map<String, Object>> select = this.select(countSql.toString(), countSqlMap, new MapperUtil());
|
List<BaseGoodsTemplateInfo> baseGoodsTemplateInfoList = Lists.newArrayList();
|
select.forEach(entity -> {
|
BaseGoodsTemplateInfo baseGoodsTemplateInfo = MapUtils.convertMapToObj(entity, BaseGoodsTemplateInfo.class);
|
baseGoodsTemplateInfoList.add(baseGoodsTemplateInfo);
|
});
|
usingFormBackVO.setGoodsTemplateInfoList(baseGoodsTemplateInfoList);
|
pageList.add(usingFormBackVO);
|
});
|
pageUtil.setDatas(pageList);
|
return pageUtil;
|
}
|
|
@Override
|
public UsingFormBackDetailVO getDetail(Long id) {
|
StringBuilder sql = new StringBuilder("SELECT\n"
|
+ "\tDISTINCT ufb.ID,\n"
|
+ "\tufb.BUSINESS_FORM_CODE,\n"
|
+ "\tufb.AGENCY_NAME,\n"
|
+ "\tufb.DEPARTMENT_NAME,\n"
|
+ "\tufb.OPERATOR_NAME,\n"
|
+ "\tufb.DEAL_TIME,\n"
|
+ "\tufb.PROCURE_DOC,\n"
|
+ "\tufbg.CATEGORY_NAME,\n"
|
+ "\tufbg.BASE_GOODS_TEMPLATE_NAME,\n"
|
+ "\tufbg.CLASSIFICATION,\n"
|
+ "\tufbg.BUSINESS_FORM_CODE,\n"
|
+ "\tufbm.BASE_GOODS_MODELS_NAME,\n"
|
+ "\tufbm.BASE_GOODS_TEMPLATE_ID,\n"
|
+ "\tufbm.BASE_GOODS_MODELS_ID,\n"
|
+ "\tufbm.UNIT,\n"
|
+ "\tufbm.COUNTS,\n"
|
+ "\tufbm.USE_COUNT,\n"
|
+ "\tufbm.GOODS_USER_NAME\n"
|
+ "FROM\n"
|
+ "\tusing_form_back ufb\n"
|
+ "\tLEFT JOIN using_form_back_goods ufbg ON ufb.ID = ufbg.USING_FORM_BACK_ID\n"
|
+ "\tLEFT JOIN using_form_back_model ufbm ON ufbg.ID = ufbm.USING_FORM_BACK_GOODS_ID where ufb.id =:id");
|
Map<String, Object> map = new HashMap<>();
|
map.put("id", id);
|
List<Map<String, Object>> select = this.select(sql.toString(), map, new MapperUtil());
|
if (CollectionUtils.isEmpty(select)) {
|
return null;
|
}
|
List<UsingFormBackDetailDTO> usingFormBackDetailDTOList = Lists.newArrayList();
|
select.forEach(item -> {
|
UsingFormBackDetailDTO usingFormBackDetailDTO = MapUtils.convertMapToObj(item, UsingFormBackDetailDTO.class);
|
usingFormBackDetailDTOList.add(usingFormBackDetailDTO);
|
});
|
|
UsingFormBackDetailVO usingFormBackDetailVO = new UsingFormBackDetailVO();
|
List<UsingFormBackGoodsTemplateInfo> goodsTemplateInfoList = Lists.newArrayList();
|
usingFormBackDetailDTOList.stream().collect(Collectors.groupingBy(UsingFormBackDetailDTO::getBaseGoodsTemplateId))
|
.forEach((templateId, templateInfo) -> {
|
UsingFormBackDetailDTO templateInfoDTO = templateInfo.get(0);
|
BeanUtils.copyProperties(templateInfoDTO, usingFormBackDetailVO);
|
UsingFormBackGoodsTemplateInfo usingFormBackGoodsTemplateInfo = new UsingFormBackGoodsTemplateInfo();
|
usingFormBackGoodsTemplateInfo.setId(templateId);
|
usingFormBackGoodsTemplateInfo.setCategoryName(templateInfoDTO.getCategoryName());
|
usingFormBackGoodsTemplateInfo.setBaseGoodsTemplateName(templateInfoDTO.getBaseGoodsTemplateName());
|
usingFormBackGoodsTemplateInfo.setType(templateInfoDTO.getClassification());
|
usingFormBackGoodsTemplateInfo.setBusinessFormCode(templateInfoDTO.getBusinessFormCode());
|
goodsTemplateInfoList.add(usingFormBackGoodsTemplateInfo);
|
usingFormBackDetailVO.setGoodsTemplateInfoList(goodsTemplateInfoList);
|
List<UsingFormBackModelInfo> modelInfoList = Lists.newArrayList();
|
templateInfo.stream().collect(Collectors.groupingBy(UsingFormBackDetailDTO::getBaseGoodsModelsId)).forEach((modelId, modelInfo) -> {
|
UsingFormBackDetailDTO modelInfoDTO = modelInfo.get(0);
|
UsingFormBackModelInfo usingFormBackModelInfo = new UsingFormBackModelInfo();
|
usingFormBackModelInfo.setBaseGoodsModelsName(modelInfoDTO.getBaseGoodsModelsName());
|
usingFormBackModelInfo.setUnit(modelInfoDTO.getUnit());
|
usingFormBackModelInfo.setId(modelId);
|
modelInfoList.add(usingFormBackModelInfo);
|
usingFormBackGoodsTemplateInfo.setModelInfoList(modelInfoList);
|
List<UseInfo> useInfoList = Lists.newArrayList();
|
for (UsingFormBackDetailDTO useInfoDTO : modelInfo) {
|
UseInfo useInfo = new UseInfo();
|
useInfo.setUseName(useInfoDTO.getGoodsUserName());
|
useInfo.setReturnNum(useInfoDTO.getCounts());
|
useInfo.setUseUnm(useInfoDTO.getUseCount());
|
useInfoList.add(useInfo);
|
usingFormBackModelInfo.setUseInfoList(useInfoList);
|
}
|
});
|
});
|
|
return usingFormBackDetailVO;
|
}
|
|
@Override
|
public PageUtil selectPageByDetail(UsingFormBackQry usingFormBackParam) {
|
StringBuilder sql = new StringBuilder("SELECT\n"
|
+ "\tufb.ID,\n"
|
+ "\tufb.BUSINESS_FORM_CODE,\n"
|
+ "\tufbm.BASE_GOODS_TEMPLATE_NAME,\n"
|
+ "\tufbm.BASE_GOODS_MODELS_NAME,\n"
|
+ "\tufbm.counts,\n"
|
+ "\tufb.AGENCY_NAME,\n"
|
+ "\tufb.DEPARTMENT_NAME,\n"
|
+ "\tufb.OPERATOR_NAME,\n"
|
+ "\tufb.DEAL_TIME\n"
|
+ "FROM\n"
|
+ "\tusing_form_back ufb\n"
|
+ "\tLEFT JOIN using_form_back_goods ufbg ON ufb.ID = ufbg.USING_FORM_BACK_ID\n"
|
+ "\tLEFT JOIN using_form_back_model ufbm ON ufbg.ID = ufbm.USING_FORM_BACK_GOODS_ID\n"
|
+ "where 1=1 ");
|
|
String businessFormCode = usingFormBackParam.getBusinessFormCode();
|
Long departmentId = usingFormBackParam.getDepartmentId();
|
String goodsTemplateName = usingFormBackParam.getGoodsTemplateName();
|
String goodsTemplateId = usingFormBackParam.getGoodsTemplateId();
|
Long startTime = usingFormBackParam.getStartTime();
|
Long endTime = usingFormBackParam.getEndTime();
|
Long baseGoodsModelsId = usingFormBackParam.getBaseGoodsModelsId();
|
Long agencyId = usingFormBackParam.getAgencyId();
|
String createName = usingFormBackParam.getCreateName();
|
Map<String, Object> map = new HashMap<>();
|
if (StringUtils.isNotEmpty(businessFormCode)) {
|
sql.append("AND ufb.BUSINESS_FORM_CODE = :businessFormCode ");
|
map.put("businessFormCode", businessFormCode);
|
}
|
if (departmentId != null) {
|
sql.append("AND ufb.DEPARTMENT_ID = :departmentId ");
|
map.put("departmentId", departmentId);
|
}
|
if (StringUtils.isNotEmpty(goodsTemplateName)) {
|
sql.append("AND ufbg.BASE_GOODS_TEMPLATE_NAME = :goodsTemplateName ");
|
map.put("goodsTemplateName", goodsTemplateName);
|
}
|
if (StringUtils.isNotEmpty(goodsTemplateId)) {
|
sql.append("AND ufbg.BASE_GOODS_TEMPLATE_ID = :goodsTemplateId ");
|
map.put("goodsTemplateId", goodsTemplateId);
|
}
|
if (startTime != null) {
|
sql.append("AND ufb.CREATE_TIME >= :startTime ");
|
map.put("startTime", startTime * 1000000);
|
}
|
if (endTime != null) {
|
sql.append("AND ufb.CREATE_TIME < :endTime ");
|
map.put("endTime", endTime * 1000000 + 240000);
|
}
|
if (baseGoodsModelsId != null) {
|
sql.append("AND ufbm.BASE_GOODS_MODELS_ID = :baseGoodsModelsId ");
|
map.put("baseGoodsModelsId", baseGoodsModelsId);
|
}
|
if (agencyId != null) {
|
sql.append("AND ufb.AGENCY_ID like :agencyId ");
|
map.put("agencyId", agencyId);
|
}
|
if (StringUtils.isNotEmpty(createName)) {
|
sql.append("AND ufb.OPERATOR_NAME = :createName ");
|
map.put("createName", createName);
|
}
|
sql.append("ORDER BY ufb.CREATE_TIME DESC ");
|
GenericPager<Map<String, Object>> mapGenericPager = this.selectSplit(sql.toString(), map, usingFormBackParam.getPageNum(),
|
usingFormBackParam.getPageSize(), new MapperUtil());
|
PageUtil pageUtil = new PageUtil(mapGenericPager);
|
List<UsingFormBackDetailListVO> pageList = Lists.newArrayList();
|
mapGenericPager.getDatas().forEach(item -> {
|
UsingFormBackDetailListVO usingFormBackVO = MapUtils.convertMapToObj(item, UsingFormBackDetailListVO.class);
|
pageList.add(usingFormBackVO);
|
});
|
pageUtil.setDatas(pageList);
|
return pageUtil;
|
}
|
|
|
@Transactional
|
public Long addUsingFormBack(FinSysTenantUser sysInfo, Long departmentId, String departmentName, Long operatorId, String operatorName, Long backTime,
|
String procureDoc) {
|
UsingFormBack usingFormBack = new UsingFormBack();
|
usingFormBack.setId(IdUtil.generateId());
|
usingFormBack.setBusinessFormCode(codeGeneratorService.createBusinessFormCode(CodeGeneratorEnum.GOBACK));
|
usingFormBack.setOutWarehouseType(1);
|
usingFormBack.setOutWarehouseId(departmentId);
|
usingFormBack.setOutWarehouseName(departmentName);
|
|
String tenantId = sysInfo.getTenantId();
|
String tenantName = sysInfo.getTenantName();
|
usingFormBack.setAgencyId(Long.valueOf(tenantId));
|
usingFormBack.setAgencyName(tenantName);
|
usingFormBack.setCreateTime(DateUtils.getDateTimeNumber(System.currentTimeMillis()));
|
usingFormBack.setStates(1);
|
|
Long sysDeptId = sysInfo.getSysDeptId();
|
FinSysTenantDepartment department = finSysTenantDepartmentService.getById(sysDeptId);
|
if (department == null) {
|
throw new RuntimeException("部门不存在");
|
}
|
usingFormBack.setDepartmentId(department.getId());
|
usingFormBack.setDepartmentName(department.getName());
|
usingFormBack.setOperatorId(sysInfo.getId());
|
usingFormBack.setOperatorName(operatorName);
|
usingFormBack.setDealTime(backTime);
|
usingFormBack.setProcureDoc(procureDoc);
|
this.insert(usingFormBack);
|
return usingFormBack.getId();
|
}
|
}
|