package com.consum.base.service.impl;
|
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
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_form_procure fp "
|
+ "LEFT JOIN l_wh_form_procure_goods fpg ON fp.id = fpg.WH_FORM_PROCURE_ID "
|
+ "LEFT JOIN l_wh_procure_model pm ON pm.FROM_PROCURE_GOODS_ID = fpg.id WHERE pm.BUSINESS_TYPE = 1 ");
|
// 只查询本机构的采购单
|
if (param.getAgencyId() != null) {
|
sql.append("and fp.AGENCY_ID = :agencyId ");
|
paramts.put("agencyId", param.getAgencyId());
|
}
|
|
// 入库单号
|
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();
|
|
// 采购单id
|
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);
|
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("型号的采购数量只能为正整数");
|
}
|
Long price = modelT.getPrice();
|
if (price == null || price <= 0) {
|
throw new RuntimeException("型号的采购价格只能为正数");
|
}
|
Long baseGoodsModelsId = modelT.getBaseGoodsModelsId();
|
if (baseGoodsModelsId == null) {
|
throw new RuntimeException("采购的价型号未找到");
|
}
|
// 查询型号信息
|
Map<String, Object> tempGoodsInfo = baseGoodsTemplateService.queryGoodsInfoByModelId(baseGoodsModelsId);
|
if (CollectionUtils.isEmpty(tempGoodsInfo)) {
|
throw new RuntimeException("采购的价型号未找到");
|
}
|
String modelName = (String)tempGoodsInfo.get("modelname");
|
// 查询型号库存
|
List<Long> warehouseIds = new ArrayList<>(Arrays.asList(warehouseId));
|
// 库存查询所有类型的包括机构和部门的类型
|
int goodsModelNum = lWhGoodsService.queryGoodsModelNum(null, warehouseIds, baseGoodsModelsId, 1, null);
|
LWhProcureModel model = new LWhProcureModel();
|
model.setId(IdUtil.generateId());
|
model.setFromProcureGoodsId(fromProcureGoodsId);
|
model.setBusinessType(WhBusinessEnum.CAIGOU.getValue());
|
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) {
|
// 插入 采购单物品【L_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;
|
}
|
}
|