package com.consum.base.controller;
|
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Optional;
|
import java.util.stream.Collectors;
|
import cn.hutool.core.util.StrUtil;
|
import com.alibaba.excel.exception.ExcelAnalysisException;
|
import com.consum.base.service.*;
|
import org.apache.commons.compress.utils.Lists;
|
import org.springframework.beans.factory.annotation.Autowired;
|
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;
|
import com.alibaba.excel.EasyExcelFactory;
|
import com.alibaba.excel.context.AnalysisContext;
|
import com.alibaba.excel.event.AnalysisEventListener;
|
import com.alibaba.excel.exception.ExcelDataConvertException;
|
import com.consum.base.BaseController;
|
import com.consum.base.core.type.StatesType;
|
import com.consum.base.core.utils.CommonUtil;
|
import com.consum.base.core.utils.MapUtils;
|
import com.consum.base.core.utils.MapperUtil;
|
import com.consum.base.pojo.BaseGoodsTemplateParam;
|
import com.consum.base.pojo.excel.ImportGoodsInfoTemplate;
|
import com.consum.base.pojo.response.GoodsTemplateVO;
|
import com.consum.model.po.BaseCategory;
|
import com.consum.model.po.BaseGoodsModels;
|
import com.consum.model.po.BaseGoodsTemplate;
|
import com.consum.model.po.BaseWarehouse;
|
import com.consum.model.po.FinSysTenant;
|
import com.consum.model.po.FinSysTenantUser;
|
import com.consum.model.po.SDictData;
|
import com.consum.model.vo.BaseGoodsTemplateVo;
|
import com.walker.db.page.GenericPager;
|
import com.walker.infrastructure.utils.StringUtils;
|
import com.walker.web.ResponseValue;
|
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
|
/**
|
* @Description 物品模板
|
* @Author 卢庆阳
|
* @Date 2023/10/24
|
*/
|
@Api(value = "物品模板", tags = "物品模板")
|
@RestController
|
@RequestMapping("/pc/base/goods/template")
|
public class BaseGoodsTemplateController extends BaseController {
|
|
@Autowired
|
private BaseGoodsTemplateService baseGoodsTemplateService;
|
|
@Autowired
|
private LWhGoodsService lWhGoodsService;
|
|
@Autowired
|
private BaseWarehouseService baseWarehouseService;
|
|
@Autowired
|
private FinSysTenantService finSysTenantService;
|
|
@Autowired
|
private BaseCategoryService baseCategoryService;
|
|
@Autowired
|
private BaseGoodsModelsService baseGoodsModelsService;
|
|
/**
|
* @Description 新增物品模板
|
* @Author 卢庆阳
|
* @Date 2023/10/24
|
*/
|
@PostMapping("/add")
|
public ResponseValue add() {
|
BaseGoodsTemplateParam param = CommonUtil.getObjFromReqBody(BaseGoodsTemplateParam.class);
|
BaseGoodsTemplateParam param2 = new BaseGoodsTemplateParam();
|
CommonUtil.copyProperties(param, param2);
|
param = param2;
|
|
FinSysTenantUser sysInfo = this.getSysInfo();
|
if (param.getCategoryId() == null) {
|
return ResponseValue.error("登录用户信息不存在");
|
}
|
if (param.getCategoryId() == null) {
|
return ResponseValue.error("分类为空");
|
}
|
if (StringUtils.isEmpty(param.getGoodsName())) {
|
return ResponseValue.error("物品名称为空");
|
}
|
BaseCategory baseCategory = new BaseCategory();
|
baseCategory.setId(param2.getCategoryId());
|
BaseCategory baseCategory1 = this.baseCategoryService.get(baseCategory);
|
if (baseCategory1 == null) {
|
return ResponseValue.error("分类不存在");
|
}
|
if (baseCategory1.getLevels() != 3) {
|
return ResponseValue.error("分类不正确");
|
}
|
// 判断同一分类下的物品名称是否重复
|
BaseGoodsTemplate goodsTemplate =
|
this.baseGoodsTemplateService.getByGoodsNameAndCategoryId(param.getGoodsName(), param.getCategoryId());
|
if (goodsTemplate != null) {
|
return ResponseValue.error("物品名称已存在");
|
}
|
|
int result = this.baseGoodsTemplateService.add(param, sysInfo);
|
if (result > 0) {
|
return ResponseValue.success(1);
|
}
|
return ResponseValue.error("新增失败!");
|
}
|
|
/**
|
* @Description 物品模板列表查询
|
* @Author 卢庆阳
|
* @Date 2023/10/24
|
*/
|
@GetMapping("/list")
|
public ResponseValue queryList() {
|
BaseGoodsTemplateParam param = CommonUtil.getObjFromReq(BaseGoodsTemplateParam.class);
|
BaseGoodsTemplateParam param2 = new BaseGoodsTemplateParam();
|
CommonUtil.copyProperties(param, param2);
|
param = param2;
|
|
FinSysTenantUser sysInfo = this.getSysInfo();
|
if (sysInfo == null) {
|
return ResponseValue.error("登录用户信息不存在");
|
}
|
param.setAgencyId(Long.valueOf(sysInfo.getTenantId()));
|
GenericPager<BaseGoodsTemplate> pager = this.baseGoodsTemplateService.queryList(param);
|
return ResponseValue.success(pager);
|
}
|
|
/**
|
* 根据物品id查询物品详情
|
*
|
* @author 卢庆阳
|
* @date 2023/9/26
|
*/
|
@GetMapping("/detail")
|
public ResponseValue getById(Long id) {
|
if (id == null) {
|
return ResponseValue.error("物品id为空");
|
}
|
BaseGoodsTemplateVo vo = this.baseGoodsTemplateService.getById(id);
|
if (vo == null) {
|
return ResponseValue.error("查询失败!");
|
}
|
return ResponseValue.success("查询成功!", vo);
|
}
|
|
/**
|
* @Description 编辑
|
* @Author 卢庆阳
|
* @Date 2023/10/24
|
*/
|
@PostMapping("/edit")
|
public ResponseValue edit() {
|
BaseGoodsTemplateParam param = CommonUtil.getObjFromReqBody(BaseGoodsTemplateParam.class);
|
BaseGoodsTemplateParam param2 = new BaseGoodsTemplateParam();
|
CommonUtil.copyProperties(param, param2);
|
param = param2;
|
|
if (StringUtils.isEmpty(param.getGoodsName())) {
|
return ResponseValue.error("物品名称为空");
|
}
|
List<BaseGoodsModels> models = param.getModels();
|
if (CollectionUtils.isEmpty(models)) {
|
return ResponseValue.error("物品型号为空");
|
}
|
BaseCategory baseCategory = new BaseCategory();
|
baseCategory.setId(param2.getCategoryId());
|
BaseCategory baseCategory1 = this.baseCategoryService.get(baseCategory);
|
if (baseCategory1 == null) {
|
return ResponseValue.error("分类不存在");
|
}
|
if (baseCategory1.getLevels() != 3) {
|
return ResponseValue.error("分类不正确");
|
}
|
int num = this.baseGoodsTemplateService.updateBaseGoodsTemplate(param);
|
return num > 0 ? ResponseValue.success(1) : ResponseValue.error("编辑失败!");
|
}
|
|
/**
|
* 修改状态
|
*
|
* @author 卢庆阳
|
* @date 2023/10/25
|
* <p>
|
* 物品的禁用或删除,不影响已经采购入过库的物品信息。
|
* <p>
|
*/
|
@PostMapping("/updStatus")
|
public ResponseValue updateStatus() {
|
BaseGoodsTemplate goodsTemplate = CommonUtil.getObjFromReqBody(BaseGoodsTemplate.class);
|
BaseGoodsTemplate param2 = new BaseGoodsTemplate();
|
CommonUtil.copyProperties(goodsTemplate, param2);
|
goodsTemplate = param2;
|
|
if (goodsTemplate.getId() == null || goodsTemplate.getStates() == null) {
|
return ResponseValue.error("参数错误");
|
}
|
|
int num = this.baseGoodsTemplateService.updateStatus(goodsTemplate);
|
return num > 0 ? ResponseValue.success(1) : ResponseValue.error("修改失败!");
|
}
|
|
/**
|
* @Description 根据物品id删除物品
|
* @Author 卢庆阳
|
* @Date 2023/10/25
|
* <p>
|
* 物品的禁用或删除,不影响已经采购入过库的物品信息。
|
* <p/>
|
*/
|
@DeleteMapping("/del")
|
public ResponseValue updateById() {
|
BaseGoodsTemplate goodsTemplate = CommonUtil.getObjFromReqBody(BaseGoodsTemplate.class);
|
BaseGoodsTemplate param2 = new BaseGoodsTemplate();
|
CommonUtil.copyProperties(goodsTemplate, param2);
|
goodsTemplate = param2;
|
|
if (goodsTemplate.getId() == null) {
|
return ResponseValue.error("物品id为空");
|
}
|
int num = this.baseGoodsTemplateService.updateById(goodsTemplate, this.getCurrentUser());
|
|
return num > 0 ? ResponseValue.success(1) : ResponseValue.error("删除失败!");
|
}
|
|
/**
|
* @Description 查询仓库类型(数据字典)
|
* @Author 卢庆阳
|
* @Date 2023/10/30
|
*/
|
@GetMapping("/select/classificationCode")
|
public ResponseValue queryClassificationCode() {
|
List<SDictData> list = this.baseGoodsTemplateService.queryClassificationCode();
|
return ResponseValue.success(list);
|
}
|
|
/**
|
* @Description 根据分类id查询物品模板
|
* @Author 卢庆阳
|
* @Date 2023/10/30
|
*/
|
@GetMapping("/selectByCategoryId")
|
public ResponseValue queryByCategoryId(Long categoryId) {
|
List<BaseGoodsTemplate> list = this.baseGoodsTemplateService.queryByCategoryId(categoryId);
|
return ResponseValue.success(list);
|
}
|
|
@GetMapping("/query/goodsTemplate")
|
public ResponseValue queryGoodsTemplateByCategoryId(Long agencyId, Long categoryId) {
|
// 不限制机构
|
List<BaseGoodsTemplate> list = baseGoodsTemplateService.queryGoodsTemplateByCategoryId(null, categoryId,
|
StatesType.NORMAL.getValue(), null);
|
if (list == null) {
|
return ResponseValue.error("查询失败!");
|
}
|
return ResponseValue.success("查询成功!", list);
|
}
|
|
@ApiOperation(value = "调拨查询机构下所有仓库下的分类模板信息", notes = "调拨查询机构下所有仓库下的分类模板信息")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "agencyId", value = "父级机构id", required = true, dataType = "java.lang.Long",
|
paramType = "query"),
|
@ApiImplicitParam(name = "categoryId", value = "分类id", required = true, dataType = "Long",
|
paramType = "query")})
|
@GetMapping("/query/warehouse/goods")
|
public ResponseValue queryWarehouseGoods(Long agencyId, Long categoryId) {
|
|
// 调拨查询所有仓库物品模板信息
|
Map<String, Object> map = new HashMap<>();
|
map.put("categoryId", categoryId);
|
|
List<BaseWarehouse> baseWarehouseList =
|
baseWarehouseService.getBaseWareHouseList(agencyId, StatesType.NORMAL.getValue());
|
if (CollectionUtils.isEmpty(baseWarehouseList)) {
|
return ResponseValue.error("机构无仓库!");
|
|
}
|
List<Long> warehouseIdList = baseWarehouseList.stream().map(BaseWarehouse::getId).collect(Collectors.toList());
|
map.put("warehouseIdList", warehouseIdList);
|
|
String sql =
|
"SELECT DISTINCT bgt.id,bgt.GOODS_NAME, CLASSIFICATION type FROM l_wh_goods g LEFT JOIN base_goods_template bgt ON g.BASE_GOODS_TEMPLATE_ID = bgt.id "
|
+ "WHERE WAREHOUSE_TYPE = 0 " + "AND WAREHOUSE_ID in (:warehouseIdList) "
|
+ "AND CATEGORY_ID = :categoryId "
|
// 1:集采,2:自采
|
+ "AND BUY_TYPE =1";
|
|
List<GoodsTemplateVO> resultList = Lists.newArrayList();
|
List<Map<String, Object>> goodsTemplateList = lWhGoodsService.select(sql, map, new MapperUtil());
|
goodsTemplateList.forEach(item -> {
|
GoodsTemplateVO goodsTemplateVO = MapUtils.convertMapToObj(item, GoodsTemplateVO.class);
|
resultList.add(goodsTemplateVO);
|
});
|
return ResponseValue.success("查询成功!", resultList);
|
}
|
|
/**
|
* 导入物品数据
|
* @param file
|
* @return
|
*/
|
@PostMapping("/import")
|
public ResponseValue importData(MultipartFile file) {
|
String originalFilename = file.getOriginalFilename();
|
// if (!".xls".endsWith(originalFilename)) {
|
// return ResponseValue.error("文件格式有误!");
|
// }
|
FinSysTenantUser sysInfo = this.getSysInfo();
|
if (sysInfo == null) {
|
return ResponseValue.error("当前登录用户为空");
|
}
|
try {
|
EasyExcelFactory.read(file.getInputStream(), ImportGoodsInfoTemplate.class,
|
new AnalysisEventListener<ImportGoodsInfoTemplate>() {
|
/**
|
* 主数据
|
*/
|
final List<BaseGoodsTemplateParam> list = Lists.newArrayList();
|
|
/**
|
* 模块数据
|
*/
|
final List<BaseGoodsModels> baseGoodsModelsArrayList = Lists.newArrayList();
|
|
/**
|
* 读取的行号
|
*/
|
Integer rowIndex = 0;
|
|
/**
|
* 表头信息
|
* @param headMap
|
* @param context
|
*/
|
@Override
|
public void invokeHeadMap(Map headMap, AnalysisContext context) {
|
// 验证表头数量
|
logger.info("解析分发单的表头长度: {}", headMap.size());
|
if (headMap.size() != 7) {
|
throw new ExcelAnalysisException("上传的文件不符!");
|
}
|
}
|
|
/**
|
* 数据处理
|
* @param data
|
* @param analysisContext
|
*/
|
@Override
|
public void invoke(ImportGoodsInfoTemplate data, AnalysisContext analysisContext) {
|
rowIndex++;
|
String categoryOne = data.getCategoryOne();
|
String categoryTwo = data.getCategoryTwo();
|
String categoryThree = data.getCategoryThree();
|
if (StrUtil.isEmpty(categoryThree)) {
|
throw new ExcelAnalysisException("第" + rowIndex + "条数据,品类名称不能为空:" + categoryThree);
|
}
|
String goodsName = data.getGoodsName();
|
if (StrUtil.isEmpty(goodsName)) {
|
throw new ExcelAnalysisException("第" + rowIndex + "条数据,品名不能为空:" + goodsName);
|
}
|
String goodModelName = data.getGoodModelName();
|
if (StrUtil.isEmpty(goodModelName)) {
|
throw new ExcelAnalysisException("第" + rowIndex + "条数据,规格型号不能为空:" + goodModelName);
|
}
|
String unit = data.getUnit();
|
if (StrUtil.isEmpty(unit)) {
|
throw new ExcelAnalysisException("第" + rowIndex + "条数据,单位不能为空:" + unit);
|
}
|
//String type = data.getType();
|
String agencyName = data.getAgencyName();
|
if (StrUtil.isEmpty(agencyName)) {
|
throw new ExcelAnalysisException("第" + rowIndex + "条数据,创建机构不能为空:" + agencyName);
|
}
|
BaseCategory baseCategory = baseCategoryService.getByCategoryByName(categoryThree);
|
if (baseCategory == null) {
|
throw new ExcelAnalysisException("第" + rowIndex + "条数据,未查询到此品类名称:" + categoryThree);
|
}
|
Long categoryId = baseCategory.getId();
|
// 判断同一分类下的物品名称是否重复
|
BaseGoodsTemplate goodsTemplate = baseGoodsTemplateService.getByGoodsNameAndCategoryId(goodsName, categoryId);
|
if (goodsTemplate != null) {
|
// 查看此批次和数量
|
BaseGoodsModels baseGoodsModelsAdd = new BaseGoodsModels();
|
baseGoodsModelsAdd.setGoodsTemplatesId(goodsTemplate.getId());
|
baseGoodsModelsAdd.setStates(1);
|
baseGoodsModelsAdd.setModelName(goodModelName);
|
baseGoodsModelsAdd.setUnit(unit);
|
// 判断同一物品模板id下的 规格型号名称是否重复
|
BaseGoodsModels baseGoodsModels = baseGoodsModelsService.getByModelNameAndGoodsTemplatesId(baseGoodsModelsAdd);
|
if (baseGoodsModels == null) {
|
baseGoodsModelsArrayList.add(baseGoodsModelsAdd);
|
return;
|
} else {
|
throw new ExcelAnalysisException("第" + rowIndex + "条数据" + "物品名称:" + goodsName + "已存在,规格:" + goodModelName + ",单位:" + unit);
|
}
|
}
|
Optional<BaseGoodsTemplateParam> optional =
|
list.stream().filter(item -> item.getCategoryId().equals(categoryId)).findFirst();
|
Optional<BaseGoodsTemplateParam> optional2 =
|
list.stream().filter(item -> item.getGoodsName().equals(goodsName)).findFirst();
|
if (optional.isPresent() && optional2.isPresent()) {
|
BaseGoodsModels baseGoodsModels = new BaseGoodsModels();
|
baseGoodsModels.setModelName(goodModelName);
|
baseGoodsModels.setUnit(unit);
|
optional.get().getModels().add(baseGoodsModels);
|
} else {
|
BaseGoodsTemplateParam baseGoodsTemplate = new BaseGoodsTemplateParam();
|
baseGoodsTemplate.setCategoryId(categoryId);
|
baseGoodsTemplate.setGoodsName(goodsName);
|
baseGoodsTemplate.setStates(1);
|
FinSysTenant finSysTenant = finSysTenantService.selectByName(agencyName);
|
if (finSysTenant == null) {
|
throw new ExcelAnalysisException("第" + rowIndex + "条数据,未查询到此机构:" + agencyName);
|
}
|
baseGoodsTemplate.setAgencyId(finSysTenant.getId());
|
baseGoodsTemplate.setAgencyName(agencyName);
|
List<BaseGoodsModels> models = new ArrayList<>();
|
BaseGoodsModels baseGoodsModels = new BaseGoodsModels();
|
baseGoodsModels.setModelName(goodModelName);
|
baseGoodsModels.setUnit(unit);
|
models.add(baseGoodsModels);
|
baseGoodsTemplate.setModels(models);
|
list.add(baseGoodsTemplate);
|
}
|
}
|
|
/**
|
* 处理后导入数据
|
* @param analysisContext
|
*/
|
@Override
|
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
// 主数据存储
|
for (BaseGoodsTemplateParam baseGoodsTemplate : list) {
|
baseGoodsTemplateService.add(baseGoodsTemplate, null);
|
}
|
// 模块数据存储
|
for (BaseGoodsModels baseGoodsModels : baseGoodsModelsArrayList) {
|
baseGoodsModelsService.add(baseGoodsModels);
|
}
|
}
|
|
@Override
|
public void onException(Exception exception, AnalysisContext analysisContext) throws Exception {
|
if (exception instanceof ExcelDataConvertException) {
|
ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException) exception;
|
Integer row = excelDataConvertException.getRowIndex() + 1;
|
Integer column = excelDataConvertException.getColumnIndex() + 1;
|
throw new ExcelAnalysisException("第" + row + "行,第" + column + "列解析异常,请正确填写");
|
} else {
|
throw new ExcelAnalysisException(exception.getMessage());
|
}
|
}
|
}).sheet(0).doRead();
|
} catch (ExcelAnalysisException e) {
|
return ResponseValue.error(e.getMessage());
|
} catch (RuntimeException e) {
|
e.printStackTrace();
|
return ResponseValue.error("系统错误");
|
}catch (Exception e) {
|
e.printStackTrace();
|
return ResponseValue.error("系统错误");
|
}
|
return ResponseValue.success("导入成功!");
|
}
|
}
|