package com.consum.base.service.impl; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import com.consum.base.Constants; import com.consum.base.core.CodeGeneratorService; import com.consum.base.core.utils.IdUtil; import com.consum.base.pojo.BaseGoodsTemplateParam; import com.consum.base.service.BaseCategoryService; import com.consum.base.service.BaseGoodsModelsService; import com.consum.base.service.BaseGoodsTemplateService; import com.consum.model.po.BaseCategory; import com.consum.model.po.BaseGoodsModels; import com.consum.model.po.BaseGoodsTemplate; import com.consum.model.po.FinSysTenantUser; import com.consum.model.po.SDictData; import com.consum.model.vo.BaseGoodsTemplateVo; 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 cn.hutool.core.convert.Convert; /** * @Description 物品模板 * @Author 卢庆阳 * @Date 2023/10/23 */ @Service public class BaseGoodsTemplateServiceImpl extends BaseServiceImpl implements BaseGoodsTemplateService { @Autowired private CodeGeneratorService codeGeneratorService; @Autowired private BaseCategoryService baseCategoryService; @Autowired private BaseGoodsModelsService baseGoodsModelsService; /** * @return * @Description 根据分类id和状态查询物品模版 * @Author 卢庆阳 * @Date 2023/10/23 */ @Override public List getByCategoryId(Long categoryId) { StringBuilder sql = new StringBuilder("SELECT * FROM base_goods_template WHERE 1 = 1 "); HashMap paramts = new HashMap<>(); // 分类id if (categoryId != null) { sql.append(" and category_id =:category_id "); paramts.put("category_id", categoryId); } sql.append(" and states =1 "); return this.select(sql.toString(), paramts, new BaseCategory()); } /** * @Description 新增物品模板 * @Author 卢庆阳 * @Date 2023/10/24 */ @Override public int add(BaseGoodsTemplateParam param, FinSysTenantUser currentUser) { // 1.新增物品模板 BaseGoodsTemplate baseGoodsTemplate = new BaseGoodsTemplate(); BeanUtils.copyProperties(param, baseGoodsTemplate); long goodsTemplatesId = IdUtil.generateId(); baseGoodsTemplate.setId(goodsTemplatesId); // 根据分类id查询分类 BaseCategory baseCategory = this.baseCategoryService.get(new BaseCategory(param.getCategoryId())); if (baseCategory != null) { baseGoodsTemplate.setCategoryName(baseCategory.getCategoryName()); String classification = baseCategory.getClassification(); // 物品编码 String goodsCode = codeGeneratorService.createGoodsTemplateCode(Convert.toStr(classification, "C")); baseGoodsTemplate.setGoodsCode(goodsCode); // 类别 baseGoodsTemplate.setClassification(classification); } // TODO 一级二级三级机构编号 // 当前机构的父级机构编号 // 机构层级 if (currentUser != null) { // 机构编号 baseGoodsTemplate.setAgencyId(Long.valueOf(currentUser.getTenantId())); // 机构名称 baseGoodsTemplate.setAgencyName(currentUser.getTenantName()); } // 创建时间 long createTime = DateUtils.getDateTimeNumber(System.currentTimeMillis()); baseGoodsTemplate.setCreateDate(createTime); int flag1 = this.insert(baseGoodsTemplate); // 2.新增规格型号 List models = param.getModels(); int flag2 = 0; if (!CollectionUtils.isEmpty(models)) { for (BaseGoodsModels model : models) { model.setId(IdUtil.generateId()); model.setStates(Constants.STATES_ENABLE); model.setGoodsTemplatesId(goodsTemplatesId); model.setCreateTime(createTime); } flag2 = this.baseGoodsModelsService.insert(models); } if (flag1 > 0 && flag2 > 0) { return 1; } else { return 0; } } /** * @Description 物品模板列表查询 * @Author 卢庆阳 * @Date 2023/10/24 */ @Override public GenericPager queryList(BaseGoodsTemplateParam param) { StringBuilder sql = new StringBuilder("SELECT * FROM base_goods_template WHERE 1 = 1 "); HashMap paramts = new HashMap<>(); // 物品名称 if (!StringUtils.isEmpty(param.getGoodsName())) { sql.append(" and goods_name like:goods_name "); paramts.put("goods_name", StringUtils.CHAR_PERCENT + param.getGoodsName() + StringUtils.CHAR_PERCENT); } // 物品编号 if (!StringUtils.isEmpty(param.getGoodsCode())) { sql.append(" and goods_code like:goods_code "); paramts.put("goods_code", StringUtils.CHAR_PERCENT + param.getGoodsCode() + StringUtils.CHAR_PERCENT); } // 分类id if (param.getCategoryId() != null) { sql.append(" and category_id =:category_id "); paramts.put("category_id", param.getCategoryId()); } // 类别 if (!StringUtils.isEmpty(param.getClassification())) { sql.append(" and classification =:classification "); paramts.put("classification", param.getClassification()); } // 所属机构 if (param.getAgencyId() != null) { sql.append(" and agency_id =:agency_id "); paramts.put("agency_id", param.getAgencyId()); } // 状态 if (param.getStates() != null) { sql.append(" and states =:states "); paramts.put("states", param.getStates()); } sql.append(" ORDER BY CREATE_DATE DESC "); return selectSplit(sql.toString(), paramts, new BaseGoodsTemplate()); } /** * 根据物品id查询物品详情 * * @author 卢庆阳 * @date 2023/9/26 */ @Override public BaseGoodsTemplateVo getById(Long id) { // 1.根据物品id查询物品模板 BaseGoodsTemplate goodsTemplate = this.get(new BaseGoodsTemplate(id)); // 2.根据物品id查询规格型号 StringBuilder sql = new StringBuilder("SELECT * FROM base_goods_models WHERE 1 = 1 "); HashMap paramts = new HashMap<>(); // 所属物品模版编号 sql.append(" and goods_templates_id =:goods_templates_id "); paramts.put("goods_templates_id", id); List modelsList = this.select(sql.toString(), paramts, new BaseGoodsModels()); // 3.封装 BaseGoodsTemplateVo vo = new BaseGoodsTemplateVo(); if (goodsTemplate != null) { BeanUtils.copyProperties(goodsTemplate, vo); } if (!CollectionUtils.isEmpty(modelsList)) { vo.setModels(modelsList); } return vo; } /** * @Description 编辑 * @Author 卢庆阳 * @Date 2023/10/24 */ @Override public int updateBaseGoodsTemplate(BaseGoodsTemplateParam param) { // 1.修改物品模板 BaseGoodsTemplate baseGoodsTemplate = new BaseGoodsTemplate(); BeanUtils.copyProperties(param, baseGoodsTemplate); BaseCategory baseCategory = this.baseCategoryService.get(new BaseCategory(param.getCategoryId())); if (baseCategory != null) { baseGoodsTemplate.setCategoryName(baseCategory.getCategoryName()); } int flag1 = this.update(baseGoodsTemplate); // 2.修改规格型号的单位 // TODO id 物品型号修改待整理 List modelsList = param.getModels(); for (BaseGoodsModels baseGoodsModel : modelsList) { BaseGoodsModels baseGoodsModels = new BaseGoodsModels(); BeanUtils.copyProperties(baseGoodsModel, baseGoodsModels); } int flag2 = this.update(modelsList); if (flag1 > 0 && flag2 > 0) { return 1; } else { return 0; } } /** * @Description 根据物品名称和分类id查询物品 * @Author 卢庆阳 * @Date 2023/10/24 */ @Override public BaseGoodsTemplate getByGoodsNameAndCategoryId(String goodsName, Long categoryId) { StringBuilder sql = new StringBuilder("SELECT * FROM base_goods_template WHERE STATES != 3 "); HashMap paramts = new HashMap<>(); // 物品名称 sql.append(" and goods_name =:goods_name "); paramts.put("goods_name", goodsName); // 分类id sql.append(" and category_id =:category_id "); paramts.put("category_id", categoryId); return this.get(sql.toString(), paramts, new BaseGoodsTemplate()); } /** * 根据型号ID查询物品信息 * * @param modelId * @return */ private static String QUERY_GOODSINFO_BY_MODELID = "SELECT model.MODEL_NAME modelName,model.UNIT,temp.id goodsId, temp.GOODS_CODE goodsCode,temp.GOODS_NAME goodsName,temp.CLASSIFICATION classification,temp.CATEGORY_ID categoryId FROM BASE_GOODS_MODELS model LEFT JOIN BASE_GOODS_TEMPLATE temp ON model.GOODS_TEMPLATES_ID=temp.id WHERE 1=1 "; @Override public Map queryGoodsInfoByModelId(Long modelId) { StringBuilder sqlStr = new StringBuilder(QUERY_GOODSINFO_BY_MODELID); Map params = new HashMap<>(); if (modelId != null) { sqlStr.append(" AND model.id=:modelId"); params.put("modelId", modelId); } List> tempGoodsInfo = this.select(sqlStr.toString(), params); if (CollectionUtils.isEmpty(tempGoodsInfo)) { return null; } return tempGoodsInfo.get(0); } /** * 修改状态 * * @author 卢庆阳 * @date 2023/10/25 */ @Override public int updateStatus(BaseGoodsTemplate goodsTemplate) { return this.update(goodsTemplate); } /** * @Description 根据物品id删除物品 * @Author 卢庆阳 * @Date 2023/10/25 */ @Override public int updateById(BaseGoodsTemplate goodsTemplate, S_user_core currentUser) { goodsTemplate.setStates(Constants.STATES_DELETED); // 删除时间 goodsTemplate.setDTime(DateUtils.getDateTimeNumber(System.currentTimeMillis())); // 删除人id和删除人姓名 goodsTemplate.setDUserId(currentUser.getId()); goodsTemplate.setDUserName(currentUser.getUser_name()); return this.update(goodsTemplate); } /** * @return * @Description 查询仓库类型(数据字典) * @Author 卢庆阳 * @Date 2023/10/30 */ @Override public List queryClassificationCode() { StringBuilder sql = new StringBuilder("SELECT * FROM s_dict_data WHERE dict_type = 'CLASSIFICATION_CODE' order by dict_sort"); return this.select(sql.toString(), new Object[] {}, new SDictData()); } /** * @Description 根据分类id查询物品模板 * @Author 卢庆阳 * @Date 2023/10/30 */ @Override public List queryByCategoryId(Long categoryId) { BaseGoodsTemplate goodsTemplate = new BaseGoodsTemplate(); goodsTemplate.setCategoryId(categoryId); return this.select(goodsTemplate); } /** * @param agencyId * @param categoryId * @param states * @param goodsName 全匹配!!! * @return */ @Override public List queryGoodsTemplateByCategoryId(Long agencyId, Long categoryId, Short states, String goodsName) { StringBuilder sql = new StringBuilder("SELECT * FROM base_goods_template WHERE 1=1 "); Map params = new HashMap<>(); if (agencyId != null) { sql.append("AND AGENCY_ID=:agencyId "); params.put("agencyId", agencyId); } if (categoryId != null) { sql.append("AND CATEGORY_ID=:categoryId "); params.put("categoryId", categoryId); } if (states != null) { sql.append("AND STATES=:states "); params.put("states", states); } if (StringUtils.isNotEmpty(goodsName)) { sql.append(" and GOODS_NAME =:goodsName "); params.put("goodsName", goodsName); } return this.select(sql.toString(), params, new BaseGoodsTemplate()); } }