From 30906170228f272283d032158ca69270d240a7ab Mon Sep 17 00:00:00 2001 From: fanzongzhe0036 Date: Mon, 10 Mar 2025 17:35:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=94=AE=E5=90=8E=E5=95=86=E5=93=81=E5=AF=BC?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/dictcommon/DictCommonFeign.java | 5 + .../dictcommon/DictCommonFeignFallback.java | 6 + .../biz/dictcommon/DictCommonMapper.java | 2 + .../biz/dictcommon/DictCommonMapper.xml | 10 + .../portal/biz/dictcommon/DictCommonRest.java | 5 + .../biz/dictcommon/DictCommonService.java | 9 + .../base/apiadmin/base/BaseGoodsSpuRest.java | 34 ++- .../basebrandinfo/BaseBrandInfoService.java | 10 +- .../base/basegoodsspu/BaseGoodsSpuMapper.java | 14 +- .../base/basegoodsspu/BaseGoodsSpuMapper.xml | 46 +++- .../basegoodsspu/BaseGoodsSpuService.java | 229 ++++++++++++++++-- .../biz/base/basegoodsspu/ImportDataVo.java | 2 + .../basegoodstype/BaseGoodsTypeService.java | 8 +- .../basegoodsunit/BaseGoodsUnitService.java | 7 +- .../BaseManufacturerService.java | 8 +- .../dictcommonfeign/DictCommonFeign.java | 25 ++ .../portal/dictcommonfeign/DictCommonVo.java | 32 +++ .../static/商品信息导入模板.xls | Bin 0 -> 17920 bytes 18 files changed, 403 insertions(+), 49 deletions(-) create mode 100644 yxt-base-biz/src/main/java/com/yxt/base/feign/portal/dictcommonfeign/DictCommonFeign.java create mode 100644 yxt-base-biz/src/main/java/com/yxt/base/feign/portal/dictcommonfeign/DictCommonVo.java create mode 100644 yxt-base-biz/src/main/resources/static/商品信息导入模板.xls diff --git a/anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/dictcommon/DictCommonFeign.java b/anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/dictcommon/DictCommonFeign.java index 890de15aff..3ca7dcaa68 100644 --- a/anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/dictcommon/DictCommonFeign.java +++ b/anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/dictcommon/DictCommonFeign.java @@ -77,4 +77,9 @@ public interface DictCommonFeign { @ResponseBody @ApiOperation("查询数据字典") ResultBean> getTypeValuesH5(@PathVariable("key") String key); + + @GetMapping("/selectByDictTypeAndDictValue") + @ResponseBody + @ApiOperation("根据数据字典类型和值查询") + ResultBean selectByDictTypeAndDictValue(@RequestParam("dictType") String dictType,@RequestParam("dictValue") String dictValue); } diff --git a/anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/dictcommon/DictCommonFeignFallback.java b/anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/dictcommon/DictCommonFeignFallback.java index ce0c2411f9..9e193f286c 100644 --- a/anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/dictcommon/DictCommonFeignFallback.java +++ b/anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/dictcommon/DictCommonFeignFallback.java @@ -69,4 +69,10 @@ public class DictCommonFeignFallback implements DictCommonFeign { public ResultBean> getTypeValuesH5(String key) { return null; } + + @Override + public ResultBean selectByDictTypeAndDictValue(String dictType, String dictValue) { + return null; + } + } diff --git a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/dictcommon/DictCommonMapper.java b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/dictcommon/DictCommonMapper.java index 3c116e89aa..f050454d34 100644 --- a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/dictcommon/DictCommonMapper.java +++ b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/dictcommon/DictCommonMapper.java @@ -67,4 +67,6 @@ public interface DictCommonMapper extends BaseMapper { String selectByValue(String dictValue); List getTypeValuesH5(String key); + + DictCommonVo selectByDictTypeAndDictValue(@Param("dictType")String dictType, @Param("dictValue")String dictValue); } diff --git a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/dictcommon/DictCommonMapper.xml b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/dictcommon/DictCommonMapper.xml index bba6565283..8f02a5f70c 100644 --- a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/dictcommon/DictCommonMapper.xml +++ b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/dictcommon/DictCommonMapper.xml @@ -44,4 +44,14 @@ + \ No newline at end of file diff --git a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/dictcommon/DictCommonRest.java b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/dictcommon/DictCommonRest.java index 8da1e4eb95..daa3ee6032 100644 --- a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/dictcommon/DictCommonRest.java +++ b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/dictcommon/DictCommonRest.java @@ -162,4 +162,9 @@ public class DictCommonRest implements DictCommonFeign { public ResultBean> getTypeValuesH5(String key) { return dictCommonService.getTypeValuesH5(key); } + + @Override + public ResultBean selectByDictTypeAndDictValue(String dictType, String dictValue) { + return dictCommonService.selectByDictTypeAndDictValue(dictType,dictValue); + } } diff --git a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/dictcommon/DictCommonService.java b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/dictcommon/DictCommonService.java index 869e200149..8bdb62cb72 100644 --- a/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/dictcommon/DictCommonService.java +++ b/anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/dictcommon/DictCommonService.java @@ -87,4 +87,13 @@ public class DictCommonService extends MybatisBaseService selectByDictTypeAndDictValue(String dictType, String dictValue) { + ResultBean rb = ResultBean.fireFail(); + DictCommonVo dictCommon = baseMapper.selectByDictTypeAndDictValue(dictType,dictValue); + if (null != dictCommon) { + return rb.success().setData(dictCommon); + } + return rb; + } } diff --git a/yxt-base-biz/src/main/java/com/yxt/base/apiadmin/base/BaseGoodsSpuRest.java b/yxt-base-biz/src/main/java/com/yxt/base/apiadmin/base/BaseGoodsSpuRest.java index 4643996f1d..e4b81f57e5 100644 --- a/yxt-base-biz/src/main/java/com/yxt/base/apiadmin/base/BaseGoodsSpuRest.java +++ b/yxt-base-biz/src/main/java/com/yxt/base/apiadmin/base/BaseGoodsSpuRest.java @@ -11,7 +11,11 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URLEncoder; import java.util.List; /** @@ -24,7 +28,8 @@ import java.util.List; public class BaseGoodsSpuRest { @Autowired BaseGoodsSpuService baseGoodsSpuService; - + @Autowired + private HttpServletResponse response; @ApiOperation("根据sid查询商品") @GetMapping("/fetchEntityBySid") @@ -125,6 +130,33 @@ public class BaseGoodsSpuRest { return baseGoodsSpuService.importGoodsSpuData(file,orgPath,userSid,request); } + @ApiOperation(value = "下载模板") + @PostMapping("/downloadExcel") + public void downloadExcel() { + try { + InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("static/商品信息导入模板.xls"); + //获取要下载的模板名称 + String fileName = "商品信息导入模板.xls"; + response.setHeader("content-type", "application/octet-stream"); + response.setContentType("application/octet-stream"); + // 下载文件能正常显示中文 + fileName = URLEncoder.encode(fileName, "UTF-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + response.setHeader("fileName", fileName); + response.setHeader("Access-Control-Expose-Headers", "filename"); + + OutputStream out = response.getOutputStream(); + byte[] b = new byte[2048]; + int len; + while ((len = resourceAsStream.read(b)) != -1) { + out.write(b, 0, len); + } + out.close(); + resourceAsStream.close(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } //------------------------------- 行政类商品管理 -------------------------------- diff --git a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basebrandinfo/BaseBrandInfoService.java b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basebrandinfo/BaseBrandInfoService.java index 4df9ab5ea2..9e3835ae3c 100644 --- a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basebrandinfo/BaseBrandInfoService.java +++ b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basebrandinfo/BaseBrandInfoService.java @@ -4,13 +4,11 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateTime; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.yxt.base.biz.base.basegoodsspu.BaseGoodsSpuListVo; import com.yxt.base.feign.portal.privilege.PrivilegeQuery; import com.yxt.base.feign.portal.sysorganization.SysOrganizationFeign; import com.yxt.base.feign.portal.sysorganization.SysOrganizationVo; import com.yxt.base.feign.portal.sysstafforg.SysStaffOrgFeign; import com.yxt.base.feign.portal.sysuser.SysUserFeign; -import com.yxt.base.utils.OrgPathQuery; import com.yxt.common.base.config.component.FileUploadComponent; import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.base.utils.PagerUtil; @@ -20,10 +18,12 @@ import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.RequestBody; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.List; import java.util.stream.Collectors; /** @@ -168,7 +168,7 @@ public class BaseBrandInfoService extends MybatisBaseService initialization(String sid) { diff --git a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.java b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.java index 8d9164857b..759b1c61b4 100644 --- a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.java +++ b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.java @@ -23,13 +23,23 @@ public interface BaseGoodsSpuMapper extends BaseMapper { void delBySpuSid(@Param("sid") String sid); - BaseGoodsSpu checkForInsert(@Param("goodsCode")String goodsCode, @Param("deptSid")String deptSid); + BaseGoodsSpu checkForInsert(@Param("goodsCode")String goodsCode,@Param("manufacturerSid") String manufacturerSid, @Param("deptSid")String deptSid); - BaseGoodsSpu checkForUpdate(@Param("goodsCode")String goodsCode,@Param("useOrgSid") String useOrgSid, @Param("sid")String sid); + BaseGoodsSpu checkForUpdate(@Param("goodsCode")String goodsCode,@Param("manufacturerSid") String manufacturerSid,@Param("useOrgSid") String useOrgSid, @Param("sid")String sid); int selByCodeAndDept(@Param("code") String code,@Param("deptSid") String deptSid); List selPurchaseAssetInfo(@Param("useOrgSid") String useOrgSid,@Param("name") String name); String selGoodsTypeBySid(@Param("sid") String sid); + + String selBrandSid(@Param("useOrgSid")String useOrgSid, @Param("brandName")String brandName); + + String selGoodsTypeSid(@Param("useOrgSid")String useOrgSid, @Param("goodsType")String goodsType); + + int selGoodsSidForImport(@Param("goodsCode") String goodsCode, @Param("manufacturerName") String manufacturerName, @Param("useOrgSid") String useOrgSid); + + String selManufacturerSid(@Param("useOrgSid")String useOrgSid, @Param("manufacturerName") String manufacturerName); + + String selUnitSid(@Param("useOrgSid")String useOrgSid, @Param("unit")String unit); } diff --git a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.xml b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.xml index 812f811723..3bba6e3d4f 100644 --- a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.xml +++ b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.xml @@ -81,6 +81,7 @@ WHERE select * from base_goods_spu where goodsCode = #{goodsCode} + and manufacturerSid = #{manufacturerSid} and useOrgSid = #{deptSid} and isDelete = 0 @@ -88,6 +89,7 @@ WHERE select * from base_goods_spu where goodsCode = #{goodsCode} + and manufacturerSid = #{manufacturerSid} and useOrgSid = #{useOrgSid} and isDelete = 0 and sid != #{sid} @@ -103,13 +105,51 @@ WHERE SELECT * FROM base_goods_spu WHERE useOrgSid = #{useOrgSid} - and goodsClassKey = '003' - and isDelete = 0 + and goodsClassKey = '003' + and isDelete = 0 and goodsCode like concat('%',#{name},'%') + + + + + diff --git a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuService.java b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuService.java index 075ce225b6..295bde7915 100644 --- a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuService.java +++ b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuService.java @@ -5,6 +5,7 @@ import cn.hutool.core.date.DateTime; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.yxt.base.biz.base.basebrandinfo.BaseBrandInfo; +import com.yxt.base.biz.base.basebrandinfo.BaseBrandInfoDto; import com.yxt.base.biz.base.basebrandinfo.BaseBrandInfoService; import com.yxt.base.biz.base.basegoodssku.BaseGoodsSku; import com.yxt.base.biz.base.basegoodssku.BaseGoodsSkuService; @@ -16,11 +17,16 @@ import com.yxt.base.biz.base.basegoodsskuextend.UrlsVo; import com.yxt.base.biz.base.basegoodsspudetail.BaseGoodsSpuDetailService; import com.yxt.base.biz.base.basegoodsspudetail.BaseGoodsSpuDetailVo; import com.yxt.base.biz.base.basegoodstype.BaseGoodsType; +import com.yxt.base.biz.base.basegoodstype.BaseGoodsTypeDto; import com.yxt.base.biz.base.basegoodstype.BaseGoodsTypeService; import com.yxt.base.biz.base.basegoodsunit.BaseGoodsUnit; +import com.yxt.base.biz.base.basegoodsunit.BaseGoodsUnitDto; import com.yxt.base.biz.base.basegoodsunit.BaseGoodsUnitService; import com.yxt.base.biz.base.basemanufacturer.BaseManufacturer; +import com.yxt.base.biz.base.basemanufacturer.BaseManufacturerDto; import com.yxt.base.biz.base.basemanufacturer.BaseManufacturerService; +import com.yxt.base.feign.portal.dictcommonfeign.DictCommonFeign; +import com.yxt.base.feign.portal.dictcommonfeign.DictCommonVo; import com.yxt.base.feign.portal.privilege.PrivilegeQuery; import com.yxt.base.feign.portal.sysorganization.SysOrganizationFeign; import com.yxt.base.feign.portal.sysorganization.SysOrganizationVo; @@ -80,6 +86,8 @@ public class BaseGoodsSpuService extends MybatisBaseService> listPage(PagerQuery pq) { ResultBean rb = ResultBean.fireFail(); @@ -317,7 +325,7 @@ public class BaseGoodsSpuService extends MybatisBaseService split = Arrays.asList(orgPath.split("/")); - if (split.size() > 1) { - //获取本级sid获取本级部门信息 - SysOrganizationVo sysOrganization1 = sysOrganizationFeign.fetchBySid(split.get(split.size() - 1)).getData(); - useOrgSid = sysOrganization1.getSid(); - } else { - SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(split.get(0)).getData(); - useOrgSid = sysOrganization.getSid(); + String useOrgSid = ""; + String createOrgSid = ""; + if (StringUtils.isNotBlank(orgPath)) { + List split = Arrays.asList(orgPath.split("/")); + if (split.size() > 1) { + //获取本级sid获取本级部门信息 + SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(split.get(split.size() - 2)).getData(); + SysOrganizationVo sysOrganization1 = sysOrganizationFeign.fetchBySid(split.get(split.size() - 1)).getData(); + useOrgSid = sysOrganization1.getSid(); + } else { + SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(split.get(0)).getData(); + useOrgSid = sysOrganization.getSid(); + } + createOrgSid = sysStaffOrgFeign.getOrgSidByPath(orgPath).getData(); } int size = 0; @@ -688,15 +701,10 @@ public class BaseGoodsSpuService extends MybatisBaseService setMsg = returnMsg.getSetMsg(); StringBuffer sbMsg = new StringBuffer(); List list = returnMsg.getList(); - if (!list.isEmpty() && list.size() > 0) { - for (ImportDataVo vo : list) { - - } - } if (null != setMsg && setMsg.size() > 0) { for (String s : setMsg) { sbMsg.append(s).append(","); @@ -706,6 +714,153 @@ public class BaseGoodsSpuService extends MybatisBaseService 0) { + for (ImportDataVo vo : list) { + String sortNo = "";//排序号 + if (StringUtils.isNotBlank(vo.getSortNo())) { + sortNo = vo.getSortNo(); + } + String goodsName = "";//商品名称 + if (StringUtils.isNotBlank(vo.getGoodsName())) { + goodsName = vo.getGoodsName(); + } + String goodsCode = "";//图号 + if (StringUtils.isNotBlank(vo.getGoodsCode())) { + goodsCode = vo.getGoodsCode(); + } + String barCode = "";//条码 + if (StringUtils.isNotBlank(vo.getBarCode())) { + barCode = vo.getBarCode(); + } + String goodsType = "";//商品类别 + String goodsTypeSid = "";//商品类别 + if (StringUtils.isNotBlank(vo.getGoodsTypeName())) { + goodsType = vo.getGoodsTypeName(); + } + String brandName = "";//品牌 + String brandSid = "";//品牌 + if (StringUtils.isNotBlank(vo.getBrandName())) { + brandName = vo.getBrandName(); + } + String manufacturerName = "";//厂家 + String manufacturerSid = "";//厂家 + if (StringUtils.isNotBlank(vo.getManufacturerName())) { + manufacturerName = vo.getManufacturerName(); + } + String guige = "";//规格 + if (StringUtils.isNotBlank(vo.getIndexes())) { + guige = vo.getIndexes(); + } + String unit = "";//计量单位 + String unitSid = "";//计量单位 + if (StringUtils.isNotBlank(vo.getGoodsUnitName())) { + unit = vo.getGoodsUnitName(); + } + String upNum = "";//库存上限 + if (StringUtils.isNotBlank(vo.getInventoryAlertUpperLimit())) { + upNum = vo.getInventoryAlertUpperLimit(); + } + String lowNum = "";//库存下限 + if (StringUtils.isNotBlank(vo.getInventoryAlertLowerLimit())) { + lowNum = vo.getInventoryAlertLowerLimit(); + } + String level = "";//商品等级 + String levelKey = "";//商品等级 + if (StringUtils.isNotBlank(vo.getGoodsLevelValue())) { + level = vo.getGoodsLevelValue(); + levelKey = vo.getGoodsLevelKey(); + } + String classType = "";//商品类型 + String classTypeKey = "";//商品类型 + if (StringUtils.isNotBlank(vo.getGoodsClassValue())) { + classType = vo.getGoodsClassValue(); + classTypeKey = vo.getGoodsClassKey(); + } + //判断品牌是否存在 + if (StringUtils.isNotBlank(brandName)) { + String brandSelSid = baseMapper.selBrandSid(useOrgSid, brandName); + if (StringUtils.isNotBlank(brandSelSid)) { + brandSid = brandSelSid; + } else { + String brandCode = PinYinUtils.sx(brandName); + BaseBrandInfoDto brandInfoDto = new BaseBrandInfoDto(); + brandInfoDto.setBrandName(brandName); + brandInfoDto.setBrandCode(brandCode); + brandInfoDto.setOrgPath(orgPath); + brandSid = baseBrandInfoService.saveOrUpdate(brandInfoDto).getData(); + } + } + //判断商品类别是否存在 + if (StringUtils.isNotBlank(goodsType)) { + String goodsTypeSelSid = baseMapper.selGoodsTypeSid(useOrgSid, goodsType); + if (StringUtils.isNotBlank(goodsTypeSelSid)) { + goodsTypeSid = goodsTypeSelSid; + } else { + String goodsTypeCode = PinYinUtils.sx(goodsType); + BaseGoodsTypeDto goodsTypeDto = new BaseGoodsTypeDto(); + goodsTypeDto.setGoodsTypeName(goodsType); + goodsTypeDto.setGoodsTypeCode(goodsTypeCode); + goodsTypeDto.setOrgPath(orgPath); + goodsTypeDto.setSortNo("1"); + goodsTypeDto.setOutStockRule("0"); + goodsTypeDto.setOutStockRuleValue("先进先出"); + goodsTypeSid = baseGoodsTypeService.saveOrUpdate(goodsTypeDto).getData(); + } + } + //判断厂家是否存在 + if (StringUtils.isNotBlank(manufacturerName)) { + String manufacturerSelSid = baseMapper.selManufacturerSid(useOrgSid, manufacturerName); + if (StringUtils.isNotBlank(manufacturerSelSid)) { + manufacturerSid = manufacturerSelSid; + } else { + String manufactNo = PinYinUtils.sx(manufacturerName); + BaseManufacturerDto manufacturerDto = new BaseManufacturerDto(); + manufacturerDto.setManufacturerName(manufacturerName); + manufacturerDto.setManufacturerCode(manufactNo); + manufacturerDto.setSortNo("1"); + manufacturerDto.setOrgPath(orgPath); + manufacturerSid = baseManufacturerService.saveOrUpdate(manufacturerDto).getData(); + } + } + //判断计量单位是否存在 + if (StringUtils.isNotBlank(unit)) { + String unitSelSid = baseMapper.selUnitSid(useOrgSid, unit); + if (StringUtils.isNotBlank(unitSelSid)) { + unitSid = unitSelSid; + } else { + BaseGoodsUnitDto unitDto = new BaseGoodsUnitDto(); + unitDto.setUnitName(unit); + unitDto.setOrgPath(orgPath); + unitSid = baseGoodsUnitService.saveOrUpdate(unitDto).getData(); + } + } + BaseGoodsDetailsDto dto = new BaseGoodsDetailsDto(); + dto.setUserSid(userSid); + dto.setUseOrgSid(useOrgSid); + dto.setCreateOrgSid(createOrgSid); + dto.setOrgPath(orgPath); + dto.setSortNo(sortNo); + dto.setGoodsName(goodsName); + dto.setGoodsCode(goodsCode); + dto.setBarCode(barCode); + dto.setGoodsTypeSid(goodsTypeSid); + dto.setGoodsTypeName(goodsType); + dto.setBrandSid(brandSid); + dto.setBrandName(brandName); + dto.setManufacturerSid(manufacturerSid); + dto.setManufacturerName(manufacturerName); + dto.setIndexes(guige); + dto.setGoodsUnitSid(unitSid); + dto.setGoodsUnitName(unit); + dto.setInventoryAlertUpperLimit(upNum); + dto.setInventoryAlertLowerLimit(lowNum); + dto.setGoodsClassKey(classTypeKey); + dto.setGoodsClassValue(classType); + dto.setGoodsLevelKey(levelKey); + dto.setGoodsLevelValue(level); + saveOrUpdateGoods(dto); + } + } size = list.size(); } catch (Exception e) { e.printStackTrace(); @@ -713,7 +868,7 @@ public class BaseGoodsSpuService extends MybatisBaseService voList = new ArrayList<>(); Set setMsg = new HashSet<>(); @@ -851,6 +1006,44 @@ public class BaseGoodsSpuService extends MybatisBaseService 0) { + setMsg.add("图号" + goodsCode + "已存在,请勿重复添加"); + } + } + if (StringUtils.isNotBlank(v.getGoodsLevelValue())) { + String goodsLevelValue = v.getGoodsLevelValue(); + ResultBean voResultBean = dictCommonFeign.selectByDictTypeAndDictValue("goodsLevel", goodsLevelValue); + if (voResultBean.getSuccess()) { + DictCommonVo commonVo = voResultBean.getData(); + v.setGoodsLevelKey(commonVo.getDictKey()); + } else { + setMsg.add("商品等级(" + v.getGoodsLevelValue() + ")不存在"); + } + } + if (StringUtils.isNotBlank(v.getGoodsClassValue())) { + String goodsClassValue = v.getGoodsClassValue(); + ResultBean voResultBean = dictCommonFeign.selectByDictTypeAndDictValue("goodsClass", goodsClassValue); + if (voResultBean.getSuccess()) { + DictCommonVo commonVo = voResultBean.getData(); + v.setGoodsClassKey(commonVo.getDictKey()); + } else { + setMsg.add("商品类型(" + v.getGoodsClassValue() + ")不存在"); + } + } + } + } returnMsg.setList(voList); returnMsg.setSetMsg(setMsg); return returnMsg; diff --git a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/ImportDataVo.java b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/ImportDataVo.java index af36798b22..8b9d6275e8 100644 --- a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/ImportDataVo.java +++ b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/ImportDataVo.java @@ -17,6 +17,8 @@ public class ImportDataVo { private String inventoryAlertUpperLimit;//库存上限 private String inventoryAlertLowerLimit;//库存下限 private String goodsClassValue;//商品类型 + private String goodsClassKey;//商品类型 private String goodsLevelValue;//商品等级 + private String goodsLevelKey;//商品等级 } diff --git a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodstype/BaseGoodsTypeService.java b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodstype/BaseGoodsTypeService.java index 0dd7443612..5bcd5b4cc4 100644 --- a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodstype/BaseGoodsTypeService.java +++ b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodstype/BaseGoodsTypeService.java @@ -4,14 +4,11 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateTime; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.yxt.base.biz.base.basebrandinfo.BaseBrandInfo; -import com.yxt.base.biz.base.basegoodsspu.BaseGoodsSpuListVo; import com.yxt.base.feign.portal.privilege.PrivilegeQuery; import com.yxt.base.feign.portal.sysorganization.SysOrganizationFeign; import com.yxt.base.feign.portal.sysorganization.SysOrganizationVo; import com.yxt.base.feign.portal.sysstafforg.SysStaffOrgFeign; import com.yxt.base.feign.portal.sysuser.SysUserFeign; -import com.yxt.base.utils.OrgPathQuery; import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.base.utils.PagerUtil; import com.yxt.common.base.utils.StringUtils; @@ -20,11 +17,8 @@ import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; @@ -240,7 +234,7 @@ public class BaseGoodsTypeService extends MybatisBaseService initialization(String sid) { diff --git a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsunit/BaseGoodsUnitService.java b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsunit/BaseGoodsUnitService.java index d4642bd1dd..bb5de3220a 100644 --- a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsunit/BaseGoodsUnitService.java +++ b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsunit/BaseGoodsUnitService.java @@ -4,14 +4,11 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateTime; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.yxt.base.biz.base.basemanufacturer.BaseManufacturer; -import com.yxt.base.biz.base.basemanufacturer.BaseManufacturerVo; import com.yxt.base.feign.portal.privilege.PrivilegeQuery; import com.yxt.base.feign.portal.sysorganization.SysOrganizationFeign; import com.yxt.base.feign.portal.sysorganization.SysOrganizationVo; import com.yxt.base.feign.portal.sysstafforg.SysStaffOrgFeign; import com.yxt.base.feign.portal.sysuser.SysUserFeign; -import com.yxt.base.utils.OrgPathQuery; import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.base.utils.PagerUtil; import com.yxt.common.base.utils.StringUtils; @@ -20,8 +17,6 @@ import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; import java.text.SimpleDateFormat; import java.util.Arrays; @@ -159,7 +154,7 @@ public class BaseGoodsUnitService extends MybatisBaseService initialization(String sid) { diff --git a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basemanufacturer/BaseManufacturerService.java b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basemanufacturer/BaseManufacturerService.java index 8ba4e3bff3..e8d536a111 100644 --- a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basemanufacturer/BaseManufacturerService.java +++ b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basemanufacturer/BaseManufacturerService.java @@ -4,14 +4,11 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateTime; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.yxt.base.biz.base.basegoodstype.BaseGoodsType; -import com.yxt.base.biz.base.basegoodstype.BaseGoodsTypeVo; import com.yxt.base.feign.portal.privilege.PrivilegeQuery; import com.yxt.base.feign.portal.sysorganization.SysOrganizationFeign; import com.yxt.base.feign.portal.sysorganization.SysOrganizationVo; import com.yxt.base.feign.portal.sysstafforg.SysStaffOrgFeign; import com.yxt.base.feign.portal.sysuser.SysUserFeign; -import com.yxt.base.utils.OrgPathQuery; import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.base.utils.PagerUtil; import com.yxt.common.base.utils.StringUtils; @@ -20,11 +17,8 @@ import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; @@ -161,7 +155,7 @@ public class BaseManufacturerService extends MybatisBaseService initialization(String sid) { diff --git a/yxt-base-biz/src/main/java/com/yxt/base/feign/portal/dictcommonfeign/DictCommonFeign.java b/yxt-base-biz/src/main/java/com/yxt/base/feign/portal/dictcommonfeign/DictCommonFeign.java new file mode 100644 index 0000000000..7791637f84 --- /dev/null +++ b/yxt-base-biz/src/main/java/com/yxt/base/feign/portal/dictcommonfeign/DictCommonFeign.java @@ -0,0 +1,25 @@ +package com.yxt.base.feign.portal.dictcommonfeign; + +import com.yxt.common.core.result.ResultBean; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * @author dimengzhe + * @date 2021/7/5 21:59 + * @description + */ +@FeignClient( + contextId = "anrui-portal-DictCommon", + name = "anrui-portal", + path = "v1/dictcommons" + ) +public interface DictCommonFeign { + @GetMapping("/selectByDictTypeAndDictValue") + @ResponseBody + @ApiOperation("根据数据字典类型和值查询") + ResultBean selectByDictTypeAndDictValue(@RequestParam("dictType") String dictType,@RequestParam("dictValue") String dictValue); +} diff --git a/yxt-base-biz/src/main/java/com/yxt/base/feign/portal/dictcommonfeign/DictCommonVo.java b/yxt-base-biz/src/main/java/com/yxt/base/feign/portal/dictcommonfeign/DictCommonVo.java new file mode 100644 index 0000000000..535ce89b92 --- /dev/null +++ b/yxt-base-biz/src/main/java/com/yxt/base/feign/portal/dictcommonfeign/DictCommonVo.java @@ -0,0 +1,32 @@ +package com.yxt.base.feign.portal.dictcommonfeign; + +import com.yxt.common.core.vo.Vo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author dimengzhe + * @date 2021/6/23 15:54 + * @description + */ +@Data +public class DictCommonVo implements Vo { + private static final long serialVersionUID = -1094142938193916816L; + + @ApiModelProperty(value = "数据字典项sid") + private String sid; + + @ApiModelProperty(value = "数据字典项key") + private String dictKey; + + @ApiModelProperty(value = "数据字典类型") + private String dictType; + + @ApiModelProperty(value = "数据字典项名称") + private String dictValue; + @ApiModelProperty(value = "父级sid:0为第一级") + private String parentSid; + + @ApiModelProperty(value = "分组名称") + private String groupName; +} diff --git a/yxt-base-biz/src/main/resources/static/商品信息导入模板.xls b/yxt-base-biz/src/main/resources/static/商品信息导入模板.xls new file mode 100644 index 0000000000000000000000000000000000000000..e20332c16640ae02230a0a24f2b31a162b409da8 GIT binary patch literal 17920 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� z>HWw2#%_L^am>MCsMEv|dt1BS8-4Uszpqo@IIY=Z`MaKp+R<+YJ3i+ga@?5pr*Dgv zsyppw_6R+<`oYP*9yYP<&2G8s_@3jn(K`Lh<{PS=`;3`a`Yd(G=CE~%PCt9)pURqY zXtviT`;f(DvnQ;Jh*_J@>7za)(p>w*$2B^OYq}fvQ=RoF&)I3oj&D0w4ZmKJI#Yd> z{lYEd^n~*d6esS?A6IzyMahV9DwFkWx50Z`ezN}0*yx&H{zAAsfEXAwCk9b z-r`tn_<48Tofi&m$RE;H*UU-Fs+VE)whMW^H2S)Q{$}&IzTY(u-j>9lI(UTN_~Up` z$9DZ690?xt^AdZlx2d@~74aL~)*gtAct7ZLywCCo&(7*96VHt`T|Ls;rcy7bhyRJU z#|=3vZm5Tch1#ZlaG2d@T>Ce=t?Qx}o?LW#@x1Ir19QJ&OQZebTDE`TI{4=FEfHaR zwvSpl-gARC|3IfK+fzzUXBBF{*6LB4Y@Oj5JbKX7y|w#)Eeih-R%TS4ePq(JP|wT> zw>Q7p@aVVOk50Xfv)}w-z}}t#FOp*;A}sYkR<4*sJW9I7C2*$)FU9u`~Njd2n&mwxvV6 zJS*Gr+|G7WhZjrrFI7i7JvfzeX>-7=s1N(MIv4Too=DB@?osFKHtw;K-P=AUW|doy zcpVsZ1k6px)6@?=LGq88k%Q@A27>{dWflw?+z;PpH(bxwNPH;-v1yj%|Hrd=&EJ z-wg4FIXpQoX##b_6yHyZZCmBTqYOODEM<8Hr{__l#=p^)FRvc9@^F{!QJcuJzmIeyU#hyTG7uv&!j5e%_Z7 zt5doj&zOE8dwoee{?OEMGuKVMw|DrFpljm~{o4@gbaQA7)vX%W$W^A{68o(RVabe(y zC(&y*Iy@eDbiu~B%{Pp%?mh77CVk74{oJ4{am$oNiRQHhtG0ul5m18fv)H#-T3_<{ zpnxrADySGK~AFnjG+41djqK+*aad^p! z3oT-te{)LQY{>8YV$t}*lcNv(G0$g!LBH8|y2S2?oIY=C$5;9Zd3~(e>cgWwwCxP`|Nb zCdQ4KI6Ne6T-=0V_)M`i?^3_hj@kirJ-^O)+M##RE+2lo7t>4Um9Cw3;`}lTgA2EJ zm4tq&3#+h>tY}(^B@5HWOR;WdKulAcTOt0g) zDbW^}Q!ief^eMALlIo!OQ#*MT`nSm+R98B;#g+=~Q&o05mKL^kduVm1+xg-N#|oyj ztXPzoIAO74=uawk>D!$PpBsjZ)&8X1{hFiQ{4?8YY=m8Fa(^8=G-2o4lr9$q?>fDE z^4ap4%Ys~&daX3IE^13Zjjib))Q7{>gLiDqgQFx>kO5m`0yu`N$s~>jkli1}Z+Y-X zV@~jbgXxit3zZzEpxjVssK|!ug-tIEA?U8H$Oa#x>3|MeKx7XGMV2_!=zx|U@MzDr zlwD29p@;S~w}~?CWe!BzDRF~IJ~E3zm0^UlouaO(2WUwQ$<=}w1Gh7!Fj#Acpgzh} zBdftLQoLbwWm6p?7d{Hfm00b};}0hDSh59xtOI``@bW&IB*Bl_2g2tnY1CC;>Zk1^ zs1IA5;n$EOND6$$GLfYb2(ko{2r?(wIgI4sZxphj8)s3QFe;pZkQWDkm|qBczlE%l zffg!Y!{x$W`ylu`$>BpJ#O)=Qd?m}N&(!b-ldySjL-J$hN7N03ooXA>J@jOVW=L%s ze9mG+>Ic;g1O=2uC2&$j3R9=q4xkiHh6E;47t;ss8wxweXJ&gQQd(=~Udam`*tb8G zD2Nz5v{}EP#iE2dlR)HNQ%ingA2Gkf8-0VL4x^e0SmAas zkaA(=uZcU@V9AAV2ehbb9XR5*czp78)7y%^(LvtBDY*?Lx22BLDM=>iFrgj3Um|Te zKSRz*Y6Yhc=^2!E7Ikbd(thr3$-2gkaXQp`TeGg$z)J)*@Cr8K;SYU+d-lFa_^O zA!G)@0q35<5HT+iB9@m55oh=;h&abAfQa+V4v08s?EoW8^S}t(12O22RM}}?f)7DH z5Q+clRcV109K6mPnN59*jCMG;g~4OWKq4Uh;p^LYcsPlHhYt*RS5Oq>)gS%iR+d*5 z*&AsWEP?vlecI*^GGz%_F36Av^c^{|f(RiKxkA4@AZkPOfhbvL%*Vi-5di0J3}}yd z6EOjJ)8K&iSrD;K42R0ZA0EwOs7JLp>I?Ai`ySZ?P}wscK>uyPHqAxn{zKt=%l{7* zD}wnamydk{$50>W{rzDKBtvhAh29VYJ*OL-N5BJpEIeSxK@JA&JJ?ry5kHVh_emU2 zI9BmT3~q4j01xoa#2$|L)t)^iccJp=F=_$2-JuV5g6IO6Zt&+1O9FrB`K};!rH+1- d1=_iSjw@)ogPtSk_`%h1stf@7fB0?&{teTs_o4s* literal 0 HcmV?d00001