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.LWhFormInventoryDto;
|
import com.consum.base.pojo.LWhFormInventoryParam;
|
import com.consum.base.util.IdUtil;
|
import com.consum.model.po.*;
|
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 lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* @Description 盘点
|
* @Author 卢庆阳
|
* @Date 2023/10/23
|
*/
|
@Slf4j
|
@Service
|
public class LWhFormInventoryServiceImpl extends BaseServiceImpl {
|
|
@Autowired
|
private CodeGeneratorService codeGeneratorService;
|
@Autowired
|
private BaseWarehouseServiceImpl baseWarehouseService;
|
@Autowired
|
private FinSysTenantUserServiceImpl finSysTenantUserService;
|
@Autowired
|
private LWhFormInventoryGoodsServiceImpl inventoryGoodsService;
|
|
|
private static final String QUERY_LIST = "select * from l_wh_form_inventory where 1=1 ";
|
|
private static final String QUERY_PD_List = "SELECT bgt.GOODS_NAME goodsName,model.MODEL_NAME modelName,bgt.CLASSIFICATION,model.UNIT,\n" +
|
" record.endCount,bgt.ID goodsTemplateId,model.ID modelsId\n" +
|
"FROM BASE_GOODS_MODELS model\n" +
|
" LEFT JOIN (SELECT COUNT(1) endCount, BASE_GOODS_MODELS_ID\n" +
|
" FROM L_WH_GOODS\n" +
|
" WHERE WAREHOUSE_TYPE = 0\n" +
|
" AND WAREHOUSE_ID = 1\n" +
|
" AND STATES = ?\n" +
|
" GROUP BY BASE_GOODS_MODELS_ID) record ON record.BASE_GOODS_MODELS_ID = model.id\n" +
|
"left join base_goods_template bgt on bgt.ID = model.GOODS_TEMPLATES_ID; ";
|
|
private static final String QUERY_PD_DETAIL_LIST = "select lwfi.WAREHOUSE_NAME,lwfig.GOODS_TEMPLATE_NAME,\n" +
|
" lwfig.BASE_GOODS_MODELS_NAME,\n" +
|
" lwfig.INVENTORY_RESULT,\n" +
|
" lwfig.INIT_COUNTS,\n" +
|
" lwfig.INVENTORY_COUNTS,\n" +
|
" lwfig.ERROR_COUNTS,\n" +
|
" lwfi.AGENCY_NAME,\n" +
|
" lwfi.OPERATOR_NAME,\n" +
|
" lwfi.STOP_TIME\n" +
|
"from l_wh_form_inventory lwfi\n" +
|
" inner join l_wh_form_inventory_goods lwfig on lwfi.ID = lwfig.WH_FORM_INVENTORY_ID ";
|
|
/**
|
* @Description 新增
|
* @Author 卢庆阳
|
* @Date 2023/10/31
|
* @param param
|
* @param currentUser 当前登录用户
|
* @param operatorUser 盘点人
|
* @param operatorUser2 监盘人
|
* @return
|
*/
|
public int add(LWhFormInventoryParam param, FinSysTenantUser currentUser, S_user_core operatorUser, S_user_core operatorUser2) {
|
//新增盘点单
|
LWhFormInventory lWhFormInventory = new LWhFormInventory();
|
BeanUtils.copyProperties(param,lWhFormInventory);
|
lWhFormInventory.setId(IdUtil.generateId());
|
//盘点单编码
|
String businessFormCode = codeGeneratorService.createBusinessFormCode(CodeGeneratorEnum.Inventory);
|
lWhFormInventory.setBusinessFormCode(businessFormCode);
|
//根据仓库id查询仓库
|
BaseWarehouse baseWarehouse = this.baseWarehouseService.getById(param.getWarehouseId());
|
if (baseWarehouse != null) {
|
lWhFormInventory.setWarehouseName(baseWarehouse.getWarehouseName());
|
}
|
lWhFormInventory.setOperatorName(operatorUser.getUser_name());
|
lWhFormInventory.setOperatorName2(operatorUser2.getUser_name());
|
lWhFormInventory.setStates(0);
|
lWhFormInventory.setAgencyId(Long.valueOf(currentUser.getTenantId()));
|
lWhFormInventory.setAgencyName(currentUser.getTenantName());
|
lWhFormInventory.setCreatorId(currentUser.getSysUserId());
|
lWhFormInventory.setCreatorName(currentUser.getUserName());
|
lWhFormInventory.setCreateTime(DateUtils.getDateTimeNumber(System.currentTimeMillis()));
|
|
return this.insert(lWhFormInventory);
|
}
|
|
/**
|
* @Description 盘点单列表查询
|
* @Author 卢庆阳
|
* @Date 2023/10/31
|
*/
|
public GenericPager<LWhFormInventory> queryList(LWhFormInventoryParam param, FinSysTenantUser sysInfo) {
|
StringBuilder sql = new StringBuilder(QUERY_LIST);
|
HashMap<String, Object> paramts = new HashMap<>();
|
|
//盘点单号
|
if (!StringUtils.isEmpty(param.getBusinessFormCode())) {
|
sql.append(" and BUSINESS_FORM_CODE like:BUSINESS_FORM_CODE ");
|
paramts.put("BUSINESS_FORM_CODE", StringUtils.CHAR_PERCENT + param.getBusinessFormCode() + StringUtils.CHAR_PERCENT);
|
}
|
//盘点单名称
|
if (!StringUtils.isEmpty(param.getBusinessFormName())) {
|
sql.append(" and BUSINESS_FORM_NAME =:BUSINESS_FORM_NAME ");
|
paramts.put("BUSINESS_FORM_NAME", StringUtils.CHAR_PERCENT + param.getBusinessFormName() + StringUtils.CHAR_PERCENT);
|
}
|
//仓库编号
|
if (param.getWarehouseId() != null) {
|
sql.append(" and WAREHOUSE_ID =:WAREHOUSE_ID ");
|
paramts.put("WAREHOUSE_ID", param.getWarehouseId());
|
}
|
//盘点时间
|
if (param.getInventoryDateStart() != null) {
|
sql.append(" and INVENTORY_DATE >=:inventoryDateStart ");
|
paramts.put("inventoryDateStart", param.getInventoryDateStart() * 1000000);
|
}
|
if (param.getInventoryDateEnd() != null) {
|
sql.append(" and INVENTORY_DATE <:inventoryDateEnd ");
|
paramts.put("inventoryDateEnd", param.getInventoryDateEnd() * 1000000 + 240000);
|
}
|
//机构
|
sql.append(" and AGENCY_ID =:AGENCY_ID ");
|
paramts.put("AGENCY_ID", sysInfo.getTenantId());
|
|
sql.append(" ORDER BY CREATE_TIME DESC ");
|
return selectSplit(sql.toString(), paramts, new LWhFormInventory());
|
}
|
|
/**
|
* @Description 盘点
|
* @Author 卢庆阳
|
* @Date 2023/10/31
|
* @param id 盘点单id
|
*/
|
public List queryPdList(Long id) {
|
//1.根据盘点单id查询盘点单
|
LWhFormInventory lWhFormInventory = this.get(new LWhFormInventory(id));
|
if (lWhFormInventory == null) {
|
log.error("盘点失败");
|
}
|
//2.查询盘点单数据
|
List<Map<String, Object>> list = this.select(QUERY_PD_List, new Object[]{lWhFormInventory.getWarehouseId()});
|
if (CollectionUtils.isEmpty(list)) {
|
log.error("盘点失败");
|
return null;
|
}
|
//3.新增盘点单物品记录
|
int flag = inventoryGoodsService.add(list, lWhFormInventory.getWarehouseId());
|
if (flag != list.size()) {
|
log.error("新增盘点单记录");
|
return null;
|
}
|
//4.根据盘点单id查询盘点单物品
|
return inventoryGoodsService.getByInventoryId(id);
|
}
|
|
/**
|
* 暂存
|
* @author 卢庆阳
|
* @date 2023/10/31
|
*/
|
public int temporaryStorage(LWhFormInventoryDto dto) {
|
//1.根据盘点单id查询盘点单
|
LWhFormInventory lWhFormInventory = this.get(new LWhFormInventory(dto.getId()));
|
if (lWhFormInventory == null) {
|
log.error("根据盘点单id查询盘点单 失败");
|
return 0;
|
}
|
//2.修改盘点单
|
lWhFormInventory.setStates(1);
|
lWhFormInventory.setInventoryDate(DateUtils.getDateTimeNumber(System.currentTimeMillis()));
|
int flag1 = this.update(lWhFormInventory);
|
if (flag1 == 0) {
|
log.error("修改盘点单 失败");
|
return 0;
|
}
|
//3.更新盘点单物品
|
List<LWhFormInventoryGoods> inventoryGoodsList = dto.getInventoryGoodsList();
|
int flag2 = inventoryGoodsService.update(inventoryGoodsList);
|
if (flag2 != inventoryGoodsList.size()) {
|
log.error("更新盘点单物品 失败");
|
return 0;
|
}
|
return 1;
|
}
|
|
/**
|
* 完成盘点
|
* @author 卢庆阳
|
* @date 2023/10/31
|
*/
|
public int finishPd(LWhFormInventoryDto dto) {
|
//1.根据盘点单id查询盘点单
|
LWhFormInventory lWhFormInventory = this.get(new LWhFormInventory(dto.getId()));
|
if (lWhFormInventory == null) {
|
log.error("根据盘点单id查询盘点单 失败");
|
return 0;
|
}
|
//2.修改盘点单
|
lWhFormInventory.setStates(2);
|
lWhFormInventory.setStopTime(DateUtils.getDateTimeNumber(System.currentTimeMillis()));
|
int flag1 = this.update(lWhFormInventory);
|
if (flag1 == 0) {
|
log.error("修改盘点单 失败");
|
return 0;
|
}
|
//3.更新盘点单物品
|
List<LWhFormInventoryGoods> inventoryGoodsList = dto.getInventoryGoodsList();
|
if (CollectionUtils.isEmpty(inventoryGoodsList)) {
|
log.error("盘点单物品 为空");
|
return 0;
|
}
|
for (LWhFormInventoryGoods inventoryGoods : inventoryGoodsList) {
|
int errorCounts = inventoryGoods.getInitCounts() - inventoryGoods.getInventoryCounts();
|
if (errorCounts >0 ) {
|
inventoryGoods.setInventoryResult(3);
|
} else if (errorCounts <0){
|
inventoryGoods.setInventoryResult(2);
|
} else {
|
inventoryGoods.setInventoryResult(1);
|
}
|
inventoryGoods.setErrorCounts(Math.abs(errorCounts));
|
}
|
int flag2 = inventoryGoodsService.update(inventoryGoodsList);
|
if (flag2 != inventoryGoodsList.size()) {
|
log.error("更新盘点单物品 失败");
|
return 0;
|
}
|
return 1;
|
}
|
|
/**
|
* @Description 异常明细列表查询
|
* @Author 卢庆阳
|
* @Date 2023/11/1
|
* @return
|
*/
|
public GenericPager<Map<String, Object>> queryPdDetailList(LWhFormInventoryParam param, FinSysTenantUser sysInfo) {
|
StringBuilder sql = new StringBuilder(QUERY_PD_DETAIL_LIST);
|
HashMap<String, Object> paramts = new HashMap<>();
|
|
//机构
|
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 (param.getWarehouseId() != null) {
|
sql.append(" and WAREHOUSE_ID =:WAREHOUSE_ID ");
|
paramts.put("WAREHOUSE_ID", param.getWarehouseId());
|
}
|
//物品名称
|
if (!StringUtils.isEmpty(param.getGoodsTemplateName())) {
|
sql.append(" and GOODS_TEMPLATE_NAME =: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());
|
}
|
//类型(出入库类型)
|
Integer inventoryResult = param.getInventoryResult();
|
if (inventoryResult != null) {
|
sql.append(" and INVENTORY_RESULT =:INVENTORY_RESULT ");
|
paramts.put("INVENTORY_RESULT", inventoryResult);
|
}
|
//出入库单号
|
if (param.getWarehouseFormCode() != null) {
|
if (inventoryResult == 2) { //盘盈入库
|
sql.append(" and IN_BUSINESS_FORM_CODE =:IN_BUSINESS_FORM_CODE ");
|
paramts.put("IN_BUSINESS_FORM_CODE", StringUtils.CHAR_PERCENT + param.getWarehouseFormCode() + StringUtils.CHAR_PERCENT);
|
} else { //盘亏出库
|
sql.append(" and OUT_BUSINESS_FORM_CODE =:OUT_BUSINESS_FORM_CODE ");
|
paramts.put("OUT_BUSINESS_FORM_CODE", StringUtils.CHAR_PERCENT + param.getWarehouseFormCode() + 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.getStopTimeStart() != null) {
|
sql.append(" and STOP_TIME >=:stopTimeStart ");
|
paramts.put("stopTimeStart", param.getStopTimeStart() * 1000000);
|
}
|
if (param.getStopTimeEnd() != null) {
|
sql.append(" and STOP_TIME <:stopTimeEnd ");
|
paramts.put("stopTimeEnd", param.getStopTimeEnd() * 1000000 + 240000);
|
}
|
|
sql.append(" ORDER BY CREATE_TIME DESC ");
|
|
return selectSplit(sql.toString(), paramts, param.getPageNum(), param.getPageSize(), new MapRowMapper());
|
}
|
|
}
|