package com.consum.base.controller;
|
|
import cn.afterturn.easypoi.excel.ExcelImportUtil;
|
import cn.afterturn.easypoi.excel.entity.ImportParams;
|
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
|
import cn.hutool.core.convert.Convert;
|
import com.consum.base.BaseController;
|
import com.consum.base.config.WhWarningImportVerifyHandler;
|
import com.consum.base.core.utils.CommonUtil;
|
import com.consum.base.core.utils.IdUtil;
|
import com.consum.base.pojo.WarnConfImEntity;
|
import com.consum.base.pojo.WhWarningConfigParam;
|
import com.consum.base.pojo.query.WhWarningConfigQry;
|
import com.consum.base.service.BaseWarehouseService;
|
import com.consum.base.service.LWhWarningConfigServiceImpl;
|
import com.consum.model.po.BaseWarehouse;
|
import com.consum.model.po.FinSysTenantUser;
|
import com.consum.model.po.WhWarningConfig;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.walker.db.page.GenericPager;
|
import com.walker.file.FileInfo;
|
import com.walker.infrastructure.utils.NumberGenerator;
|
import com.walker.web.ResponseCode;
|
import com.walker.web.ResponseValue;
|
import io.swagger.annotations.Api;
|
import java.io.ByteArrayInputStream;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.net.URLEncoder;
|
import java.nio.charset.StandardCharsets;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
import javax.annotation.Resource;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.core.io.ClassPathResource;
|
import org.springframework.core.io.InputStreamResource;
|
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpStatus;
|
import org.springframework.http.MediaType;
|
import org.springframework.http.ResponseEntity;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.multipart.MultipartFile;
|
|
/**
|
* @ClassName LWhWarningConfigController
|
* @Author cy
|
* @Date 2023/11/20
|
* @Description
|
* @Version 1.0
|
**/
|
@RestController
|
@RequestMapping("/pc/warehouse/warningConfig")
|
@Api(value = "库存阀值", tags = "库存阀值")
|
public class LWhWarningConfigController extends BaseController {
|
|
@Resource
|
private LWhWarningConfigServiceImpl lWhWarningConfigService;
|
@Resource
|
private BaseWarehouseService baseWarehouseService;
|
private ObjectMapper mapper = new ObjectMapper();
|
|
/**
|
* @Description 新增
|
*/
|
@PostMapping("/add")
|
public ResponseValue add() throws Exception {
|
WhWarningConfigParam param = CommonUtil.getObjFromReqBody(WhWarningConfigParam.class);
|
WhWarningConfigParam param2 = new WhWarningConfigParam();
|
CommonUtil.copyProperties(param, param2);
|
param = param2;
|
|
String modelConfigStr = param.getModelConfigStr();
|
Long baseWarehouseId = param.getBaseWarehouseId();
|
Long baseGoodsTemplateId = param.getBaseGoodsTemplateId();
|
if (param.getWarehouseType() == null || baseWarehouseId == null || baseGoodsTemplateId == null || StringUtils.isEmpty(modelConfigStr)) {
|
return ResponseValue.error("缺少必要参数");
|
}
|
/*当前登录人只能看到自己机构下的列表*/
|
FinSysTenantUser sysInfo = this.getSysInfo();
|
if (sysInfo == null) {
|
return ResponseValue.error("登录用户信息不存在");
|
}
|
String tenantId = sysInfo.getTenantId();
|
BaseWarehouse baseWarehouse = baseWarehouseService.getById(baseWarehouseId);
|
if (baseWarehouse == null) {
|
return ResponseValue.error("仓库不存在!");
|
}
|
Long warehouseAgencyId = baseWarehouse.getAgencyId();
|
if (warehouseAgencyId == null || !warehouseAgencyId.toString().startsWith(tenantId)) {
|
return ResponseValue.error("操作失败!");
|
}
|
|
List<Map<String, Object>> list = mapper.readValue(modelConfigStr, List.class);
|
if (CollectionUtils.isEmpty(list)) {
|
return ResponseValue.error("缺少必要参数");
|
}
|
WhWarningConfig queryIsExist = new WhWarningConfig();
|
queryIsExist.setWarehouseType(0);
|
queryIsExist.setBaseGoodsModelsId(baseWarehouseId);
|
ArrayList<WhWarningConfig> configArrayList = new ArrayList<>(list.size());
|
for (Map<String, Object> item : list) {
|
Long baseGoodsModelsId = Convert.toLong(item.get("baseGoodsModelsId"));
|
queryIsExist.setBaseGoodsModelsId(baseGoodsModelsId);
|
List<WhWarningConfig> containWarningConfig = lWhWarningConfigService.select(queryIsExist);
|
if (!CollectionUtils.isEmpty(containWarningConfig)) {
|
return ResponseValue.error("记录已存在!");
|
}
|
Integer lowerLimit = Convert.toInt(item.get("lowerLimit"));
|
Integer upperLimit = Convert.toInt(item.get("upperLimit"));
|
if (lowerLimit == null && lowerLimit == null) {
|
return ResponseValue.error("库存上限、下限不能全为空!");
|
}
|
if (upperLimit != null && upperLimit < 0) {
|
return ResponseValue.error("库存限制不能小于0!");
|
}
|
if (lowerLimit != null && lowerLimit < 0) {
|
return ResponseValue.error("库存限制不能小于0!");
|
}
|
if (upperLimit != null && lowerLimit != null && upperLimit < lowerLimit) {
|
return ResponseValue.error("库存上限不能小于下限!");
|
}
|
WhWarningConfig whWarningConfig = new WhWarningConfig();
|
whWarningConfig.setId(IdUtil.generateId());
|
whWarningConfig.setWarehouseType(0);
|
whWarningConfig.setBaseWarehouseId(baseWarehouseId);
|
whWarningConfig.setBaseGoodsTemplateId(baseGoodsTemplateId);
|
whWarningConfig.setBaseGoodsModelsId(baseGoodsModelsId);
|
whWarningConfig.setUpperLimit(upperLimit);
|
whWarningConfig.setLowerLimit(lowerLimit);
|
if (whWarningConfig.getBaseGoodsModelsId() == null) {
|
whWarningConfig.setGoodsType(1);
|
} else {
|
whWarningConfig.setGoodsType(2);
|
}
|
configArrayList.add(whWarningConfig);
|
}
|
|
int flag = lWhWarningConfigService.insertBatch(configArrayList);
|
return flag > 0 ? ResponseValue.success(1) : ResponseValue.error("操作失败!");
|
}
|
|
/**
|
* @Description 修改
|
*/
|
@PostMapping("/upd")
|
public ResponseValue upd() {
|
WhWarningConfig param = CommonUtil.getObjFromReqBody(WhWarningConfig.class);
|
WhWarningConfig param2 = new WhWarningConfig();
|
CommonUtil.copyProperties(param, param2);
|
param = param2;
|
|
if (param.getId() == null || (param.getUpperLimit() == null && param.getLowerLimit() == null)) {
|
return ResponseValue.error("库存上限、下限不能全为空!");
|
}
|
if (param.getUpperLimit() != null && param.getLowerLimit() != null && param.getUpperLimit() < param.getLowerLimit()) {
|
return ResponseValue.error("库存上限不能小于下限!");
|
}
|
|
// 更新
|
int flag = lWhWarningConfigService.save(param);
|
return flag > 0 ? ResponseValue.success(1) : ResponseValue.error("操作失败!");
|
}
|
|
|
@DeleteMapping("del")
|
public ResponseValue delById() {
|
WhWarningConfig param = CommonUtil.getObjFromReqBody(WhWarningConfig.class);
|
WhWarningConfig param2 = new WhWarningConfig();
|
CommonUtil.copyProperties(param, param2);
|
param = param2;
|
if (param.getId() == null) {
|
return ResponseValue.error("id为空");
|
}
|
int num = baseWarehouseService.delete(param);
|
return num > 0 ? ResponseValue.success(1) : ResponseValue.error("删除失败!");
|
}
|
|
@GetMapping("/getList")
|
public ResponseValue getConfigList() {
|
WhWarningConfigQry param = CommonUtil.getObjFromReq(WhWarningConfigQry.class);
|
WhWarningConfigQry param2 = new WhWarningConfigQry();
|
CommonUtil.copyProperties(param, param2);
|
param = param2;
|
/*当前登录人只能看到自己机构下的列表*/
|
FinSysTenantUser sysInfo = this.getSysInfo();
|
String tenantId = sysInfo.getTenantId();
|
Long paramAgencyId = param.getAgencyId();
|
if (paramAgencyId == null || !paramAgencyId.toString().startsWith(tenantId)) {
|
param.setAgencyId(Long.valueOf(tenantId));
|
}
|
GenericPager<Map<String, Object>> genericPager = lWhWarningConfigService.getConfigListWithPage(param);
|
return ResponseValue.success(genericPager);
|
}
|
|
@GetMapping("/getById")
|
public ResponseValue getById() {
|
WhWarningConfig param = CommonUtil.getObjFromReq(WhWarningConfig.class);
|
WhWarningConfig param2 = new WhWarningConfig();
|
CommonUtil.copyProperties(param, param2);
|
param = param2;
|
WhWarningConfig whWarningConfig = lWhWarningConfigService.get(param);
|
return ResponseValue.success(whWarningConfig);
|
}
|
|
@GetMapping("/getConfigList")
|
public ResponseValue getWarnConfigList() {
|
WhWarningConfig param = CommonUtil.getObjFromReq(WhWarningConfig.class);
|
WhWarningConfig param2 = new WhWarningConfig();
|
CommonUtil.copyProperties(param, param2);
|
param = param2;
|
|
if (param.getBaseWarehouseId() == null || param.getWarehouseType() == null || (param.getBaseGoodsModelsId() == null || param.getBaseGoodsTemplateId() == null)) {
|
return ResponseValue.error("缺少必要参数");
|
}
|
return ResponseValue.success(lWhWarningConfigService.select(param));
|
}
|
|
/**
|
* @return 获取项目导入的模板
|
* @throws IOException
|
*/
|
@PostMapping("getWarnConfImportTemplate")
|
public ResponseEntity<InputStreamResource> getProjectImportTemplate() throws IOException {
|
// 从当前项目资源目录获取文件
|
org.springframework.core.io.Resource resource = new ClassPathResource("import/warningConfImp.xls");
|
// 获取文件输入流
|
InputStream inputStream = resource.getInputStream();
|
// 设置HTTP响应头
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
|
String encodedFilename = URLEncoder.encode("库存预警配置导入模板.xls", "UTF-8");
|
headers.setContentDispositionFormData("attachment", encodedFilename);
|
// 创建InputStreamResource对象,将文件输入流包装起来
|
InputStreamResource resourceToDownload = new InputStreamResource(inputStream);
|
// 返回带有文件输入流的ResponseEntity对象
|
return ResponseEntity
|
.status(HttpStatus.OK)
|
.headers(headers)
|
.body(resourceToDownload);
|
}
|
|
|
@PostMapping("import")
|
public ResponseValue warnConfImport(MultipartFile multipartFile) throws Exception {
|
String originalFilename = multipartFile.getOriginalFilename();
|
if (!"xls".equals(originalFilename.substring(originalFilename.lastIndexOf(".") + 1))) {
|
return ResponseValue.error(ResponseCode.ERROR.getCode(), "文件格式有误!");
|
}
|
FinSysTenantUser sysInfo = this.getSysInfo();
|
if (sysInfo == null) {
|
return ResponseValue.error(ResponseCode.ERROR.getCode(), "当前登录用户为空");
|
}
|
|
ImportParams params = new ImportParams();
|
params.setHeadRows(1);
|
params.setNeedVerify(true);
|
WhWarningImportVerifyHandler whWarningImportVerifyHandler = new WhWarningImportVerifyHandler(Long.valueOf(sysInfo.getTenantId()));
|
params.setVerifyHandler(whWarningImportVerifyHandler);
|
|
ExcelImportResult<WarnConfImEntity> result = ExcelImportUtil.importExcelMore(multipartFile.getInputStream(), WarnConfImEntity.class, params);
|
|
boolean verfiyFail = result.isVerfiyFail();
|
if (verfiyFail) {
|
StringBuilder errmsg = new StringBuilder();
|
List<WarnConfImEntity> failList = result.getFailList();
|
for (int i = 0; i < failList.size() && i < 20; i++) {
|
WarnConfImEntity entity = failList.get(i);
|
errmsg.append("第")
|
.append(entity.getRowNum())
|
.append("行的错误是:")
|
.append(entity.getErrorMsg())
|
.append("\r\n");
|
}
|
InputStream inputStream = new ByteArrayInputStream(errmsg.toString().getBytes(StandardCharsets.UTF_8));
|
FileInfo fileInfo = uploadFileToLocal(inputStream, NumberGenerator.generatorHexUUID() + ".txt", "-1", 111, 0, "-1");
|
String url = fileInfo.getUrl();
|
return ResponseValue.error(ResponseCode.PARAM_NOT_VALID.getCode(), url);
|
}
|
|
|
List<WarnConfImEntity> excelList = result.getList();
|
ArrayList<WhWarningConfig> configArrayList = new ArrayList<>(excelList.size());
|
// 按baseWarehouseId属性分组
|
Map<Long, List<WarnConfImEntity>> groupedData = excelList.stream().collect(Collectors.groupingBy(WarnConfImEntity::getBaseWarehouseId));
|
for (Map.Entry<Long, List<WarnConfImEntity>> entry : groupedData.entrySet()) {
|
Long baseWarehouseId = entry.getKey();
|
List<WarnConfImEntity> houseModelList = entry.getValue();
|
// 提取id并存储到新列表
|
List<Long> modelIdList = houseModelList.stream()
|
.map(WarnConfImEntity::getBaseGoodsModelsId)
|
.collect(Collectors.toList());
|
|
List<Map<String, Object>> queryModelIsExistList = lWhWarningConfigService.queryModelIsExist(0, baseWarehouseId, modelIdList);
|
if (CollectionUtils.isEmpty(queryModelIsExistList)) {
|
// 全部为新增
|
for (WarnConfImEntity warnConfImEntity : houseModelList) {
|
// 新增
|
WhWarningConfig whWarningConfig = new WhWarningConfig();
|
whWarningConfig.setId(IdUtil.generateId());
|
whWarningConfig.setWarehouseType(0);
|
whWarningConfig.setBaseWarehouseId(warnConfImEntity.getBaseWarehouseId());
|
whWarningConfig.setBaseGoodsTemplateId(warnConfImEntity.getGoodsTemplateId());
|
whWarningConfig.setBaseGoodsModelsId(warnConfImEntity.getBaseGoodsModelsId());
|
whWarningConfig.setUpperLimit(warnConfImEntity.getUpperLimit());
|
whWarningConfig.setLowerLimit(warnConfImEntity.getLowerLimit());
|
if (whWarningConfig.getBaseGoodsModelsId() == null) {
|
whWarningConfig.setGoodsType(1);
|
} else {
|
whWarningConfig.setGoodsType(2);
|
}
|
configArrayList.add(whWarningConfig);
|
}
|
} else {
|
// 提取id并存储到新列表
|
List<Long> dbExistModelIdList = queryModelIsExistList.stream()
|
.map(map -> Convert.toLong(map.get("baseGoodsModelsId")))
|
.collect(Collectors.toList());
|
for (WarnConfImEntity warnConfImEntity : houseModelList) {
|
Long baseGoodsModelsId = warnConfImEntity.getBaseGoodsModelsId();
|
WhWarningConfig whWarningConfig = new WhWarningConfig();
|
whWarningConfig.setWarehouseType(0);
|
whWarningConfig.setBaseWarehouseId(warnConfImEntity.getBaseWarehouseId());
|
whWarningConfig.setBaseGoodsModelsId(warnConfImEntity.getBaseGoodsModelsId());
|
whWarningConfig.setUpperLimit(warnConfImEntity.getUpperLimit());
|
whWarningConfig.setLowerLimit(warnConfImEntity.getLowerLimit());
|
|
if (dbExistModelIdList.contains(baseGoodsModelsId)) {
|
// 修改
|
limitEditByModeInfo(whWarningConfig);
|
} else {
|
// 新增
|
whWarningConfig.setId(IdUtil.generateId());
|
whWarningConfig.setBaseGoodsTemplateId(warnConfImEntity.getGoodsTemplateId());
|
if (whWarningConfig.getBaseGoodsModelsId() == null) {
|
whWarningConfig.setGoodsType(1);
|
} else {
|
whWarningConfig.setGoodsType(2);
|
}
|
configArrayList.add(whWarningConfig);
|
}
|
}
|
}
|
}
|
if (!CollectionUtils.isEmpty(configArrayList)) {
|
int flag = lWhWarningConfigService.insertBatch(configArrayList);
|
}
|
return ResponseValue.success("导入成功!", 1);
|
}
|
|
|
private String KU_CUN_UPD_BY_MODE_INFO = "update WH_WARNING_CONFIG set ";
|
|
public int limitEditByModeInfo(WhWarningConfig config) {
|
StringBuilder sql = new StringBuilder(KU_CUN_UPD_BY_MODE_INFO);
|
Integer lowerLimit = config.getLowerLimit();
|
if (lowerLimit == null) {
|
sql.append("lower_limit=null");
|
} else {
|
sql.append("lower_limit=" + lowerLimit);
|
}
|
Integer upperLimit = config.getUpperLimit();
|
if (upperLimit == null) {
|
sql.append(",upper_Limit=null");
|
} else {
|
sql.append(",upper_Limit=" + upperLimit);
|
}
|
sql.append(" where 1=1");
|
Integer warehouseType = config.getWarehouseType();
|
if (warehouseType != null) {
|
sql.append(" and warehouse_Type=" + warehouseType);
|
}
|
Long baseWarehouseId = config.getBaseWarehouseId();
|
if (baseWarehouseId != null) {
|
sql.append(" and BASE_WAREHOUSE_ID=" + baseWarehouseId);
|
}
|
Long baseGoodsModelsId = config.getBaseGoodsModelsId();
|
if (baseGoodsModelsId != null) {
|
sql.append(" and BASE_GOODS_MODELS_ID=" + baseGoodsModelsId);
|
}
|
lWhWarningConfigService.update(sql.toString());
|
return 1;
|
}
|
}
|