From 80d88f15a2222ec2dbe33f5d1d2b2296a890f41b Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期二, 03 三月 2026 16:22:04 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java | 249 +++++++++++++++++++++++++++++++++----------------
1 files changed, 167 insertions(+), 82 deletions(-)
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
index 43968bc..aa3cbef 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsServiceImpl.java
@@ -60,6 +60,9 @@
@Autowired
private ShopGoodsRelationMapper shopGoodsRelationMapper;
+ @Autowired
+ private SearchHistoryMapper searchHistoryMapper;
+
@Autowired
@@ -129,7 +132,7 @@
dealBatchMultiFiles(goods, goods.getFileList(), user,false);
return goods.getId();
}
- private void dealDefaultGoodsSku(Goods goods) {
+ private Integer dealDefaultGoodsSku(Goods goods) {
Date date = goods.getEditDate();
Integer userId = goods.getEditor();
Sku sku = new Sku();
@@ -183,6 +186,8 @@
goodsSkuAttr.setGoodsSkuId(goodsSku.getId());
goodsSkuAttr.setSkuAttrId(skuAttr.getId());
goodsSkuAttrMapper.insert(goodsSkuAttr);
+
+ return goodsSku.getId();
}
public void dealBatchMultiFiles(Goods goods, List<Multifile> fileList, LoginUserInfo user,boolean update) {
@@ -349,7 +354,23 @@
.set(Goods::getEditor,user.getId())
.set(Goods::getStatus,Constants.ONE )
.in(Goods::getId,idList));
+
+ //鎵归噺涓嬫灦 sku鏁版嵁
+ goodsSkuMapper.update(null,new UpdateWrapper<GoodsSku>().lambda()
+ .set(GoodsSku::getEditDate,new Date() )
+ .set(GoodsSku::getEditor,user.getId())
+ .set(GoodsSku::getStatus,Constants.ONE )
+ .eq(GoodsSku::getIsdeleted,Constants.ZERO)
+ .in(GoodsSku::getGoodsId,idList));
return;
+ }else{
+ //鎵归噺涓婃灦 sku鏁版嵁
+ goodsSkuMapper.update(null,new UpdateWrapper<GoodsSku>().lambda()
+ .set(GoodsSku::getEditDate,new Date() )
+ .set(GoodsSku::getEditor,user.getId())
+ .set(GoodsSku::getStatus,Constants.ZERO )
+ .eq(GoodsSku::getIsdeleted,Constants.ZERO)
+ .in(GoodsSku::getGoodsId,idList));
}
long shopNum = shopMapper.selectCount(new QueryWrapper<Shop>().lambda()
.eq(Shop::getIsdeleted,Constants.ZERO)
@@ -372,6 +393,7 @@
if(goodsSkuList==null || goodsSkuList.size() == 0){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍟嗗搧灏氭湭璁剧疆闆跺敭浠凤紝璇峰厛璁剧疆浠锋牸锛� ");
}
+ List<Integer> idList2 = new ArrayList<>();
for(Goods param: list){
Goods goods = getGoodsFromListById(param.getId(),goodsList,goodsSkuList);
if(goods ==null ){
@@ -379,25 +401,47 @@
}
//濡傛灉鏄笂鏋�
goods.setGoodsSkuList(goodsSkuList);
+ boolean s =true;
if(goods.getSkuPrice() == null || goods.getSkuPrice().compareTo(new BigDecimal(0)) <=0){
//榛樿sku淇℃伅
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), goods.getName()+":鍟嗗搧鍟嗗搧灏氭湭璁剧疆闆跺敭浠凤紝鏃犳硶涓婃灦");
+ s =false;
+ if(idList.size()==1) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), goods.getName()+":鍟嗗搧鍟嗗搧灏氭湭璁剧疆闆跺敭浠凤紝鏃犳硶涓婃灦");
+ }
}
- if(Constants.formatLongNum(goods.getPricedShopNum()) <= shopNum){
+ if(Constants.formatLongNum(goods.getPricedShopNum()) < shopNum){
//榛樿sku淇℃伅
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), goods.getName()+":鏈夋湭璁剧疆渚涜揣浠风殑缁忛攢鍟嗭紝鏃犳硶涓婃灦");
+ s =false;
+ if(idList.size()==1){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), goods.getName()+":鏈夋湭璁剧疆渚涜揣浠风殑缁忛攢鍟嗭紝鏃犳硶涓婃灦");
+ }
+
+ }
+ if(s){
+ idList2.add(param.getId());
}
}
- goodsMapper.update(null,new UpdateWrapper<Goods>().lambda()
- .set(Goods::getEditDate,new Date() )
- .set(Goods::getEditor,user.getId())
- .set(Goods::getStatus,Constants.ZERO )
- .in(Goods::getId,idList));
+ int successNum = 0;
+ if(idList2.size()>0){
+ successNum = goodsMapper.update(null,new UpdateWrapper<Goods>().lambda()
+ .set(Goods::getEditDate,new Date() )
+ .set(Goods::getEditor,user.getId())
+ .set(Goods::getStatus,Constants.ZERO )
+ .in(Goods::getId,idList2));
+ }
+
+ if(successNum != idList.size()){
+ if( idList.size()>1){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鎴愬姛涓婃灦鍟嗗搧鏁帮細銆�"+successNum+"銆戯紝涓婃灦澶辫触锛氥��"+(idList.size()-successNum)+"銆戜釜鍟嗗搧,璇风‘淇濆緟涓婃灦鍟嗗搧鐨勫潎閿�鍞环鍜屼緵璐т环宸茶缃�");
+ }else {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode()," 涓婃灦澶辫触");
+ }
+ }
}
private Goods getGoodsFromListById(Integer id, List<Goods> goodsList, List<GoodsSku> skuList) {
for(Goods model: goodsList){
- if(Constants.equalsObject(model.getIdList(),id)){
+ if(Constants.equalsInteger(model.getId(),id)){
for(GoodsSku sku :skuList){
if(Constants.equalsInteger(sku.getGoodsId(),id)){
model.setSkuPrice(sku.getPrice());
@@ -425,6 +469,16 @@
goods.setLabels( StringUtils.removeEnd( goods.getLabels().replace("锛�",","),","));
}
goodsMapper.updateById(goods);
+ boolean needUpdatesku = true;
+ if(goods.getSkuPrice()!=null){
+ GoodsSku queryGoodsSku=new GoodsSku();
+ queryGoodsSku.setGoodsId(goods.getId());
+ queryGoodsSku.setIsdeleted(Constants.ZERO);
+ GoodsSku goodsSku=goodsSkuMapper.selectOne(new QueryWrapper<>(queryGoodsSku).last("limit 1"));
+ if(goodsSku !=null && Constants.formatBigdecimal(goodsSku.getPrice()).compareTo(goods.getSkuPrice()) ==0){
+ needUpdatesku = false;//浠锋牸鏈彉鍖栨棤闇�閲嶆柊鐢熸垚渚涜揣浠�
+ }
+ }
//娓呯┖鍘熸湁鐨剆ku鏁版嵁
skuMapper.update(null,new UpdateWrapper<Sku>().lambda()
.set(Sku::getIsdeleted,Constants.ONE)
@@ -434,7 +488,21 @@
.set(GoodsSku::getIsdeleted,Constants.ONE)
.eq(GoodsSku::getIsdeleted,Constants.ZERO)
.eq(GoodsSku::getGoodsId,goods.getId()));
- dealDefaultGoodsSku(goods);//鏂板缓sku淇℃伅
+ Integer skuId = dealDefaultGoodsSku(goods);//鏂板缓sku淇℃伅
+ if(needUpdatesku){ //鍏堝垹闄ゅ師鏉ョ殑鏁版嵁
+ shopGoodsRelationMapper.delete(new QueryWrapper<ShopGoodsRelation>().lambda()
+ .eq(ShopGoodsRelation::getGoodsId,goods.getId())
+ );
+ }else{
+ //鍚﹀垯鏇存柊鎵�鏈変緵璐т环鍏宠仈鍏崇郴涓殑skuID
+ shopGoodsRelationMapper.update(null,new UpdateWrapper<ShopGoodsRelation>().lambda()
+ .eq(ShopGoodsRelation::getGoodsId,goods.getId())
+ .set(ShopGoodsRelation::getGoodsSkuId,skuId)
+ );
+ }
+
+
+
dealBatchMultiFiles(goods, goods.getFileList(), user,true);
}
@@ -606,6 +674,7 @@
}
Multifile find = new Multifile();
find.setObjId(id);
+ find.setObjType(Constants.MultiFile.PLATFORM_GOOD_ROTATION.getKey());
find.setIsdeleted(Constants.ZERO);
List<Multifile> fileList= multifileMapper.selectList(new QueryWrapper<>(find));
goods.setFileList(fileList);
@@ -772,8 +841,9 @@
public List<Goods> findList(Goods goods) {
QueryWrapper<Goods> wrapper = new QueryWrapper<>(goods);
wrapper.lambda()
- .in(goods.getIdList() != null && goods.getIdList().size()>0, Goods::getId, goods.getIdList())
- .eq( Goods::getIsdeleted, Constants.ZERO);
+ .in(goods.getIdList() != null && goods.getIdList().size()>0, Goods::getId, goods.getIdList())
+ .like(goods.getZhuanquId()!=null,Goods::getZhuanquIds,"["+goods.getZhuanquId()+"]")
+ .eq( Goods::getIsdeleted, Constants.ZERO);
return goodsMapper.selectList(wrapper);
}
@@ -808,6 +878,7 @@
" INNER JOIN goods g on g.id=gs.GOODS_ID " +
" where gs.STOCK<=0 and gs.ISDELETED=0 and g.id=t.id ");
}
+
queryWrapper.eq(!Constants.equalsInteger(pageWrap.getModel().getTabStatus(), 3), Goods::getIsdeleted, Constants.ZERO);
queryWrapper.eq(Constants.equalsInteger(pageWrap.getModel().getTabStatus(), 3), Goods::getIsdeleted, Constants.ONE);
@@ -897,43 +968,79 @@
* @return
*/
@Override
- public IPage<GoodsInfoResponse> getGoodsPage(PageWrap<GoodsRequest> pageWrap) {
+ public IPage<Goods> getGoodsPage(PageWrap<GoodsRequest> pageWrap) {
GoodsRequest model = pageWrap.getModel();
-
- QueryWrapper<GoodsRequest> wrapper = new QueryWrapper<GoodsRequest>()
- .eq("g.ISDELETED",Constants.ZERO)
+ MPJLambdaWrapper<Goods> wrapper = new MPJLambdaWrapper<Goods>()
+ .selectAll(Goods.class)
+ .select(" ifnull(( select min(gs.PRICE) from goods_sku gs where gs.GOODS_ID = t.id ),0) ",Goods::getMinPrice)
+ .leftJoin(SystemUser.class, SystemUser::getId, Goods::getCreator)
+ .eq(Goods::getIsdeleted,Constants.ZERO)
.eq(!Objects.isNull(model) && Objects.nonNull(model.getCategoryId()),
- "g.CATEGORY_ID", model.getCategoryId())
+ Goods::getCategoryId, model.getCategoryId())
//閫傜敤鍝佺墝 閫傜敤绯诲垪
.apply(!Objects.isNull(model) && Objects.nonNull(model.getApplicableBrandId()),
- " find_in_set( '["+model.getApplicableBrandId()+"]' , g.BRAND_IDS ) ")
+ " find_in_set( '["+model.getApplicableBrandId()+"]' , t.BRAND_IDS ) ")
.apply(!Objects.isNull(model) && Objects.nonNull(model.getSeriesBrandId()),
- " find_in_set( '["+model.getSeriesBrandId()+"]' , g.SERIAL_IDS ) ")
- .eq("g.STATUS", Constants.ZERO)
- .like(StringUtils.isNotBlank(model.getGoodsName()),"g.NAME",model.getGoodsName());
+ " find_in_set( '["+model.getSeriesBrandId()+"]' , t.SERIAL_IDS ) ")
+ .apply(!Objects.isNull(model) && Objects.nonNull(model.getQualityId()),
+ " find_in_set( '["+model.getQualityId()+"]' , t.ZHUANQU_IDS ) ")
+ .eq(Goods::getStatus, Constants.ZERO)
+ .like(StringUtils.isNotBlank(model.getGoodsName()),Goods::getName,model.getGoodsName());
+ if(Objects.nonNull(model.getShopId())){
+ wrapper.select(" ifnull( ( select sgr.PRICE from shop_goods_relation sgr where sgr.GOODS_ID = t.ID and sgr.ISDELETED = 0 and sgr.`STATUS` = 0 and sgr.SHOP_ID = "+model.getShopId()+" ) ,0) ",Goods::getExFactoryPrice);
+ wrapper.select(" ifnull(( select sum(gd.GOODS_NUM) from goodsorder_detail gd inner join goodsorder go on gd.ORDER_ID = go.id where gd.GOODS_ID = t.`id` and go.DISTRIBUTION_SHOP_ID = "+model.getShopId()+" ),0) ",Goods::getRealSaleNum);
- if(Objects.nonNull(model.getSortInfo())){
- //鎺掑簭鏂瑰紡锛�0=缁煎悎鎺掑簭锛�1=閿�閲忕敱浣庡埌楂� 锛�2=浠锋牸鐢变綆鍒伴珮锛�3=閿�閲忕敱楂樺埌浣庯紱4=浠锋牸鐢遍珮鍒颁綆
- if(Constants.equalsInteger(model.getSortInfo(),Constants.ZERO)){
- wrapper.orderByDesc("g.CREATE_DATE");
- }else if(Constants.equalsInteger(model.getSortInfo(),Constants.ONE)){
- wrapper.orderByAsc("realSaleNum");
- }else if(Constants.equalsInteger(model.getSortInfo(),Constants.TWO)){
- wrapper.orderByAsc("g.price");
- }else if(Constants.equalsInteger(model.getSortInfo(),Constants.THREE)){
- wrapper.orderByDesc("realSaleNum");
- }else if(Constants.equalsInteger(model.getSortInfo(),Constants.FOUR)){
- wrapper.orderByDesc("g.price");
- }
- }
- IPage<GoodsInfoResponse> page =
- Objects.isNull(model.getShopId())?
- goodsMapper.goodsPage(pageWrap.toPage(),wrapper)
- :
- goodsMapper.goodsPageForShop(pageWrap.toPage(),wrapper,model.getShopId()) ;
+ }else{
+ wrapper.select(" (( select ifnull(sum(GOODS_NUM),0) from goodsorder_detail gd where gd.GOODS_ID = t.id )) ",Goods::getRealSaleNum);
+ }
+
+ if(Objects.nonNull(model.getSortInfo())){
+ //鎺掑簭鏂瑰紡锛�0=缁煎悎鎺掑簭锛�1=閿�閲忕敱浣庡埌楂� 锛�2=浠锋牸鐢变綆鍒伴珮锛�3=閿�閲忕敱楂樺埌浣庯紱4=浠锋牸鐢遍珮鍒颁綆
+ if(Constants.equalsInteger(model.getSortInfo(),Constants.ZERO)){
+ wrapper.orderByDesc("t.CREATE_DATE");
+ }else if(Constants.equalsInteger(model.getSortInfo(),Constants.ONE)){
+ wrapper.orderByAsc("realSaleNum");
+ }else if(Constants.equalsInteger(model.getSortInfo(),Constants.TWO)){
+ wrapper.orderByAsc("t.price");
+ }else if(Constants.equalsInteger(model.getSortInfo(),Constants.THREE)){
+ wrapper.orderByDesc("realSaleNum");
+ }else if(Constants.equalsInteger(model.getSortInfo(),Constants.FOUR)){
+ wrapper.orderByDesc("t.price");
+ }
+ }
+ IPage<Goods> page =
+ goodsMapper.selectJoinPage(pageWrap.toPage(), Goods.class, wrapper);
if (!CollectionUtils.isEmpty(page.getRecords())){
String preFixPath = systemDictDataBiz.getPreFixPath(Constants.RESOURCE_PATH, Constants.GOODS_FILE);
- page.getRecords().forEach(s->s.setImgurl(preFixPath+s.getImgurl()));
+ for (Goods goodsInfoResponse:page.getRecords()) {
+ goodsInfoResponse.setImgurl(StringUtils.isNotBlank(goodsInfoResponse.getImgurl())?(preFixPath+goodsInfoResponse.getImgurl()):null);
+ if(Objects.isNull(model.getShopId())){
+ //sku鍩虹淇℃伅
+ this.getSkuInfo(goodsInfoResponse);
+ }
+ if(StringUtils.isNotBlank(goodsInfoResponse.getBrandIds())){
+ List<Labels> allBrands = labelsMapper.selectList(new QueryWrapper<Labels>().lambda()
+ .in(Labels::getId,getNumIdByIdsString(goodsInfoResponse.getBrandIds()))
+ .eq(Labels::getType,Constants.LabelsType.APPLICABLE_BRAND.getKey())
+ .eq(Labels::getIsdeleted,Constants.ZERO)
+ );
+ if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(allBrands)){
+ goodsInfoResponse.setBrandNames(String.join("/",allBrands.stream().map(i->i.getName()).collect(Collectors.toList())));
+ }
+ }
+ }
+ }
+ if(StringUtils.isNotBlank(model.getGoodsName())&&Objects.nonNull(model.getMemberId())){
+ searchHistoryMapper.delete(new QueryWrapper<SearchHistory>().lambda()
+ .eq(SearchHistory::getMemberId,model.getMemberId())
+ .eq(SearchHistory::getContent,model.getGoodsName())
+ );
+ SearchHistory searchHistory = new SearchHistory();
+ searchHistory.setIsdeleted(Constants.ZERO);
+ searchHistory.setContent(model.getGoodsName());
+ searchHistory.setMemberId(model.getMemberId());
+ searchHistory.setType(Constants.ZERO);
+ searchHistoryMapper.insert(searchHistory);
}
return page;
}
@@ -944,50 +1051,18 @@
* @param goodsResponse
* @return
*/
- public void getSkuInfo(GoodsInfoResponse goodsResponse) {
+ public void getSkuInfo(Goods goodsResponse) {
List<GoodsSkuResponse> goodsSkuResponseList = goodsSkuMapper.getSkuResponseList(goodsResponse.getId());
-
- String fullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
- systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode();
Integer sumStock = Constants.ZERO;
for (GoodsSkuResponse goodsSkuResponse:goodsSkuResponseList) {
- if(StringUtils.isBlank(goodsSkuResponse.getImgurl())){
- goodsSkuResponse.setImgurl(fullUrl + goodsSkuResponse.getGoodsImgUrl());
- }else{
- goodsSkuResponse.setImgurl(fullUrl + goodsSkuResponse.getImgurl());
- }
- //澶勭悊鏁版嵁涓嬫爣
- String goodsSkuName = goodsSkuResponse.getName();
- List<String> strList = Arrays.asList(goodsSkuName.split(";"));
- StringBuffer indexData = new StringBuffer();
- for (int i = 0; i < strList.size(); i++) {
- //鏌ヨsku淇℃伅
- Sku sku = skuMapper.selectOne(new QueryWrapper<Sku>()
- .eq("GOODS_ID",goodsResponse.getId())
- .eq("SORTNUM",i+1)
- .last(" limit 1 ")
- );
- if(Objects.isNull(sku)){
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"SKU淇℃伅寮傚父,璇峰埛鏂版煡鐪�");
- }
- //鏌ヨSKU_ATTR
- SkuAttr skuAttr = skuAttrMapper.selectOne(new QueryWrapper<SkuAttr>()
- .eq("SKU_ID",sku.getId())
- .eq("NAME",strList.get(i))
- .last(" limit 1 ")
- );
- if(Objects.isNull(skuAttr)){
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"SKU淇℃伅寮傚父,璇峰埛鏂版煡鐪�");
- }
- indexData.append("," + ( skuAttr.getSortnum()-1));
- }
- goodsSkuResponse.setIndexData(indexData.toString().substring(1));
+ goodsSkuResponse.setStock(Objects.isNull(goodsSkuResponse.getStock())?Constants.ZERO:goodsSkuResponse.getStock());
sumStock = sumStock + goodsSkuResponse.getStock();
}
//鐪熷疄閿�閲� = realSaleNum - saleNum;
//鐪熷疄搴撳瓨= sumStock - (realSaleNum - saleNum)
- goodsResponse.setStock(sumStock - goodsResponse.getRealSaleNum() + goodsResponse.getSaleNum());
+ goodsResponse.setStock(sumStock);
+ goodsResponse.setRealSaleNum(goodsResponse.getRealSaleNum()+sumStock);
goodsResponse.setGoodsSkuResponseList(goodsSkuResponseList);
//Sku鍩虹淇℃伅
List<SkuResponse> skuResponseList = skuMapper.getSkuResponseList(goodsResponse.getId());
@@ -1001,12 +1076,23 @@
goodsResponse.setSkuResponsesList(skuResponseList);
}
-
@Override
- public GoodsInfoResponse getGoodsInfo(Integer goodsId,Integer memberId) {
+ public Goods getGoodsInfo(Integer goodsId,Integer memberId) {
String fullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode();
- GoodsInfoResponse goodsResponse = goodsMapper.getGoodsInfo(goodsId);
+// GoodsInfoResponse goodsResponse = goodsMapper.getGoodsInfo(goodsId);
+ Goods goodsResponse = goodsMapper.selectOne(
+ new MPJLambdaWrapper<Goods>()
+ .selectAll(Goods.class)
+ .select(" (( select ifnull(sum(GOODS_NUM),0) from goodsorder_detail gd where gd.GOODS_ID = t.id )) ",Goods::getRealSaleNum)
+ .select(" ifnull(( select min(gs.PRICE) from goods_sku gs where gs.GOODS_ID = t.id ),0) ",Goods::getMinPrice)
+ .select(" ifnull(( select min(gs.SHOW_PRICE) from goods_sku gs where gs.GOODS_ID = t.id ),0) ",Goods::getLinePrice)
+ .leftJoin(SystemUser.class, SystemUser::getId, Goods::getCreator)
+// .eq(Goods::getIsdeleted,Constants.ZERO)
+// .eq(Goods::getStatus, Constants.ZERO)
+ .eq(Goods::getId,goodsId)
+ .last("limit 1")
+ );
if(Objects.isNull(goodsResponse)){
throw new BusinessException(ResponseStatus.DATA_EMPTY);
}
@@ -1033,7 +1119,6 @@
.eq(Collect::getObjType,Constants.ONE)
)>Constants.ZERO?Constants.ONE:Constants.ZERO);
}
-
return goodsResponse;
}
--
Gitblit v1.9.3