package com.consum.base.service.impl;
|
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
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;
|
|
import com.consum.base.core.CodeGeneratorEnum;
|
import com.consum.base.core.CodeGeneratorService;
|
import com.consum.base.core.utils.CurrencyUtil;
|
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.LWhFormScrappedGoodsInfoParam;
|
import com.consum.base.pojo.LWhFormScrappedGoodsModelParams;
|
import com.consum.base.pojo.LWhFormScrappedParam;
|
import com.consum.base.pojo.dto.GoodModelInfoDTO;
|
import com.consum.base.pojo.excel.ScrappedInfoExcelTemplate;
|
import com.consum.base.pojo.query.LWhFormScrappedQry;
|
import com.consum.base.pojo.response.FormScrappedGoodsDetailVO;
|
import com.consum.base.pojo.response.GoodsModelVO;
|
import com.consum.base.pojo.response.GoodsTemplateCountVO;
|
import com.consum.base.pojo.response.GoodsTemplateInfoVO;
|
import com.consum.base.pojo.response.LWhFormScrappedExtendVO;
|
import com.consum.base.service.BaseGoodsModelsService;
|
import com.consum.base.service.BaseGoodsTemplateService;
|
import com.consum.base.service.BaseWarehouseService;
|
import com.consum.base.service.FinSysTenantDepartmentService;
|
import com.consum.base.service.LWhFormScrappedGoodsService;
|
import com.consum.base.service.LWhFormScrappedService;
|
import com.consum.base.service.LWhGoodsService;
|
import com.consum.base.service.SDictDataServiceImpl;
|
import com.consum.model.po.BaseGoodsModels;
|
import com.consum.model.po.BaseGoodsTemplate;
|
import com.consum.model.po.BaseWarehouse;
|
import com.consum.model.po.FinSysTenantDepartment;
|
import com.consum.model.po.FinSysTenantUser;
|
import com.consum.model.po.LWhFormScrapped;
|
import com.consum.model.po.LWhFormScrappedGoods;
|
import com.consum.model.po.SDictData;
|
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;
|
|
/**
|
* @Description 报废单
|
* @Author 卢庆阳
|
* @Date 2023/11/1
|
*/
|
@Service
|
public class LWhFormScrappedServiceImpl extends BaseServiceImpl implements LWhFormScrappedService {
|
|
@Autowired
|
private CodeGeneratorService codeGeneratorService;
|
@Autowired
|
private BaseWarehouseService baseWarehouseService;
|
@Autowired
|
private FinSysTenantDepartmentService departmentService;
|
@Autowired
|
private LWhGoodsService lWhGoodsService;
|
@Autowired
|
private LWhFormScrappedGoodsService scrappedGoodsService;
|
@Autowired
|
private SDictDataServiceImpl sDictDataService;
|
@Autowired
|
private BaseGoodsModelsService baseGoodsModelsService;
|
@Autowired
|
private BaseGoodsTemplateService baseGoodsTemplateService;
|
@Autowired
|
private LWhFormScrappedCoreService lWhFormScrappedCoreService;
|
|
private static String QUERY_LIST =
|
"SELECT DISTINCT fs.* FROM l_wh_form_scrapped fs left join l_wh_form_scrapped_goods fsg on fs.id = fsg.FORM_SCRAPPED_ID WHERE 1 = 1 ";
|
|
private static final String QUERY_BF_DETAIL_LIST =
|
"select fs.id,fs.BUSINESS_FORM_CODE,fsg.GOODS_TEMPLATE_NAME,fsg.BASE_GOODS_MODELS_NAME,fsg.COUNTS,"
|
+ "fs.AGENCY_NAME,OPERATOR_NAME,DEAL_TIME from l_wh_form_scrapped fs "
|
+ "inner join l_wh_form_scrapped_goods fsg on fs.ID = fsg.FORM_SCRAPPED_ID where 1=1 ";
|
|
/**
|
* 新增
|
*
|
* @param param
|
* @param currentUser 当前登录用户
|
* @param sysInfo 当前登录用户
|
* @return 1.新增报废单 2.新增报废单物品
|
*/
|
@Override
|
public int add(LWhFormScrappedParam param, S_user_core currentUser, FinSysTenantUser sysInfo) {
|
// 1.新增报废单记录
|
LWhFormScrapped lWhFormScrapped = new LWhFormScrapped();
|
// 报废单id
|
long lWhFormScrappedId = IdUtil.generateId();
|
lWhFormScrapped.setId(lWhFormScrappedId);
|
lWhFormScrapped.setBusinessFormCode(codeGeneratorService.createBusinessFormCode(CodeGeneratorEnum.Scrapped));
|
lWhFormScrapped.setWarehouseType(0);
|
|
// 公用
|
Long warehouseId = null;
|
// 仓库名称
|
String wareHouseName = null;
|
warehouseId = param.getWarehouseId();
|
// 根据仓库id查询仓库
|
BaseWarehouse warehouse = this.baseWarehouseService.getById(warehouseId);
|
if (warehouse == null) {
|
log.error("仓库不存在");
|
return 0;
|
}
|
wareHouseName = warehouse.getWarehouseName();
|
lWhFormScrapped.setWarehouseId(warehouseId);
|
lWhFormScrapped.setWarehouseName(wareHouseName);
|
lWhFormScrapped.setAgencyId(Long.valueOf(sysInfo.getTenantId()));
|
lWhFormScrapped.setAgencyName(sysInfo.getTenantName());
|
lWhFormScrapped.setOperatorId(sysInfo.getSysUserId());
|
lWhFormScrapped.setOperatorName(sysInfo.getUserName());
|
lWhFormScrapped.setDealTime(param.getDealTime());
|
lWhFormScrapped.setStates(0);
|
lWhFormScrapped.setCreateTime(DateUtils.getDateTimeNumber(System.currentTimeMillis()));
|
lWhFormScrapped.setUploadFiles(param.getUploadFiles());
|
// 根据部门id查询部门
|
FinSysTenantDepartment department = this.departmentService.getById(sysInfo.getSysDeptId());
|
if (department != null) {
|
lWhFormScrapped.setDepartmentId(sysInfo.getSysDeptId());
|
lWhFormScrapped.setDepartmentName(department.getName());
|
}
|
int flag1 = this.insert(lWhFormScrapped);
|
if (flag1 == 0) {
|
log.error("新增报废单失败");
|
return 0;
|
}
|
// 2.新增报废单物品记录
|
// 根据物品id查询物品
|
for (LWhFormScrappedGoodsInfoParam goodsInfo : param.getScrappedGoodsInfo()) {
|
BaseGoodsTemplate goodsTemplate =
|
this.baseGoodsTemplateService.get(new BaseGoodsTemplate(goodsInfo.getBaseGoodsTemplateId()));
|
if (goodsTemplate == null) {
|
log.error("该物品模板不存在");
|
return 0;
|
}
|
List<LWhFormScrappedGoodsModelParams> scrappedGoodsParamList = goodsInfo.getScrappedGoodsList();
|
if (CollectionUtils.isEmpty(scrappedGoodsParamList)) {
|
log.error("新增报废单物品记录失败");
|
return 0;
|
}
|
// 获取规格型号id
|
List<Long> baseGoodsModelsIdList = scrappedGoodsParamList.stream()
|
.map(params -> params.getBaseGoodsModelsId()).collect(Collectors.toList());
|
// 根据规格型号id查询规格型号
|
List<BaseGoodsModels> models = this.baseGoodsModelsService.selectByModelsIdList(baseGoodsModelsIdList);
|
if (CollectionUtils.isEmpty(models)) {
|
log.error("该型号商品不存在");
|
return 0;
|
}
|
Map<Long, BaseGoodsModels> modelMap =
|
models.stream().collect(Collectors.toMap(model -> model.getId(), model -> model));
|
// 获取报废原因code
|
List<String> scrappedCodeList =
|
scrappedGoodsParamList.stream().map(params -> params.getScrappedCode()).collect(Collectors.toList());
|
// 根据报废原因code查询数据字典
|
List<SDictData> SDictDataList = this.sDictDataService.selectByScrappedCodeList(scrappedCodeList);
|
Map<Long, String> scrappedNameMap =
|
SDictDataList.stream().collect(Collectors.toMap(s -> s.getDict_code(), s -> s.getDict_label()));
|
|
List<LWhFormScrappedGoods> scrappedGoodsList = new ArrayList<>();
|
for (LWhFormScrappedGoodsModelParams params : scrappedGoodsParamList) {
|
LWhFormScrappedGoods scrappedGoods = new LWhFormScrappedGoods();
|
scrappedGoods.setId(IdUtil.generateId());
|
// 根据物品型号查询物品库存
|
List<Long> warehouseIds = new ArrayList<>(Arrays.asList(warehouseId));
|
int goodsNum =
|
lWhGoodsService.queryGoodsModelNum(0, warehouseIds, scrappedGoods.getBaseGoodsModelsId(), 1, null);
|
if (params.getCounts() > goodsNum) {
|
log.error("报废数量大于库存数量");
|
return 0;
|
}
|
scrappedGoods.setCounts(params.getCounts());
|
// 报废原因
|
scrappedGoods.setScrappedCode(params.getScrappedCode());
|
scrappedGoods.setScrappedName(scrappedNameMap.get(Long.valueOf(params.getScrappedCode())));
|
scrappedGoods.setFormScrappedId(lWhFormScrappedId);
|
// 物品模板
|
scrappedGoods.setBaseGoodsTemplateId(goodsTemplate.getId());
|
scrappedGoods.setGoodsTemplateName(goodsTemplate.getGoodsName());
|
// 规格型号
|
Long baseGoodsModelsId = params.getBaseGoodsModelsId();
|
BaseGoodsModels baseGoodsModels = modelMap.get(baseGoodsModelsId);
|
if (baseGoodsModels != null) {
|
scrappedGoods.setBaseGoodsModelsId(baseGoodsModelsId);
|
scrappedGoods.setBaseGoodsModelsName(baseGoodsModels.getModelName());
|
scrappedGoods.setUnit(baseGoodsModels.getUnit());
|
}
|
scrappedGoodsList.add(scrappedGoods);
|
}
|
int flag2 = this.scrappedGoodsService.insertBatch(scrappedGoodsList);
|
if (flag2 == 0) {
|
log.error("新增报废单物品记录 失败");
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
return 0;
|
}
|
}
|
// 3.根据报废单报废物品
|
Long lWarehouseFlowId =
|
this.lWhFormScrappedCoreService.outFormByTransId(lWhFormScrappedId, currentUser, param.getDealTime());
|
if (lWarehouseFlowId == null) {
|
log.error("根据出库单出库 失败");
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
return 0;
|
}
|
|
return 1;
|
}
|
|
/**
|
* @Description 列表查询
|
* @Author 卢庆阳
|
* @Date 2023/11/2
|
*/
|
@Override
|
public PageUtil queryList(LWhFormScrappedQry param, FinSysTenantUser sysInfo) {
|
HashMap<String, Object> paramts = new HashMap<>();
|
StringBuilder sql = new StringBuilder(QUERY_LIST);
|
// 报废单号
|
if (!StringUtils.isEmpty(param.getBusinessFormCode())) {
|
sql.append("and BUSINESS_FORM_CODE = :businessFormCode ");
|
paramts.put("businessFormCode", param.getBusinessFormCode());
|
}
|
// 物品名称
|
if (!StringUtils.isEmpty(param.getGoodsTemplateName())) {
|
sql.append("and fsg.GOODS_TEMPLATE_NAME LIKE :goodsTemplateName ");
|
paramts.put("goodsTemplateName",
|
StringUtils.CHAR_PERCENT + param.getGoodsTemplateName() + StringUtils.CHAR_PERCENT);
|
}
|
// 机构
|
sql.append("and AGENCY_ID like :agencyId ");
|
if (param.getAgencyId() != null) {
|
paramts.put("agencyId", param.getAgencyId() + StringUtils.CHAR_PERCENT);
|
} else {
|
paramts.put("agencyId", sysInfo.getTenantId() + StringUtils.CHAR_PERCENT);
|
}
|
// 报废时间
|
if (param.getStartTime() != null) {
|
sql.append("and DEAL_TIME >=:dealTimeStart ");
|
paramts.put("dealTimeStart", param.getStartTime() * 1000000);
|
}
|
if (param.getEndTime() != null) {
|
sql.append("and DEAL_TIME <:dealTimeEnd ");
|
paramts.put("dealTimeEnd", param.getEndTime() * 1000000 + 240000);
|
}
|
|
sql.append("ORDER BY DEAL_TIME DESC");
|
GenericPager genericPager = selectSplit(sql.toString(), paramts, new LWhFormScrapped());
|
return new PageUtil(genericPager);
|
}
|
|
/**
|
* @Description 根据id查询详情
|
* @Author 卢庆阳
|
* @Date 2023/11/2
|
*/
|
@Override
|
public LWhFormScrappedExtendVO getById(Long id) {
|
LWhFormScrappedExtendVO scrappedExtend = new LWhFormScrappedExtendVO();
|
// 1.查询报废单
|
LWhFormScrapped lWhFormScrapped = this.get(new LWhFormScrapped(id));
|
if (lWhFormScrapped != null) {
|
BeanUtils.copyProperties(lWhFormScrapped, scrappedExtend);
|
}
|
// 2.查询报废单商品信息
|
List<GoodModelInfoDTO> scrappedGoodsInfoList = scrappedGoodsService.getScrappedGoodsByScrappedId(id);
|
// 通过baseGoodsTemplateId 进行分组
|
Map<Long, List<GoodModelInfoDTO>> map =
|
scrappedGoodsInfoList.stream().collect(Collectors.groupingBy(GoodModelInfoDTO::getBaseGoodsTemplateId));
|
// 循环map的key和value
|
List<GoodsTemplateInfoVO> scrappedGoodsVO = Lists.newArrayList();
|
for (Map.Entry<Long, List<GoodModelInfoDTO>> entry : map.entrySet()) {
|
List<GoodModelInfoDTO> goodsList = entry.getValue();
|
GoodModelInfoDTO goodModelInfoDTO = goodsList.stream().findFirst().orElse(null);
|
GoodsTemplateInfoVO goodsTemplateInfoVO = new GoodsTemplateInfoVO();
|
if (goodModelInfoDTO != null) {
|
goodsTemplateInfoVO.setId(goodModelInfoDTO.getId());
|
goodsTemplateInfoVO.setGoodsName(goodModelInfoDTO.getBaseGoodsName());
|
goodsTemplateInfoVO.setCategoryName(goodModelInfoDTO.getCategoryName());
|
goodsTemplateInfoVO.setId(goodModelInfoDTO.getId());
|
}
|
List<GoodsModelVO> goodsModelList = Lists.newArrayList();
|
goodsList.forEach(item -> {
|
GoodsModelVO goodsModelVO = new GoodsModelVO();
|
goodsModelVO.setId(item.getId());
|
goodsModelVO.setBaseGoodsModelsName(item.getBaseGoodsModelsName());
|
goodsModelVO.setUnit(item.getUnit());
|
goodsModelVO.setCounts(item.getCounts());
|
goodsModelVO.setBaseGoodsModelsId(item.getBaseGoodsModelsId());
|
goodsModelVO.setScrappedName(item.getScrappedName());
|
goodsModelList.add(goodsModelVO);
|
});
|
goodsTemplateInfoVO.setModels(goodsModelList);
|
scrappedGoodsVO.add(goodsTemplateInfoVO);
|
|
}
|
scrappedExtend.setScrappedGoods(scrappedGoodsVO);
|
return scrappedExtend;
|
}
|
|
/**
|
* 报废明细
|
*
|
* @param param
|
* @return
|
*/
|
@Override
|
public PageUtil queryDetailList(LWhFormScrappedQry param, FinSysTenantUser sysInfo) {
|
StringBuilder sql = new StringBuilder(QUERY_BF_DETAIL_LIST);
|
HashMap<String, Object> paramts = new HashMap<>();
|
|
// 报废单号
|
if (!StringUtils.isEmpty(param.getBusinessFormCode())) {
|
sql.append("and BUSINESS_FORM_CODE =:BUSINESS_FORM_CODE ");
|
paramts.put("BUSINESS_FORM_CODE", param.getBusinessFormCode());
|
}
|
// 物品名称
|
if (!StringUtils.isEmpty(param.getGoodsTemplateName())) {
|
sql.append("and GOODS_TEMPLATE_NAME like: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());
|
}
|
// 机构
|
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 (!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.getStartTime() != null) {
|
sql.append("and DEAL_TIME >=:dealTimeStart ");
|
paramts.put("dealTimeStart", param.getStartTime() * 1000000);
|
}
|
if (param.getEndTime() != null) {
|
sql.append("and DEAL_TIME <:dealTimeEnd ");
|
paramts.put("dealTimeEnd", param.getEndTime() * 1000000 + 240000);
|
}
|
|
sql.append("ORDER BY DEAL_TIME DESC ");
|
GenericPager<Map<String, Object>> mapGenericPager =
|
selectSplit(sql.toString(), paramts, param.getPageNum(), param.getPageSize(), new MapperUtil());
|
PageUtil pageUtil = new PageUtil<>(mapGenericPager);
|
List<FormScrappedGoodsDetailVO> result = Lists.newArrayList();
|
mapGenericPager.getDatas().forEach(item -> {
|
FormScrappedGoodsDetailVO formScrappedGoodsDetailVO =
|
MapUtils.convertMapToObj(item, FormScrappedGoodsDetailVO.class);
|
result.add(formScrappedGoodsDetailVO);
|
});
|
pageUtil.setDatas(result);
|
return pageUtil;
|
}
|
|
@Override
|
public List<ScrappedInfoExcelTemplate> export(Long id) {
|
String sql = "SELECT BUSINESS_FORM_CODE,fs.DEAL_TIME,OPERATOR_NAME,\n"
|
+ "\tAGENCY_NAME tenantName,GOODS_TEMPLATE_NAME templateName,\n"
|
+ "\tBASE_GOODS_MODELS_NAME baseModelName,COUNTS num,SCRAPPED_NAME deception,\n"
|
+ "\tBEIZ remark,total_amount FROM l_wh_form_scrapped_goods fsg\n"
|
+ "\tLEFT JOIN l_wh_form_scrapped fs ON fs.id = fsg.FORM_SCRAPPED_ID WHERE fs.ID = :id\n"
|
+ "\tAND STATES = 1";
|
Map<String, Object> param = new HashMap<>();
|
param.put("id", id);
|
List<Map<String, Object>> select = this.select(sql, param, new MapperUtil());
|
if (CollectionUtils.isEmpty(select)) {
|
return null;
|
}
|
List<ScrappedInfoExcelTemplate> list = Lists.newArrayList();
|
select.forEach(item -> {
|
ScrappedInfoExcelTemplate inventoryExcelTemplate =
|
MapUtils.convertMapToObj(item, ScrappedInfoExcelTemplate.class);
|
inventoryExcelTemplate.setAmount(CurrencyUtil.convertFenToYuan(inventoryExcelTemplate.getTotalAmount()));
|
list.add(inventoryExcelTemplate);
|
});
|
return list;
|
}
|
|
@Override
|
public List<GoodsTemplateCountVO> getScrappedCountByBusinessId(Long businessId) {
|
List<GoodsTemplateCountVO> goodsTemplateCount = Lists.newArrayList();
|
// 统计型号数量
|
String sql =
|
"SELECT fsg.BASE_GOODS_TEMPLATE_ID id,fsg.GOODS_TEMPLATE_NAME goodsName,sum(counts) count FROM l_wh_form_scrapped fs left join l_wh_form_scrapped_goods fsg on fs.id = fsg.FORM_SCRAPPED_ID "
|
+ "where fsg.FORM_SCRAPPED_ID =:businessId group by fsg.BASE_GOODS_TEMPLATE_ID";
|
Map<String, Object> paramMap = new HashMap<>();
|
paramMap.put("businessId", businessId);
|
List<Map<String, Object>> procureModelList = this.select(sql, paramMap, new MapperUtil());
|
for (Map<String, Object> map : procureModelList) {
|
GoodsTemplateCountVO goodsTemplateCountVO = MapUtils.convertMapToObj(map, GoodsTemplateCountVO.class);
|
goodsTemplateCount.add(goodsTemplateCountVO);
|
}
|
return goodsTemplateCount;
|
}
|
|
}
|