futian.liu
2023-12-14 83ec5bcd06eece9b9867ecb3302980b92dd17504
consum-base/src/main/java/com/consum/base/controller/BaseGoodsTemplateController.java
@@ -1,29 +1,12 @@
package com.consum.base.controller;
import com.consum.base.BaseController;
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.response.GoodsTemplateVO;
import com.consum.base.service.BaseGoodsTemplateServiceImpl;
import com.consum.base.service.BaseWarehouseServiceImpl;
import com.consum.base.service.LWhGoodsService;
import com.consum.model.po.BaseGoodsModels;
import com.consum.model.po.BaseGoodsTemplate;
import com.consum.model.po.BaseWarehouse;
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.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
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 org.apache.commons.compress.utils.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
@@ -32,24 +15,66 @@
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.EasyExcel;
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.base.service.BaseCategoryService;
import com.consum.base.service.BaseGoodsTemplateService;
import com.consum.base.service.BaseWarehouseService;
import com.consum.base.service.FinSysTenantService;
import com.consum.base.service.LWhGoodsService;
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 BaseGoodsTemplateServiceImpl baseGoodsTemplateService;
    private BaseGoodsTemplateService baseGoodsTemplateService;
    @Autowired
    private LWhGoodsService lWhGoodsService;
    @Autowired
    private BaseWarehouseServiceImpl baseWarehouseService;
    private BaseWarehouseService baseWarehouseService;
    @Autowired
    private FinSysTenantService finSysTenantService;
    @Autowired
    private BaseCategoryService baseCategoryService;
    /**
     * @Description 新增物品模板
@@ -73,8 +98,9 @@
        if (StringUtils.isEmpty(param.getGoodsName())) {
            return ResponseValue.error("物品名称为空");
        }
        //判断同一分类下的物品名称是否重复
        BaseGoodsTemplate goodsTemplate = this.baseGoodsTemplateService.getByGoodsNameAndCategoryId(param.getGoodsName(), param.getCategoryId());
        // 判断同一分类下的物品名称是否重复
        BaseGoodsTemplate goodsTemplate =
            this.baseGoodsTemplateService.getByGoodsNameAndCategoryId(param.getGoodsName(), param.getCategoryId());
        if (goodsTemplate != null) {
            return ResponseValue.error("物品名称已存在");
        }
@@ -154,8 +180,10 @@
     *
     * @author 卢庆阳
     * @date 2023/10/25
     *       <p>
     *       物品的禁用或删除,不影响已经采购入过库的物品信息。
     *       <p>
     */
    //TODO 物品的禁用或删除,不影响已经采购入过库的物品信息。
    @PostMapping("/updStatus")
    public ResponseValue updateStatus() {
        BaseGoodsTemplate goodsTemplate = CommonUtil.getObjFromReqBody(BaseGoodsTemplate.class);
@@ -175,8 +203,10 @@
     * @Description 根据物品id删除物品
     * @Author 卢庆阳
     * @Date 2023/10/25
     *       <p>
     *       物品的禁用或删除,不影响已经采购入过库的物品信息。
     *       <p/>
     */
    //TODO 物品的禁用或删除,不影响已经采购入过库的物品信息。
    @DeleteMapping("/del")
    public ResponseValue updateById() {
        BaseGoodsTemplate goodsTemplate = CommonUtil.getObjFromReqBody(BaseGoodsTemplate.class);
@@ -216,19 +246,21 @@
    @GetMapping("/query/goodsTemplate")
    public ResponseValue queryGoodsTemplateByCategoryId(Long agencyId, Long categoryId) {
        List<BaseGoodsTemplate> list = this.baseGoodsTemplateService.queryGoodsTemplateByCategoryId(agencyId, categoryId, null, null);
        // 不限制机构
        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")
    })
        @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) {
@@ -236,7 +268,7 @@
        Map<String, Object> map = new HashMap<>();
        map.put("categoryId", categoryId);
        List<BaseWarehouse> baseWarehouseList = baseWarehouseService.getByAgencyId(agencyId, (short) 1, (short) 1);
        List<BaseWarehouse> baseWarehouseList = baseWarehouseService.getByAgencyId(agencyId, (short)1, (short)1);
        if (CollectionUtils.isEmpty(baseWarehouseList)) {
            return ResponseValue.error("机构无默认仓库!");
@@ -245,9 +277,9 @@
        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 = :warehouseId "
                + "AND CATEGORY_ID = :categoryId "
                + "WHERE WAREHOUSE_TYPE = 0 " + "AND WAREHOUSE_ID = :warehouseId "
                // TODO 临时解决
                /*+ "AND CATEGORY_ID = :categoryId "*/
                // 1:集采,2:自采
                + "AND BUY_TYPE =1";
@@ -260,6 +292,82 @@
        return ResponseValue.success("查询成功!", resultList);
    }
    @PostMapping("/import")
    public ResponseValue upload(MultipartFile file) throws IOException {
        String originalFilename = file.getOriginalFilename();
        if (!originalFilename.endsWith(".xls")) {
            return ResponseValue.error("文件格式有误!");
        }
        FinSysTenantUser sysInfo = this.getSysInfo();
        if (sysInfo == null) {
            return ResponseValue.error("当前登录用户为空");
        }
        EasyExcel.read(file.getInputStream(), ImportGoodsInfoTemplate.class,
            new AnalysisEventListener<ImportGoodsInfoTemplate>() {
                List<BaseGoodsTemplateParam> list = Lists.newArrayList();
                @Override
                public void invoke(ImportGoodsInfoTemplate data, AnalysisContext analysisContext) {
                    String categoryOne = data.getCategoryOne();
                    String categoryTwo = data.getCategoryTwo();
                    String categoryThree = data.getCategoryThree();
                    String goodsName = data.getGoodsName();
                    String goodModelName = data.getGoodModelName();
                    String unit = data.getUnit();
                    String type = data.getType();
                    String agencyName = data.getAgencyName();
                    BaseCategory baseCategory = baseCategoryService.getByCategoryByName(categoryThree);
                    Long categoryId = baseCategory.getId();
                    Optional<BaseGoodsTemplateParam> optional =
                        list.stream().filter(item -> item.getCategoryId().equals(categoryId)).findFirst();
                    if (optional.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);
                        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);
                    }
                }
                @Override
                public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                    for (BaseGoodsTemplateParam baseGoodsTemplate : list) {
                        baseGoodsTemplateService.add(baseGoodsTemplate, null);
                    }
                }
                @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 RuntimeException("第" + row + "行,第" + column + "列解析异常,请正确填写");
                    } else {
                        throw new RuntimeException(exception.getMessage());
                    }
                }
            }).sheet(0).doRead();
        return ResponseValue.success("导入成功!");
    }
}