From 8e4000461f3a6bbee34068b78ed60292c0ada611 Mon Sep 17 00:00:00 2001 From: futian.liu <liufutianyoo@163.com> Date: 星期二, 05 十二月 2023 13:46:52 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- consum-base/src/main/java/com/consum/base/service/impl/LWhFormProcureServiceImpl.java | 316 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 316 insertions(+), 0 deletions(-) diff --git a/consum-base/src/main/java/com/consum/base/service/impl/LWhFormProcureServiceImpl.java b/consum-base/src/main/java/com/consum/base/service/impl/LWhFormProcureServiceImpl.java new file mode 100644 index 0000000..40cd9a8 --- /dev/null +++ b/consum-base/src/main/java/com/consum/base/service/impl/LWhFormProcureServiceImpl.java @@ -0,0 +1,316 @@ +package com.consum.base.service.impl; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.annotation.Resource; + +import org.apache.commons.compress.utils.Lists; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.consum.base.core.CodeGeneratorEnum; +import com.consum.base.core.CodeGeneratorService; +import com.consum.base.core.WhBusinessEnum; +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.LWhFormProcureGoodsInfoParam; +import com.consum.base.pojo.LWhFormProcureParam; +import com.consum.base.pojo.LWhProcureModelParam; +import com.consum.base.pojo.excel.ProcureExcelTemplate; +import com.consum.base.pojo.query.FormProcureQry; +import com.consum.base.service.BaseGoodsTemplateService; +import com.consum.base.service.BaseWarehouseService; +import com.consum.base.service.LOrgSupplierServiceImpl; +import com.consum.base.service.LWhFormProcureGoodsService; +import com.consum.base.service.LWhFormProcureService; +import com.consum.base.service.LWhGoodsService; +import com.consum.base.service.LWhProcureModelService; +import com.consum.model.po.BaseWarehouse; +import com.consum.model.po.FinSysTenantUser; +import com.consum.model.po.LOrgSupplier; +import com.consum.model.po.LWhFormProcure; +import com.consum.model.po.LWhFormProcureGoods; +import com.consum.model.po.LWhProcureModel; +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.StringUtils; +import com.walker.jdbc.service.BaseServiceImpl; + +/** + * @ClassName lWhFormProcureService + * @Date 2023/10/24 + * @Description 閲囪喘鍗� + * @Version 1.0 + **/ +@Service +public class LWhFormProcureServiceImpl extends BaseServiceImpl implements LWhFormProcureService { + + @Autowired + private BaseWarehouseService baseWarehouseService; + @Resource + private LOrgSupplierServiceImpl lOrgSupplierService; + @Autowired + private BaseGoodsTemplateService baseGoodsTemplateService; + @Autowired + private LWhGoodsService lWhGoodsService; + @Autowired + private LWhFormProcureGoodsService lWhFormProcureGoodsService; + @Autowired + private LWhProcureModelService lWhProcureModelService; + @Autowired + private CodeGeneratorService codeGeneratorService; + + private static String QUERY_FORM_PROCURE_LIST = "SELECT * FROM L_WH_FORM_PROCURE WHERE 1 = 1"; + + @Override + public PageUtil<LWhFormProcure> queryFormProcureList(FormProcureQry param) { + HashMap<String, Object> paramts = new HashMap<>(); + StringBuilder sql = new StringBuilder(QUERY_FORM_PROCURE_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 (param.getAgencyId() != null) { + sql.append(" and AGENCY_ID like :agencyId "); + paramts.put("agencyId", param.getAgencyId() + StringUtils.CHAR_PERCENT); + } + // 鍒涘缓浜� + if (!StringUtils.isEmpty(param.getCreateName())) { + sql.append(" and buyer_Name =:buyerName "); + paramts.put("buyerName", param.getCreateName()); + } + // 鐘舵�� + if (param.getStates() != null) { + sql.append(" and states =:states "); + paramts.put("states", param.getStates()); + } + // 鍏ュ簱鏃堕棿 + if (param.getStartTime() != null) { + sql.append(" and INCOME_TIME >=:incomeTimeStart "); + paramts.put("incomeTimeStart", param.getStartTime() * 1000000); + } + if (param.getEndTime() != null) { + sql.append(" and INCOME_TIME <:incomeTimeEnd "); + paramts.put("incomeTimeEnd", param.getEndTime() * 1000000 + 240000); + } + // 鐗╁搧鍚嶇О + 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); + } + sql.append(" ORDER BY PROCURE_TIME DESC"); + GenericPager genericPager = selectSplit(sql.toString(), paramts, new LWhFormProcure()); + PageUtil pageUtil = new PageUtil(genericPager); + return pageUtil; + + } + + @Override + public GenericPager<Map<String, Object>> queryFormProcureDetailList(FormProcureQry param) { + HashMap<String, Object> paramts = new HashMap<>(); + StringBuilder sql = + new StringBuilder("SELECT pm.id,fp.BUSINESS_FORM_CODE,fpg.GOODS_TEMPLATE_NAME,pm.PRICE,pm.COUNTS, " + + "( pm.PRICE * pm.COUNTS ) amount,fp.AGENCY_NAME,fp.BUYER_NAME,fp.PROCURE_TIME,pm.BUSINESS_ID,pm.BASE_GOODS_MODELS_NAME FROM l_wh_procure_model pm " + + "LEFT JOIN l_wh_form_procure fp ON pm.BUSINESS_ID = fp.id " + + "LEFT JOIN l_wh_form_procure_goods fpg ON fp.id = fpg.WH_FORM_PROCURE_ID WHERE pm.BUSINESS_TYPE = 1 "); + // 鍏ュ簱鍗曞彿 + 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 fpg.GOODS_TEMPLATE_NAME like :goodsTemplateName "); + paramts.put("goodsTemplateName", + StringUtils.CHAR_PERCENT + param.getGoodsTemplateName() + StringUtils.CHAR_PERCENT); + } + if (param.getAgencyId() != null) { + sql.append("and AGENCY_ID like :agencyId "); + paramts.put("agencyId", param.getAgencyId() + StringUtils.CHAR_PERCENT); + } + // 鍒涘缓浜� + if (!StringUtils.isEmpty(param.getCreateName())) { + sql.append("and buyer_Name =:buyerName "); + paramts.put("buyerName", param.getCreateName()); + } + // 鍏ュ簱寮�濮嬫椂闂� + if (param.getStartTime() != null) { + sql.append("and INCOME_TIME >=:incomeTimeStart "); + paramts.put("incomeTimeStart", param.getStartTime() * 1000000); + } + // 鍏ュ簱缁撴潫鏃堕棿 + if (param.getEndTime() != null) { + sql.append("and INCOME_TIME <:incomeTimeEnd "); + paramts.put("incomeTimeEnd", param.getEndTime() * 1000000 + 240000); + } + // 瑙勬牸鍨嬪彿 + if (param.getBaseGoodsModelsId() != null) { + sql.append("and pm.BASE_GOODS_MODELS_ID =:baseGoodsModelsId "); + paramts.put("baseGoodsModelsId", param.getBaseGoodsModelsId()); + } + + sql.append("ORDER BY PROCURE_TIME DESC"); + GenericPager genericPager = + selectSplit(sql.toString(), paramts, param.getPageNum(), param.getPageSize(), new MapperUtil()); + return genericPager; + + } + + @Override + public List<ProcureExcelTemplate> getExportList(Long id) { + String sql = "SELECT\n" + "\tfp.BUSINESS_FORM_CODE,\n" + "\tfp.AGENCY_NAME tenantName,\n" + + "\tfp.INCOME_TIME createTime,\n" + "\tfp.INCOME_NAME operatorName,\n" + "\tGOODS_NAME templateName,\n" + + "\tpm.BASE_GOODS_MODELS_NAME baseModelName,\n" + "\tcounts num,\n" + "\tprice,\n" + + "\ttotal_amount totalAmount,\n" + "\tWAREHOUSE_NAME,\n" + "\tBEIZ remark\n" + "FROM\n" + + "\tl_wh_procure_model pm\n" + "\tLEFT JOIN base_goods_models bgm ON pm.BASE_GOODS_MODELS_ID = bgm.id\n" + + "\tLEFT JOIN base_goods_template bgt ON bgm.GOODS_TEMPLATES_ID = bgt.id\n" + + "\tLEFT JOIN l_wh_form_procure fp ON fp.ID = pm.BUSINESS_ID\n" + "WHERE\n" + "\tpm.BUSINESS_ID = :id"; + 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<ProcureExcelTemplate> list = Lists.newArrayList(); + select.forEach(item -> { + ProcureExcelTemplate templateExcelExport = MapUtils.convertMapToObj(item, ProcureExcelTemplate.class); + templateExcelExport.setAmount(CurrencyUtil.convertFenToYuan(templateExcelExport.getTotalAmount())); + templateExcelExport.setPrice(CurrencyUtil.convertFenToYuan(templateExcelExport.getPrice())); + list.add(templateExcelExport); + }); + return list; + + } + + @Override + public void add(LWhFormProcureParam param, FinSysTenantUser sysTenantUser, S_user_core currentUser) { + Long warehouseId = param.getWarehouseId(); + BaseWarehouse baseWarehouse = baseWarehouseService.getById(warehouseId); + String tenantId = sysTenantUser.getTenantId(); + String tenantName = sysTenantUser.getTenantName(); + + // 閲囪喘鍗昳d + Long whFormProcureId = param.getId(); + if (whFormProcureId == null) { + whFormProcureId = IdUtil.generateId(); + } + long procureTime = Long.valueOf(param.getProcureTime()); + + Set<String> supplierList = new HashSet<>(); + + ArrayList<LWhFormProcureGoods> procureGoodList = new ArrayList<>(); + ArrayList<LWhProcureModel> procureModelList = new ArrayList<>(); + + List<LWhFormProcureGoodsInfoParam> procureGoods = param.getProcureGoods(); + for (int i = 0; i < procureGoods.size(); i++) { + LWhFormProcureGoodsInfoParam procureGoodT = procureGoods.get(i); + Long baseCategoryId = procureGoodT.getBaseCategoryId(); + Long baseGoodsTemplateId = procureGoodT.getBaseGoodsTemplateId(); + String supplier = procureGoodT.getSupplier(); + // 鍒ゆ柇褰撳墠渚涘簲鍟嗘槸鍚﹀凡瀛樺湪 + if (!supplierList.contains(supplier) && !lOrgSupplierService.supplierIsContain(tenantId, supplier)) { + supplierList.add(supplier); + } + + List<LWhProcureModelParam> models = procureGoodT.getModels(); + if (CollectionUtils.isEmpty(models)) { + throw new RuntimeException("閲囪喘鍗曚笉鑳戒负绌�"); + } + LWhFormProcureGoods procureGood = new LWhFormProcureGoods(); + long fromProcureGoodsId = IdUtil.generateId(); + procureGood.setId(fromProcureGoodsId); + procureGood.setWhFormProcureId(whFormProcureId); + procureGood.setBaseCategoryId(baseCategoryId); + procureGood.setBaseGoodsTemplateId(baseGoodsTemplateId); + // TODO 鐗╁搧鍘嗗彶鐗堟湰 + procureGood.setGoodsTemplateName(procureGoodT.getGoodsTemplateName()); + procureGood.setSupplier(supplier); + procureGood.setSort(i); + for (LWhProcureModelParam modelT : models) { + Integer counts = modelT.getCounts(); + if (counts == null || counts <= 0) { + throw new RuntimeException("鍨嬪彿鐨勯噰璐暟閲忓彧鑳戒负姝f暣鏁�"); + } + Long price = modelT.getPrice(); + if (price == null || price <= 0) { + throw new RuntimeException("鍨嬪彿鐨勯噰璐环鏍煎彧鑳戒负姝f暟"); + } + Long baseGoodsModelsId = modelT.getBaseGoodsModelsId(); + if (baseGoodsModelsId == null) { + throw new RuntimeException("閲囪喘鐨勪环鍨嬪彿鏈壘鍒�"); + } + // 鏌ヨ鍨嬪彿淇℃伅 + Map<String, Object> tempGoodsInfo = baseGoodsTemplateService.queryGoodsInfoByModelId(baseGoodsModelsId); + if (tempGoodsInfo == null) { + throw new RuntimeException("閲囪喘鐨勪环鍨嬪彿鏈壘鍒�"); + } + String modelName = (String)tempGoodsInfo.get("modelname"); + // 鏌ヨ鍨嬪彿搴撳瓨 + int goodsModelNum = lWhGoodsService.queryGoodsModelNum(0, warehouseId, baseGoodsModelsId, 1, null); + LWhProcureModel model = new LWhProcureModel(); + model.setId(IdUtil.generateId()); + model.setFromProcureGoodsId(fromProcureGoodsId); + model.setBusinessType(WhBusinessEnum.CAIGOU.getValue() + 0); + model.setBusinessId(whFormProcureId); + model.setBaseGoodsModelsId(baseGoodsModelsId); + model.setBaseGoodsModelsName(modelName); + model.setPrice(price); + model.setCounts(counts); + model.setWorehouseCount(goodsModelNum); + model.setSupplier(supplier); + model.setTotalAmount(price * counts); + procureModelList.add(model); + } + procureGoodList.add(procureGood); + } + lWhFormProcureGoodsService.insertBatch(procureGoodList); + lWhProcureModelService.insertBatch(procureModelList); + + LWhFormProcure lWhFormProcure = + getlWhFormProcure(param, whFormProcureId, warehouseId, baseWarehouse, currentUser, procureTime); + insert(lWhFormProcure); + + supplierList.forEach(supplier -> { + LOrgSupplier lOrgSupplier = new LOrgSupplier(); + lOrgSupplier.setId(IdUtil.generateId()); + lOrgSupplier.setAgencyId(tenantId); + lOrgSupplier.setAgencyName(tenantName); + lOrgSupplier.setSupplier(supplier); + lOrgSupplierService.insert(lOrgSupplier); + }); + } + + private LWhFormProcure getlWhFormProcure(LWhFormProcureParam param, Long whFormProcureId, Long warehouseId, + BaseWarehouse baseWarehouse, S_user_core currentUser, long procureTime) { + // 鎻掑叆 閲囪喘鍗曠墿鍝併�怢_WH_FORM_PROCURE_GOODS銆� + LWhFormProcure lWhFormProcure = new LWhFormProcure(); + lWhFormProcure.setId(whFormProcureId); + lWhFormProcure + .setBusinessFormCode(codeGeneratorService.createBusinessFormCode(CodeGeneratorEnum.Procure_Warehouse)); + lWhFormProcure.setWarehouseId(warehouseId); + lWhFormProcure.setWarehouseName(baseWarehouse.getWarehouseName()); + lWhFormProcure.setBuyerId(currentUser.getId()); + lWhFormProcure.setBuyerName(currentUser.getNick_name()); + lWhFormProcure.setProcureTime(procureTime); + lWhFormProcure.setProcureDoc(param.getProcureDoc()); + lWhFormProcure.setBuyType(param.getBuyType()); + lWhFormProcure.setStates(1); + lWhFormProcure.setAgencyId(baseWarehouse.getAgencyId()); + lWhFormProcure.setAgencyName(baseWarehouse.getAgencyName()); + return lWhFormProcure; + } +} -- Gitblit v1.9.1