From ba3a85f2bf6dc706ba2f74e88e9d81197533f1b7 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期四, 24 十月 2024 18:30:12 +0800
Subject: [PATCH] 优化
---
server/service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java | 269 ++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 212 insertions(+), 57 deletions(-)
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
index 8050175..344e395 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
@@ -18,6 +18,8 @@
import com.doumee.dao.business.join.GoodsJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.model.dto.*;
+import com.doumee.dao.system.model.SystemDepartment;
+import com.doumee.service.CateParamSelectService;
import com.doumee.service.business.BaseDataService;
import com.doumee.service.business.GoodsService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -29,6 +31,8 @@
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -43,6 +47,7 @@
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.*;
+import java.util.stream.Collectors;
/**
* 鍟嗗搧淇℃伅琛⊿ervice瀹炵幇
@@ -64,6 +69,8 @@
@Autowired
private CategoryMapper categoryMapper;
@Autowired
+ private BaseCategoryMapper baseCategoryMapper;
+ @Autowired
private CateAttrMapper cateAttrMapper;
@Autowired
private CateParamMapper cateParamMapper;
@@ -79,10 +86,13 @@
@Autowired
private GoodsJoinMapper goodsJoinMapper;
+
+ @Lazy
@Autowired
- private CateParamSelectMapper cateParamSelectMapper;
+ private CateParamSelectService cateParamSelectService;
-
+ @Autowired
+ private RedisTemplate redisTemplate;
@Override
@@ -130,6 +140,8 @@
return goods.getId();
}
+
+ @Async
@Override
@Transactional( rollbackFor = {Exception.class, BusinessException.class})
public Integer createPlat(GoodCreatePlatRequest param){
@@ -153,6 +165,11 @@
if(category.getPlatCateId() == null){
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇峰墠寰�銆愮被鍒鐞嗐�戝厛鍏宠仈骞冲彴绫诲埆锛�");
}
+ BaseCategory baseCategory = baseCategoryMapper.selectById(category.getPlatCateId());
+ if(baseCategory == null){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇峰墠寰�銆愮被鍒鐞嗐�戝厛鍏宠仈骞冲彴绫诲埆锛�");
+ }
+
BaseGoods bp = new BaseGoods();
bp.setCategoryId(category.getPlatCateId());
bp.setIsdeleted(Constants.ZERO);
@@ -177,25 +194,34 @@
}
List<Multifile> multifileList = new ArrayList<>();
List<GoodsParam> goodsParamList = new ArrayList<>();
- for(BaseGoods model : goodsList){
- //閬嶅巻骞冲彴鍟嗗搧淇℃伅锛岃繘琛屽晢鍝佷俊鎭悓姝�
- Goods goods = initGoodsPlatParam(user,model,param);
- if(goods == null){
- continue;
- }
- goodsMapper.insert(goods);
- //寮�濮嬪鐞嗛檮浠�
- dealPlatMultifule(goods.getId(),user,model,multifileList);
- //寮�濮嬪鐞嗗弬鏁伴厤缃�
- dealPlatGoodsParam(model,goods,user,goodsParamList);
- }
- if(multifileList.size()>0){
- multifileMapper.insertBatch(multifileList);
- }
- if(goodsParamList.size()>0){
- goodsParamMapper.insertBatch(goodsParamList);
- }
+ try{
+ for(BaseGoods model : goodsList){
+ //閬嶅巻骞冲彴鍟嗗搧淇℃伅锛岃繘琛屽晢鍝佷俊鎭悓姝�
+ //鍒嗙被鍔犱环绯绘暟
+ model.setCateRatePrice(baseCategory.getPriceRate());
+ Goods goods = initGoodsPlatParam(user,model,param);
+ if(goods == null){
+ continue;
+ }
+ goodsMapper.insert(goods);
+ //寮�濮嬪鐞嗛檮浠�
+ dealPlatMultifule(goods.getId(),user,model,multifileList);
+ //寮�濮嬪鐞嗗弬鏁伴厤缃�
+ dealPlatGoodsParam(model,goods,user,goodsParamList);
+ }
+ if(multifileList.size()>0){
+ multifileMapper.insertBatch(multifileList);
+ }
+ if(goodsParamList.size()>0){
+ goodsParamMapper.insertBatch(goodsParamList);
+ }
+ cateParamSelectService.dealCateParamSelect();
+ }catch (Exception e){
+ e.printStackTrace();
+ }finally {
+ redisTemplate.opsForValue().set(user.getCompanyId()+Constants.OPEN_SYNC_SWITCH,false);
+ }
return 1;
}
@@ -268,7 +294,9 @@
private void dealPlatMultifule(Integer id, LoginUserInfo user, BaseGoods model,List<Multifile> fileList ) {
Multifile f = new Multifile();
f.setObjId(model.getId());
+ f.setObjType(Constants.ONE);
f.setIsdeleted(Constants.ZERO);
+ f.setObjType(Constants.ONE);
List<Multifile> multifileList =multifileMapper.selectList(new QueryWrapper<>(f));
if(!Objects.isNull(multifileList)&&multifileList.size()>Constants.ZERO){
for (int i = 0; i < multifileList.size(); i++) {
@@ -297,13 +325,14 @@
return p.getPrice().setScale(0,BigDecimal.ROUND_CEILING);
}
}
+ throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"鏁版嵁寮傚父璇峰埛鏂伴噸璇�");
}
//濡傛灉娌℃湁閰嶇疆鍏ユ墜浠凤紝瀹夎鍔犱环绯绘暟鏉ヨ绠�
-// if(model.getCateRatePrice()==null){
-// model.setCateRatePrice(systemDictDataBiz.getGoodsPriceRate());
-// }
+ if(model.getCateRatePrice()==null){
+ model.setCateRatePrice(systemDictDataBiz.getGoodsPriceRate());
+ }
//杩斿洖 .multiply(model.getCateRatePrice())
- return (Constants.formatBigdecimal(model.getPrice()).multiply(param.getRate())).setScale(0,BigDecimal.ROUND_CEILING);
+ return (Constants.formatBigdecimal(model.getPrice()).multiply(model.getCateRatePrice()).multiply(param.getRate())).setScale(0,BigDecimal.ROUND_CEILING);
}
@@ -332,6 +361,9 @@
if(!Objects.isNull(multifileList)&&multifileList.size()>Constants.ZERO){
for (int i = 0; i < multifileList.size(); i++) {
Multifile multifile = multifileList.get(i);
+ if(StringUtils.isBlank(multifile.getFileurl())){
+ continue;
+ }
multifile.setCreator(user.getId());
multifile.setCreateDate(new Date());
multifile.setIsdeleted(Constants.ZERO);
@@ -380,7 +412,10 @@
if (CollectionUtils.isEmpty(ids)) {
return;
}
- goodsMapper.deleteBatchIds(ids);
+ for(Integer id : ids){
+ deleteById(id);
+ }
+// goodsMapper.deleteBatchIds(ids);
}
@Override
@@ -589,7 +624,7 @@
if(!Objects.isNull(category)){
goods.setCategoryName(category.getName());
}
- goods.setMultifileList(multifileMapper.selectList(new QueryWrapper<Multifile>().eq("OBJ_ID",id)));
+ goods.setMultifileList(multifileMapper.selectList(new QueryWrapper<Multifile>().eq("OBJ_TYPE",Constants.ZERO).eq("OBJ_ID",id)));
return goods;
}
@@ -622,13 +657,9 @@
Goods::getPrice,goods.getSPrice(),goods.getEPrice());
queryWrapper.orderByDesc(Goods::getId);
List<Goods> goodsList = goodsJoinMapper.selectJoinList(Goods.class,queryWrapper);
- String prefixUrl = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
- + systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_IMG).getCode();
- goodsList.forEach(i->{
- i.setPrefixUrl(prefixUrl);
- i.setMultifileList(multifileMapper.selectList(new QueryWrapper<Multifile>().eq("OBJ_ID",i.getId()).orderByAsc(" SORTNUM ")));
- i.setGoodsParamList(goodsParamMapper.selectList(new QueryWrapper<GoodsParam>().eq("GOODS_ID",i.getId()).orderByAsc(" SORTNUM ")));
- });
+ if(!Objects.isNull(goodsList)&&goodsList.size()>Constants.ZERO){
+ this.dealGoodsMsg(goodsList);
+ }
return goodsList;
}
@@ -679,6 +710,9 @@
+ systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_IMG).getCode();
goodsIPage.getRecords().forEach(i->{
i.setPrefixUrl(prefixUrl);
+ if(i.getType().equals(Constants.ONE)){
+ i.setBasePrice(Constants.formatBigdecimal(i.getBasePrice()).multiply(Constants.formatBigdecimal(i.getBasePriceRate())).setScale(0,BigDecimal.ROUND_CEILING));
+ }
});
return PageData.from(goodsIPage);
}
@@ -759,9 +793,9 @@
if(brand == null){
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗��"+(num)+"銆戣鍟嗗搧鍝佺墝鏃犳晥锛岃妫�鏌ヨ緭鍏ワ紒");
}
- if(goodsMapper.selectCount(new QueryWrapper<Goods>().eq("ISDELETED",Constants.ZERO).eq("name",m.getName()))>0){
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"銆�"+m.getName()+"銆戝凡瀛樺湪");
- };
+ if(goodsMapper.selectCount(new QueryWrapper<Goods>().eq("COMPANY_ID",user.getCompanyId()).eq("ISDELETED",Constants.ZERO).eq("name",m.getName()))>0){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"绗��"+(num)+"銆戣銆�"+m.getName()+"銆戝凡瀛樺湪");
+ }
Goods newModel = new Goods();
newModel.setRemark(m.getId());
newModel.setCategoryId(cate.getId());
@@ -873,6 +907,106 @@
}
}
if(mulFiles !=null && mulFiles.size()>0){
+ for(int i=0;i<mulFiles.size();i++){
+ String s = mulFiles.get(i);
+ Multifile f = new Multifile();
+ f.setObjType(Constants.ZERO);
+ f.setName(s);
+ f.setType(Constants.ZERO);
+ f.setObjId(newModel.getId());
+ f.setCreateDate(newModel.getCreateDate());
+ f.setCreator(newModel.getCreator());
+ f.setIsdeleted(Constants.ZERO);
+ f.setSortnum(i);
+ f.setCompanyId(user.getCompanyId());
+ f.setFileurl(s);
+ multifileMapper.insert(f);
+ }
+ }
+ num++;
+ }
+ return num;
+
+ }
+ @Transactional(rollbackFor = {Exception.class, BusinessException.class})
+ @Override
+ public Integer importBatchImg(MultipartFile file){
+ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ ExcelImporter ie = null;
+ List<GoodsImport> dataList =null;
+ try {
+ ie = new ExcelImporter(file,0,0);
+ dataList = ie.getDataList(GoodsImport.class,null);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ if(dataList == null || dataList.size() ==0){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏁版嵁涓虹┖锛�");
+ }
+
+ int num =1;
+ for(GoodsImport m: dataList){
+ if( StringUtils.isBlank(m.getId()) ){
+ continue;
+ }
+ Goods g = new Goods();
+ g.setIsdeleted(Constants.ZERO);
+ g.setRemark(m.getId());
+ g.setCompanyId(user.getCompanyId());
+ //鍝佺被鏁版嵁
+ g = goodsMapper.selectOne(new QueryWrapper<>(g).last(" limit 1"));
+ if(g == null){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗��"+(num)+"銆戣鍟嗗搧涓嶅瓨鍦紝璇锋鏌ヨ緭鍏ワ紒");
+ }
+
+ Goods newModel = new Goods();
+ newModel.setId(g.getId());
+ newModel.setEditor(user.getId());
+ newModel.setEditDate(new Date());
+
+ String[] params = StringUtils.defaultString(m.getParamStr(),"").split("\n");
+ List<String> mulFiles = null;
+ String proDir =systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PROJECTS).getCode();
+
+ String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.GOODS_IMG_DIR).getCode()
+ + proDir + File.separator + user.getCompanyId();
+ if(StringUtils.isNotBlank(path)){
+ OssModel ossModel = baseDataService.initOssModel();
+ File dir =new File(path+File.separator+newModel.getRemark()+File.separator);
+ if(dir!=null && dir.isDirectory()){
+ File[] files = dir.listFiles();
+ if(files!=null && files.length>0){
+ for(File f:files){
+ if(StringUtils.isBlank(newModel.getImgurl()) && isImgFile(f)){
+ //鍙栫涓�寮犲浘鐗囦綔涓哄垪琛ㄥ浘
+ newModel.setImgurl(baseDataService.getOssImgurl(ossModel,ossModel.getGoodsFolder(),f));
+ }
+ if((mulFiles ==null || mulFiles.size() == 0) && f.isDirectory()){
+ //濡傛灉鏄枃浠跺す
+ File[] fs = f.listFiles();
+ if(fs!=null && fs.length>0){
+ for(File mf : fs){
+ if(isImgFile(mf)){
+ if(mulFiles==null){
+ mulFiles = new ArrayList<>();
+ }
+ mulFiles.add(baseDataService.getOssImgurl(ossModel,ossModel.getGoodsFolder(),mf));
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ //鏌ヨ鍟嗗搧淇℃伅
+ goodsMapper.updateById(newModel);
+ if(mulFiles !=null && mulFiles.size()>0){
+ multifileMapper.update(null,new UpdateWrapper<Multifile>().lambda()
+ .set(Multifile::getIsdeleted,Constants.ONE)
+ .eq(Multifile::getIsdeleted,Constants.ZERO)
+ .eq(Multifile::getObjId,g.getId())
+ .eq(Multifile::getType,Constants.ZERO));
for(int i=0;i<mulFiles.size();i++){
String s = mulFiles.get(i);
Multifile f = new Multifile();
@@ -1069,20 +1203,36 @@
.apply(!Objects.isNull(pageWrap.getModel()) && !Objects.isNull(pageWrap.getModel().getEPrice()), " t.PRICE <= "+pageWrap.getModel().getEPrice()+" ");
queryWrapper.orderByDesc(Goods::getId);
IPage<Goods> goodsIPage = goodsJoinMapper.selectJoinPage(page, Goods.class, queryWrapper);
- String prefixUrl = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
- + systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_IMG).getCode();
- goodsIPage.getRecords().forEach(i->{
- i.setCategoryImgurl(systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
- + systemDictDataBiz.queryByCode(Constants.OSS, Constants.CATEGORY_IMG).getCode() + i.getCategoryImgurl());
- i.setPrefixUrl(prefixUrl);
- i.setMultifileList(multifileMapper.selectList(new QueryWrapper<Multifile>().eq("OBJ_ID",i.getId()).orderByAsc(" SORTNUM ")));
- i.setGoodsParamList(goodsParamMapper.selectList(new QueryWrapper<GoodsParam>()
- .eq("GOODS_ID",i.getId())
- .orderByAsc(" SORTNUM ")));
- });
+ if(!Objects.isNull(goodsIPage.getRecords())&&goodsIPage.getRecords().size()>Constants.ZERO){
+ this.dealGoodsMsg(goodsIPage.getRecords());
+ }
return PageData.from(goodsIPage);
}
+
+
+ public void dealGoodsMsg(List<Goods> goodsList){
+ String prefixUrl = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ + systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_IMG).getCode();
+ String prefixUrlCategory = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
+ + systemDictDataBiz.queryByCode(Constants.OSS, Constants.CATEGORY_IMG).getCode();
+ List<Integer> integerList = goodsList.stream().map(Goods::getId).collect(Collectors.toList());
+
+ List<Multifile> mFileList = multifileMapper.selectList(new QueryWrapper<Multifile>()
+ .lambda().in(Multifile::getObjId,integerList)
+ .eq(Multifile::getType,Constants.ZERO)
+ .eq(Multifile::getIsdeleted,Constants.ZERO)
+ .eq(Multifile::getObjType,Constants.ZERO));
+ List<GoodsParam> goodsParamList = goodsParamMapper.selectList(new QueryWrapper<GoodsParam>()
+ .in("GOODS_ID",integerList)
+ .orderByAsc(" SORTNUM "));
+ goodsList.forEach(i->{
+ i.setCategoryImgurl(prefixUrlCategory + i.getCategoryImgurl());
+ i.setPrefixUrl(prefixUrl);
+ i.setMultifileList(mFileList.stream().filter(s -> s.getObjId().equals(i.getId())).collect(Collectors.toList()));
+ i.setGoodsParamList(goodsParamList.stream().filter(s -> s.getGoodsId().equals(i.getId())).collect(Collectors.toList()));
+ });
+ }
@Override
public List<Goods> findListForH5(GoodsRequest goodsRequest) {
@@ -1115,18 +1265,23 @@
.apply(!Objects.isNull(goodsRequest) && !Objects.isNull(goodsRequest.getEPrice()), " t.PRICE <= "+goodsRequest.getEPrice()+" ");
queryWrapper.orderByDesc(Goods::getId);
List<Goods> goodsList = goodsJoinMapper.selectJoinList(Goods.class,queryWrapper);
- String prefixUrl = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
- + systemDictDataBiz.queryByCode(Constants.OSS, Constants.GOODS_IMG).getCode();
- goodsList.forEach(i->{
- i.setPrefixUrl(prefixUrl);
- i.setMultifileList(multifileMapper.selectList(new QueryWrapper<Multifile>().eq("OBJ_ID",i.getId()).orderByAsc(" SORTNUM ")));
- i.setGoodsParamList(goodsParamMapper.selectList(
- new QueryWrapper<GoodsParam>().eq("GOODS_ID",i.getId())
- .apply(" name in ( select cp.NAME from cate_param cp where cp.CATEGORY_ID = "+i.getCategoryId()+" and cp.ISSHOW = 1 and cp.ISDELETED = 0 and cp.STATUS = 0 ) ")
- .orderByAsc(" SORTNUM ")));
- });
+ if(!Objects.isNull(goodsList)&&goodsList.size()>Constants.ZERO){
+ this.dealGoodsMsg(goodsList);
+ }
return goodsList;
}
+
+
+ @Override
+ @Transactional
+ public void openSyncSwitch() {
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ Boolean openSyncSwitch = (Boolean)redisTemplate.opsForValue().get(loginUserInfo.getCompanyId()+Constants.OPEN_SYNC_SWITCH);
+ if(openSyncSwitch!=null && openSyncSwitch ){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏁版嵁鍚屾涓紝璇风◢鍚庡埛鏂伴噸璇�");
+ }
+ redisTemplate.opsForValue().set(loginUserInfo.getCompanyId()+Constants.OPEN_SYNC_SWITCH,true);
+ }
}
--
Gitblit v1.9.3