From 7869fa712c19c351a48bfb0af11b0fe87b17c184 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期三, 14 一月 2026 15:14:00 +0800
Subject: [PATCH] 小程序 用户端接口开发
---
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java | 806 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 782 insertions(+), 24 deletions(-)
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
index 6ca6e1a..4611954 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -8,10 +8,7 @@
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
-import com.doumee.core.utils.Constants;
-import com.doumee.core.utils.DateUtil;
-import com.doumee.core.utils.RedisUtil;
-import com.doumee.core.utils.Utils;
+import com.doumee.core.utils.*;
import com.doumee.core.utils.kuaidi100.DeliveryDTO;
import com.doumee.core.utils.kuaidi100.ExpressUtils;
import com.doumee.core.wx.SendWxMessage;
@@ -22,17 +19,13 @@
import com.doumee.dao.business.join.GoodsorderJoinMapper;
import com.doumee.dao.business.join.PlanorderDetailJoinMapper;
import com.doumee.dao.business.model.*;
-import com.doumee.dao.web.request.DealIntegralRequest;
-import com.doumee.dao.web.request.OrderPayRequest;
-import com.doumee.dao.web.request.PayDetailRequest;
-import com.doumee.dao.web.request.goods.MemberOrderRequest;
-import com.doumee.dao.web.request.goods.DealOrderRequest;
-import com.doumee.dao.web.request.goods.OrderCommentRequest;
-import com.doumee.dao.web.request.goods.OrderGoodsCommentRequest;
+import com.doumee.dao.system.dto.PlatformConfigDTO;
+import com.doumee.dao.web.dto.CouponDTO;
+import com.doumee.dao.web.request.*;
+import com.doumee.dao.web.request.goods.*;
+import com.doumee.dao.web.response.HomeInfoResponse;
import com.doumee.dao.web.response.MyPageResponse;
-import com.doumee.dao.web.response.goods.MemberOrderDetailResponse;
-import com.doumee.dao.web.response.goods.MemberOrderResponse;
-import com.doumee.dao.web.response.goods.PayResponse;
+import com.doumee.dao.web.response.goods.*;
import com.doumee.service.business.AreasService;
import com.doumee.service.business.GoodsorderService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -40,27 +33,32 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.service.business.IntegralService;
+import com.doumee.service.system.SystemDictDataService;
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
import com.github.binarywang.wxpay.exception.WxPayException;
+import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.checkerframework.checker.units.qual.C;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.*;
+import java.util.Date;
+import java.util.stream.Collectors;
/**
* 鍟嗗搧璁㈠崟淇℃伅琛⊿ervice瀹炵幇
@@ -78,7 +76,8 @@
private ActivitySignMapper activitySignMapper;
@Autowired
private AftersaleMapper aftersaleMapper;
-
+ @Autowired
+ private ShopGoodsRelationMapper shopGoodsRelationMapper;
@Autowired
private MemberMapper memberMapper;
@@ -95,7 +94,16 @@
private AddrMapper addrMapper;
@Autowired
+ private ShopMapper shopMapper;
+
+ @Autowired
+ private ShopGoodsRelationMapper relationMapper;
+
+ @Autowired
private MemberCouponMapper memberCouponMapper;
+
+ @Autowired
+ private CollectMapper collectMapper;
@Autowired
private WxMiniUtilService wxMiniUtilService;
@@ -119,6 +127,9 @@
private SystemDictDataBiz systemDictDataBiz;
@Autowired
+ private SystemDictDataService systemDictDataService;
+
+ @Autowired
private PlanorderDetailJoinMapper planorderDetailJoinMapper;
@Autowired
@@ -129,6 +140,9 @@
@Autowired
private GoodsorderDetailJoinMapper goodsorderDetailJoinMapper;
+
+ @Autowired
+ private IntegralMapper integralMapper;
@Override
public Integer create(Goodsorder goodsorder) {
@@ -179,6 +193,29 @@
goodsorder.setEditor(user.getId());
goodsorderMapper.updateById(goodsorder);
}
+
+ @Override
+ public IPage<Shop> getShopPage(PageWrap<Shop> pageWrap) {
+ IPage<Shop> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ Shop model = pageWrap.getModel();
+ if(Objects.isNull(model.getLatitude())||Objects.isNull(model.getLongitude())){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ return shopMapper.selectPage(page,new MPJLambdaWrapper<Shop>()
+ .selectAll(Shop.class)
+ .select(" case when LONGITUDE IS NULL OR LATITUDE IS NULL THEN 0 " +
+ " when t.TYPE = 0 then CONVERT( ST_Distance_Sphere ( POINT ( LONGITUDE, LATITUDE ), POINT ( "+model.getLongitude()+", "+model.getLatitude()+" )) /1000,DECIMAL(15,2)) " +
+ " when t.TYPE = 1 then CONVERT( ST_Distance_Sphere ( POINT ( LONGITUDE, LATITUDE ), POINT ( "+model.getLongitude()+", "+model.getLatitude()+" )) /1000,DECIMAL(15,2)) " +
+ " else CONVERT( ST_Distance_Sphere ( POINT ( LONGITUDE, LATITUDE ), POINT ( "+model.getLongitude()+", "+model.getLatitude()+" )) /1000,DECIMAL(15,2)) end " , Shop::getDistance)
+ .eq(Shop::getIsdeleted,Constants.ZERO)
+ .eq(Shop::getStatus,Constants.ZERO)
+ .like(StringUtils.isNotBlank(model.getAddr()),Shop::getAddr,model.getAddr())
+ .like(StringUtils.isNotBlank(model.getName()),Shop::getName,model.getName())
+ .orderByAsc(" distance ")
+ );
+ }
+
+
/**
* 鍜栬眴 鍟嗗煄璁㈠崟鍙戣揣
* @param goodsorder
@@ -500,7 +537,6 @@
/****************************************绉诲姩绔帴鍙e紑濮�********************************************************************/
- @Override
@Transactional(rollbackFor = {Exception.class,BusinessException.class})
public PayResponse orderPay(OrderPayRequest orderPayRequest){
Member member = memberMapper.selectById(orderPayRequest.getMemberId());
@@ -548,11 +584,11 @@
if(goods.getStatus().equals(Constants.ONE)){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪鍟嗗搧宸插垹闄ゆ垨宸蹭笅鏋讹紝鏃犳硶涓嬪崟");
}
- if(goodsSku.getStock().compareTo(payDetailRequest.getGoodsNum())<Constants.ZERO){
+ if(goodsSku.getStock().compareTo(new BigDecimal(Constants.formatIntegerNum(payDetailRequest.getGoodsNum())))<Constants.ZERO){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪鍟嗗搧搴撳瓨涓嶈冻锛屾棤娉曚笅鍗曪紒");
}
//鍟嗗搧搴撳瓨鎵i櫎
- goodsSku.setStock(goodsSku.getStock()-payDetailRequest.getGoodsNum());
+ goodsSku.setStock(goodsSku.getStock().subtract(new BigDecimal(Constants.formatIntegerNum(payDetailRequest.getGoodsNum()))));
goodsSkuMapper.updateById(goodsSku);
GoodsorderDetail goodsOrderDetail = new GoodsorderDetail();
goodsOrderDetail.setCreator(member.getId());
@@ -614,7 +650,7 @@
goodsorderMapper.insert(goodsorder);
//鏁版嵁瀛樺偍
BigDecimal total = Constants.formatBigdecimal(goodsorder.getPrice()).add(Constants.formatBigdecimal(goodsorder.getIntegral())).add(Constants.formatBigdecimal(goodsorder.getCouponPrice()));
- BigDecimal rate =Constants.formatBigdecimal(goodsorder.getCouponPrice()) .divide(total,4,BigDecimal.ROUND_HALF_UP);
+ BigDecimal rate =Constants.formatBigdecimal(goodsorder.getCouponPrice()).divide(total,4,BigDecimal.ROUND_HALF_UP);
BigDecimal totalWxMoney = new BigDecimal(0);
BigDecimal totalIntegral = new BigDecimal(0);
for (int i =0;i< goodsOrderDetailList.size();i++) {
@@ -630,7 +666,7 @@
//褰撳墠鏄庣粏瀹為檯浠锋牸
BigDecimal detialTotal = Constants.formatBigdecimal(goodsOrderDetail.getPrice()).multiply(new BigDecimal(Constants.formatIntegerNum(goodsOrderDetail.getGoodsNum())));
//鎶樼畻浼樻儬鍒稿悗鏀粯浠锋牸锛堝寘鍚幇閲戝拰浣欓閮ㄥ垎锛�
- BigDecimal actDetialTotal = detialTotal .subtract(detialTotal.multiply(rate));
+ BigDecimal actDetialTotal = detialTotal.subtract(detialTotal.multiply(rate));
//鎸夌幇閲戝拰绉垎鏀粯姣斾緥锛屾姌绠楁瘡涓槑缁嗙幇閲戝拰绉垎鏀粯鐨勬暟閲�
BigDecimal rate1 = detialTotal .divide(total,4,BigDecimal.ROUND_HALF_UP);
//鍙��鐜伴噾閲戦
@@ -680,6 +716,241 @@
}
+
+ @Override
+ @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+ public PayResponse orderPay(ShopOrderPayRequest orderPayRequest,MemberCouponServiceImpl memberCouponService){
+ Member member = memberMapper.selectById(orderPayRequest.getMemberId());
+
+ Goodsorder goodsorder = new Goodsorder();
+ goodsorder.setCreator(orderPayRequest.getMemberId());
+ goodsorder.setIntegral(BigDecimal.ZERO);
+ goodsorder.setCreateDate(new Date());
+ goodsorder.setIsdeleted(Constants.ZERO);
+ goodsorder.setMemberInfo(orderPayRequest.getRemark());
+ goodsorder.setMemberId(member.getId());
+ goodsorder.setType(Constants.ZERO);
+ goodsorder.setStatus(Constants.ZERO);
+ Shop shop = null;
+ if(Constants.equalsInteger(orderPayRequest.getReceiveType(),Constants.ZERO)){
+ //鏌ヨ鏀惰揣鍦板潃
+ Addr addr = addrMapper.selectById(orderPayRequest.getAddressId());
+ if(Objects.isNull(addr)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鏀惰揣鍦板潃淇℃伅锛�");
+ }
+ Areas area = areasService.findById(addr.getAreaId(), Constants.TWO);
+ if(Objects.isNull(area)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏀惰揣鍦板潃鍖哄垝淇℃伅鍙戠敓鍙樺寲锛岃鏇存柊鍚庝笅鍗曪紒");
+ }
+ goodsorder.setAddrId(addr.getId());
+ goodsorder.setLinkaddr(area.getProvinceName()+area.getCityName() + area.getName() + addr.getAddr());
+ goodsorder.setLinkphone(addr.getPhone());
+ goodsorder.setLinkname(addr.getName());
+ if(Objects.nonNull(member.getBindShopId())){
+ goodsorder.setDistributionShopId(member.getBindShopId());
+ shop = shopMapper.selectById(member.getBindShopId());
+ }
+ }else{
+ if(Objects.isNull(orderPayRequest.getShopId())){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"璇烽�夋嫨姝g‘鐨勮嚜鎻愰棬搴楋紒");
+ }
+ shop = shopMapper.selectById(orderPayRequest.getShopId());
+ if(Objects.isNull(shop)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"璇烽�夋嫨姝g‘鐨勮嚜鎻愰棬搴楋紒");
+ }
+
+ //鏍规嵁閫夋嫨鍟嗘埛杩涜浼氬憳涓庡晢鎴蜂俊鎭粦瀹�
+ if(Objects.isNull(member.getBindShopId())){
+ memberMapper.update(new UpdateWrapper<Member>().lambda()
+ .set(Member::getBindShopId,shop.getId())
+ .eq(Member::getId,member.getId())
+ );
+ }
+ goodsorder.setPickUpShopId(shop.getId());
+ goodsorder.setDistributionShopId(shop.getId());
+ if(Objects.isNull(member.getBindShopId())){
+ member.setBindShopId(shop.getId());
+ }
+ }
+
+ //鍗曟嵁缂栧彿 鑷
+ goodsorder.setCode(getNextInCode());
+ //璁$畻璁㈠崟鎬婚噾棰�
+ BigDecimal sumPrice = BigDecimal.ZERO;
+
+ //瀛樺偍璁板綍鏄庣粏
+ OrderPayConfirmRequest payConfirmRequest = new OrderPayConfirmRequest();
+ payConfirmRequest.setReceiveType(orderPayRequest.getReceiveType());
+ payConfirmRequest.setPayDetailRequestList(orderPayRequest.getPayDetailRequestList());
+ payConfirmRequest.setAddressId(orderPayRequest.getAddressId());
+ payConfirmRequest.setMemberId(member.getId());
+ payConfirmRequest.setCouponId(orderPayRequest.getCouponId());
+ //閫氳繃鏀粯纭鎺ュ彛鑾峰彇鐢熸垚鏀粯淇℃伅
+ OrderPayConfirmResponse orderPayConfirmResponse = this.orderPayConfirm(payConfirmRequest,memberCouponService);
+ if(Objects.isNull(orderPayConfirmResponse)){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"绯荤粺鏀粯閿欒,璇疯仈绯荤鐞嗗憳");
+ }
+ goodsorder.setPrice(orderPayConfirmResponse.getPayAmount());
+ goodsorder.setTotalPrice(orderPayConfirmResponse.getAmount());
+ goodsorder.setUseIntegral(orderPayConfirmResponse.getDeductIntegral());
+ goodsorder.setIntegral(goodsorder.getUseIntegral());
+ goodsorder.setIntegralPrice(orderPayConfirmResponse.getIntegralAmount());
+ goodsorder.setMailPrice(orderPayConfirmResponse.getMailAmount());
+ goodsorder.setPayMethod(goodsorder.getPrice().compareTo(BigDecimal.ZERO)>Constants.ZERO?Constants.ZERO:Constants.ONE);
+ if(Objects.nonNull(orderPayConfirmResponse.getMemberCoupon())){
+ sumPrice = sumPrice.subtract(orderPayConfirmResponse.getMemberCoupon().getPrice());
+ goodsorder.setCouponId(orderPayConfirmResponse.getMemberCoupon().getId());
+ goodsorder.setCouponPrice(orderPayConfirmResponse.getMemberCoupon().getValidAmount());
+ memberCouponMapper.update(null,new UpdateWrapper<MemberCoupon>().lambda()
+ .set(MemberCoupon::getStatus,Constants.ONE)
+ .set(MemberCoupon::getUseDate,DateUtil.getCurrDateTime())
+ .eq(MemberCoupon::getId,orderPayConfirmResponse.getMemberCoupon().getId())
+ );
+ }
+ goodsorderMapper.insert(goodsorder);
+ List<OrderGoodsCalculateResponse> goodsCalculateList = orderPayConfirmResponse.getGoodsCalculateList();
+ if(CollectionUtils.isEmpty(goodsCalculateList)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏃犳槑缁嗘暟鎹�,璇锋鏌ラ�夋嫨鏁版嵁锛�");
+ }
+ List<GoodsorderDetail> goodsOrderDetailList = new ArrayList<>();
+ for (OrderGoodsCalculateResponse payDetailRequest:goodsCalculateList) {
+ //鏌ヨ鍟嗗搧
+ GoodsSku goodsSku = goodsSkuMapper.selectById(payDetailRequest.getSkuId());
+ if(Objects.isNull(goodsSku)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鍟嗗搧SKU淇℃伅锛�");
+ }
+ Goods goods = goodsMapper.selectById(goodsSku.getGoodsId());
+ if(Objects.isNull(goods)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鍟嗗搧淇℃伅锛�");
+ }
+ if(goods.getStatus().equals(Constants.ONE)){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪鍟嗗搧宸插垹闄ゆ垨宸蹭笅鏋讹紝鏃犳硶涓嬪崟");
+ }
+ if(goodsSku.getStock().compareTo(new BigDecimal(Constants.formatIntegerNum(payDetailRequest.getGoodsNum())))<Constants.ZERO){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪鍟嗗搧搴撳瓨涓嶈冻锛屾棤娉曚笅鍗曪紒");
+ }
+ //鍟嗗搧搴撳瓨鎵i櫎
+ goodsSku.setStock(goodsSku.getStock().subtract(new BigDecimal(Constants.formatIntegerNum(payDetailRequest.getGoodsNum()))));
+ goodsSkuMapper.updateById(goodsSku);
+ GoodsorderDetail goodsOrderDetail = new GoodsorderDetail();
+ goodsOrderDetail.setCreator(member.getId());
+ goodsOrderDetail.setCreateDate(new Date());
+ goodsOrderDetail.setImgurl(StringUtils.isBlank(goodsSku.getImgurl())?goods.getImgurl():goodsSku.getImgurl());
+ goodsOrderDetail.setName(goods.getName());
+ goodsOrderDetail.setGoodsSkuId(goodsSku.getId().toString());
+ goodsOrderDetail.setSkuName(goodsSku.getName());
+ goodsOrderDetail.setPrice(goodsSku.getPrice());
+ goodsOrderDetail.setGoodsNum(payDetailRequest.getGoodsNum());
+ goodsOrderDetail.setGoodsWeight(payDetailRequest.getWeight());
+ goodsOrderDetail.setCouponDeduct(payDetailRequest.getCouponDeductCash());
+ goodsOrderDetail.setIntegralDeduct(payDetailRequest.getIntegralDeductCash());
+ goodsOrderDetail.setOrderId(goodsorder.getId());
+
+ //鍒ゆ柇闂ㄥ簵鏄惁璁剧疆鍟嗗搧鐨勪环鏍间俊鎭�
+ if(Objects.nonNull(goodsorder.getDistributionShopId())){
+ ShopGoodsRelation shopGoodsRelation = relationMapper.selectOne(new QueryWrapper<ShopGoodsRelation>().lambda()
+ .eq(ShopGoodsRelation::getIsdeleted,Constants.ZERO) .eq(ShopGoodsRelation::getShopId,goodsorder.getDistributionShopId())
+ .eq(ShopGoodsRelation::getStatus,Constants.ZERO)
+ .eq(ShopGoodsRelation::getIsdeleted,Constants.ZERO)
+ .eq(ShopGoodsRelation::getGoodsSkuId,goodsOrderDetail.getGoodsSkuId())
+ .last(" limit 1 ")
+ );
+ if(Objects.isNull(shopGoodsRelation)){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝缁忛攢鍟嗘湭缁戝畾["+goods.getName()+"]鍟嗗搧锛岃鑱旂郴绠$悊鍛橈紒");
+ }
+
+ PlatformConfigDTO platformConfigDTO = systemDictDataService.getPlatformConfigDTO();
+ //缁忛攢鍟嗕紭鎯犳壙鎷呭崰姣�
+ BigDecimal shopRate = new BigDecimal("100").subtract(platformConfigDTO.getTotalRate());
+ //璁$畻缁忛攢鍟嗕紭鎯犳壙鎷呴噾棰� 锛堜紭鎯犲埜鎶垫墸閲戦 + 绉垎鎶垫墸閲戦锛� * 鍗犳瘮姣斾緥
+ BigDecimal shopDeductAmount = payDetailRequest.getCouponDeductCash().add(payDetailRequest.getIntegralDeductCash())
+ .multiply(shopRate).divide(new BigDecimal("100"),2, RoundingMode.HALF_UP);
+ //鏍规嵁缁忛攢鍟嗛攢鍞ā寮� 璁$畻搴旂粨绠楅噾棰�
+ if(shop.getSaleType().equals(Constants.ONE)){
+ goodsOrderDetail.setShopSettlement(goodsOrderDetail.getPrice().subtract(shopDeductAmount));
+ }else {
+ goodsOrderDetail.setShopSettlement(
+ shopGoodsRelation.getPrice().subtract(shopGoodsRelation.getPrice()).subtract(shopDeductAmount));
+ }
+ if(goodsOrderDetail.getShopSettlement().compareTo(BigDecimal.ZERO)<Constants.ZERO){
+ goodsOrderDetail.setShopSettlement(BigDecimal.ZERO);
+ }
+ }else{
+ goodsOrderDetail.setShopSettlement(BigDecimal.ZERO);
+ }
+ goodsOrderDetailList.add(goodsOrderDetail);
+ //鍒犻櫎璐墿杞﹀晢鍝�
+ shopcartMapper.delete(new QueryWrapper<Shopcart>().lambda()
+ .eq(Shopcart::getMemberId,member.getId())
+ .eq(Shopcart::getGoodsSkuId,goodsOrderDetail.getGoodsSkuId())
+ );
+ }
+ //绉垎鍙樺姩璁板綍
+ if(goodsorder.getUseIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+ //鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
+ DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+ dealIntegralRequest.setIntegralNum(goodsorder.getUseIntegral());
+ dealIntegralRequest.setDealType(Constants.ONE);
+ dealIntegralRequest.setMemberId(member.getId());
+ dealIntegralRequest.setObjId(goodsorder.getId());
+ dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
+ dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER);
+ integralService.dealIntegral(dealIntegralRequest);
+ }
+
+ if(goodsorder.getPrice().compareTo(orderPayRequest.getTitlePrice())!=Constants.ZERO){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍟嗗搧浠锋牸鍙戠敓鍙樺寲锛岃鍒锋柊鍚庨噸鏂版敮浠橈紒");
+ }
+ //瀛樺湪鐜伴噾鏀粯
+ if(Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ZERO)){
+ return this.wxPay(goodsorder,member);
+ }
+ //鏃犵幇閲戞敮浠�
+ goodsorderMapper.update(null,new UpdateWrapper<Goodsorder>().lambda()
+ .set(Goodsorder::getStatus,Constants.ONE)
+ .set(Goodsorder::getPayStatus,Constants.OrderStatus.PAY_DONE.getKey())
+ .set(Goodsorder::getPayDate,DateUtil.getCurrDateTime())
+ .set(Goodsorder::getId,goodsorder.getId())
+ );
+ PayResponse payResponse = new PayResponse();
+ payResponse.setOrderId(goodsorder.getId());
+ payResponse.setPayType(Constants.ONE);
+ return payResponse;
+ }
+
+
+ public void shopBalance(GoodsorderDetail detail,Shop shop){
+ if(Objects.isNull(shop)){
+ detail.setShopSettlement(BigDecimal.ZERO);
+ return;
+ }
+ PlatformConfigDTO platformConfigDTO = systemDictDataService.getPlatformConfigDTO();
+ //缁忛攢鍟嗕紭鎯犳壙鎷呭崰姣�
+ BigDecimal shopRate = new BigDecimal("100").subtract(platformConfigDTO.getTotalRate());
+
+ ShopGoodsRelation shopGoodsRelation = shopGoodsRelationMapper.selectOne(new QueryWrapper<ShopGoodsRelation>().lambda()
+ .eq(ShopGoodsRelation::getIsdeleted,Constants.ZERO)
+ .eq(ShopGoodsRelation::getStatus,Constants.ZERO)
+ .eq(ShopGoodsRelation::getShopId,shop.getId())
+ .eq(ShopGoodsRelation::getGoodsSkuId,detail.getGoodsSkuId())
+ .last(" limit 1 ")
+ );
+ if(Objects.isNull(shopGoodsRelation)){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝鍏宠仈缁忛攢鍟嗘湭缁戝畾["+detail.getName()+"]鍟嗗搧锛岃鑱旂郴绠$悊鍛橈紒");
+ }
+
+
+
+
+
+
+
+
+
+
+
+ }
+
/**
* 閲嶆柊鏀粯
* @param orderId
@@ -715,7 +986,7 @@
Object response = null;
WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
request.setBody("骞冲彴鍟嗗煄");
- request.setAttach("terraceMall");
+ request.setAttach("shopGoods");
request.setOutTradeNo(goodsorder.getCode().toString());
request.setTotalFee(BaseWxPayRequest.yuanToFen(goodsorder.getPrice().toString()));
// request.setTotalFee(2);
@@ -727,6 +998,7 @@
PayResponse payResponse = new PayResponse();
payResponse.setResponse(response);
payResponse.setOrderId(goodsorder.getId());
+ payResponse.setPayType(Constants.ZERO);
return payResponse;
} catch (WxPayException e) {
e.printStackTrace();
@@ -781,6 +1053,9 @@
j.setImgUrl(fullUrl + j.getImgUrl());
});
memberOrderResponse.setMemberOrderDetailResponseList(memberOrderDetailResponseList);
+ if(Constants.equalsInteger(memberOrderResponse.getReceiveType(),Constants.ONE)){
+ memberOrderResponse.setShopInfo(shopMapper.selectById(memberOrderResponse.getShopId()));
+ }
return memberOrderResponse;
}
@@ -879,7 +1154,7 @@
goodsName = goods.getName();
}
if(!Objects.isNull(goodsSku)){
- goodsSku.setStock(goodsSku.getStock()+goodsorderDetail.getGoodsNum());
+ goodsSku.setStock(goodsSku.getStock().add(new BigDecimal(Constants.formatIntegerNum(goodsorderDetail.getGoodsNum()))));
goodsSkuMapper.updateById(goodsSku);
}
}
@@ -898,6 +1173,308 @@
}
}
}
+
+
+ @Override
+ @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+ public void cancelOrderNew(Integer orderId,Integer optUserId,String cancelInfo){
+ if(Objects.isNull(orderId)){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ Goodsorder goodsorder = goodsorderMapper.selectById(orderId);
+ if(Objects.isNull(goodsorder)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ if(!(Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.WAIT_PAY.getKey())
+ || Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.PAY_DONE.getKey())
+ || Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.WAIT_RECEIVE.getKey()) )){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鍙栨秷澶辫触锛氳鍗曠姸鎬佸凡娴佽浆锛�");
+ }
+ if(goodsorder.getPrice().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+ //寰俊鐜伴噾閫�娆�
+ String refundCode = WxMiniUtilService.wxRefund(goodsorder.getCode().toString(), goodsorder.getPrice(), goodsorder.getPrice());
+ Fund fund = new Fund();
+ fund.setOrderCode(refundCode);
+ fund.setCreateDate(new Date());
+ fund.setIsdeleted(Constants.ZERO);
+ fund.setRemark(goodsorder.getId().toString());
+ fund.setMemberId(goodsorder.getCreator());
+ fund.setTitle("璁㈠崟鍙栨秷");
+ fund.setContent(StringUtils.isBlank(cancelInfo)?"鐢ㄦ埛涓诲姩鍙栨秷":cancelInfo);
+ fund.setObjId(goodsorder.getId());
+ fund.setObjType(Constants.ONE);
+ fund.setType(Constants.ONE);
+ fund.setNum(goodsorder.getPrice());
+ fundMapper.insert(fund);
+ }
+ if(goodsorder.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+ //鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
+ DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+ dealIntegralRequest.setIntegralNum(goodsorder.getIntegral());
+ dealIntegralRequest.setDealType(Constants.ZERO);
+ dealIntegralRequest.setMemberId(goodsorder.getMemberId());
+ dealIntegralRequest.setObjId(goodsorder.getId());
+ dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
+ dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER_CANCEL);
+ integralService.dealIntegral(dealIntegralRequest);
+ }
+ //璁㈠崟淇℃伅鍙栨秷
+ goodsorder.setStatus(Constants.OrderStatus.CLOSE.getKey());
+ goodsorder.setCancelDate(new Date());
+ goodsorder.setCancelInfo(StringUtils.isBlank(cancelInfo)?"鐢ㄦ埛涓诲姩鍙栨秷":cancelInfo);
+ goodsorder.setCancelUser(optUserId);
+ goodsorderMapper.updateById(goodsorder);
+ String goodsName = "";
+ List<GoodsorderDetail> goodsorderDetailList = goodsorderDetailMapper.selectList(new QueryWrapper<GoodsorderDetail>().eq("ORDER_ID",goodsorder.getId()));
+ if(!Objects.isNull(goodsorderDetailList)&&goodsorderDetailList.size()>Constants.ZERO){
+ for (GoodsorderDetail goodsorderDetail:goodsorderDetailList) {
+ GoodsSku goodsSku = goodsSkuMapper.selectById(goodsorderDetail.getGoodsSkuId());
+ if(StringUtils.isBlank(goodsName)){
+ Goods goods = goodsMapper.selectById(goodsSku.getGoodsId());
+ goodsName = goods.getName();
+ }
+ if(!Objects.isNull(goodsSku)){
+ goodsSku.setStock(goodsSku.getStock().add(new BigDecimal(Constants.formatIntegerNum(goodsorderDetail.getGoodsNum()))));
+ goodsSkuMapper.updateById(goodsSku);
+ }
+ }
+ }
+
+ //SendWxMessage.orderCancel(goodsorder,memberMapper.selectById(goodsorder.getMemberId()),goodsName);
+
+ //鏌ヨ浼樻儬鍒镐俊鎭褰�
+ if(!Objects.isNull(goodsorder.getCouponId())){
+ MemberCoupon memberCoupon = memberCouponMapper.selectById(goodsorder.getCouponId());
+ if(!Objects.isNull(memberCoupon)){
+ memberCoupon.setStatus(Constants.ZERO);
+ memberCouponMapper.updateById(memberCoupon);
+ }
+ }
+ }
+
+
+
+
+
+ public BigDecimal getDeductAmount(List<PayDetailRequest> requestList){
+ List<MemberCoupon> memberCouponList = new ArrayList<>();
+
+ List<GoodsSku> goodsSkuList = goodsSkuMapper.selectList(new QueryWrapper<GoodsSku>()
+ .lambda()
+ .eq(GoodsSku::getIsdeleted,Constants.ZERO)
+ .in(GoodsSku::getId,requestList.stream().map(i->i.getGoodsSkuId()).collect(Collectors.toList()))
+ );
+ if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(goodsSkuList)||!Constants.equalsInteger(goodsSkuList.size(),requestList.size())){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍟嗗搧SKU淇℃伅閿欒,璇峰埛鏂伴噸璇�");
+ }
+
+ //鏌ヨ鍟嗗搧鍒楄〃
+ List<Goods> goodsList = goodsMapper.selectJoinList(Goods.class,
+ new MPJLambdaWrapper<Goods>()
+ .selectAs(GoodsSku::getPrice,Goods::getSkuPrice)
+ .selectAs(GoodsSku::getId,Goods::getSkuId)
+ .leftJoin(GoodsSku.class,GoodsSku::getGoodsId,Goods::getId)
+ .in(GoodsSku::getId,requestList.stream().map(i->i.getGoodsSkuId()).collect(Collectors.toList())));
+ if(Objects.isNull(goodsList)){
+ return BigDecimal.ZERO;
+ }
+ //鑾峰彇閫夋嫨鐨勫晢鍝佹�婚噾棰� 涓� 鍗曚釜鍟嗗搧閲戦
+ BigDecimal deductAmount = BigDecimal.ZERO;
+ for (Goods goods:goodsList) {
+ List<PayDetailRequest> request = requestList.stream().filter(i->Constants.equalsInteger(i.getGoodsSkuId(), goods.getSkuId())).collect(Collectors.toList());
+ if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(request)){
+ goods.setSkuAmount(goods.getSkuPrice().multiply(new BigDecimal(request.get(Constants.ZERO).getGoodsNum()+"")));
+ deductAmount = deductAmount.add(goods.getSkuAmount().multiply(goods.getDeductRata()));
+ }
+ }
+ return deductAmount;
+ }
+
+
+ /**
+ * 璁㈠崟纭鎺ュ彛
+ * @param memberCouponService
+ * @param request
+ */
+ @Override
+ public OrderPayConfirmResponse orderPayConfirm(OrderPayConfirmRequest request,
+ MemberCouponServiceImpl memberCouponService){
+ OrderPayConfirmResponse orderPayConfirmResponse = new OrderPayConfirmResponse();
+ List<Goods> goodsList = goodsMapper.selectJoinList(Goods.class,
+ new MPJLambdaWrapper<Goods>()
+ .selectAs(GoodsSku::getPrice,Goods::getSkuPrice)
+ .selectAs(GoodsSku::getId,Goods::getSkuId)
+ .selectAs(GoodsSku::getIntegralRate,Goods::getDeductRata)
+ .selectAs(GoodsSku::getWeight,Goods::getWeight)
+ .selectAs(GoodsSku::getImgurl,Goods::getSkuImg)
+ .leftJoin(GoodsSku.class,GoodsSku::getGoodsId,Goods::getId)
+ .in(GoodsSku::getId,request.getPayDetailRequestList().stream().map(i->i.getGoodsSkuId()).collect(Collectors.toList())));
+ if(CollectionUtils.isEmpty(goodsList)){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈尮閰嶅埌鍟嗗搧淇℃伅");
+ }
+ List<OrderGoodsCalculateResponse> goodsCalculateList = ListUtil.copyProperties(goodsList,OrderGoodsCalculateResponse::new);
+
+ //璁㈠崟鎬婚噾棰�
+ BigDecimal amount = BigDecimal.ZERO;
+ //浼樻儬鍒告姷鎵i噾棰�
+ BigDecimal couponAmount = BigDecimal.ZERO;
+ //绉垎鎶垫墸閲戦
+ BigDecimal integralAmount = BigDecimal.ZERO;
+ //鎶垫墸绉垎鍊�
+ BigDecimal deductIntegral = BigDecimal.ZERO;
+ //閭垂閲戦
+ BigDecimal mailAmount = BigDecimal.ZERO;
+ for (OrderGoodsCalculateResponse response:goodsCalculateList) {
+ List<PayDetailRequest> payDetailRequestList = request.getPayDetailRequestList().stream()
+ .filter(i->Constants.equalsInteger(i.getGoodsSkuId(), response.getSkuId())).collect(Collectors.toList());
+ if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(payDetailRequestList)){
+ PayDetailRequest payDetailRequest = payDetailRequestList.get(Constants.ZERO);
+ response.setSkuAmount(response.getSkuPrice().multiply(new BigDecimal(payDetailRequest.getGoodsNum()+"")));
+ response.setGoodsNum(payDetailRequest.getGoodsNum());
+ amount = amount.add(response.getSkuAmount());
+ }
+ }
+ MemberCoupon memberCoupon = new MemberCoupon();
+ orderPayConfirmResponse.setCouponAmount(couponAmount);
+ //鑾峰彇鍙互浣跨敤鐨勪紭鎯犲埜
+ List<MemberCoupon> memberCouponList = memberCouponService.getApplyCoupon(request.getPayDetailRequestList(),request.getMemberId());
+ if(CollectionUtils.isNotEmpty(memberCouponList)){
+ orderPayConfirmResponse.setMemberCouponList(memberCouponList);
+ //濡傛灉閫夋嫨浜嗕紭鎯犲埜锛屽垯鍒ゆ柇閫夋嫨鐨勪紭鎯犲埜鏄惁鏈夋晥
+ if(Objects.nonNull(request.getCouponId())){
+ List<MemberCoupon> memberCoupons = memberCouponList.stream().filter(i->Constants.equalsInteger(i.getId(),request.getCouponId())).collect(Collectors.toList());
+ if(CollectionUtils.isEmpty(memberCoupons)){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閫夋嫨鐨勪紭鎯犲埜鏃犳晥锛岃鍒锋柊閲嶈瘯");
+ }
+ memberCoupon = memberCouponList.get(Constants.ZERO);
+ couponAmount = memberCoupon.getValidAmount();
+ memberCouponService.calculateCouponRata(memberCoupon,goodsCalculateList,amount);
+ orderPayConfirmResponse.setMemberCoupon(memberCoupon);
+ }
+ }else {
+ if(Objects.nonNull(request.getCouponId())){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏃犲彲鐢ㄤ紭鎯犲埜锛岃鍒锋柊鏌ョ湅");
+ }
+ }
+ //鏌ヨ鐢ㄦ埛鎬荤Н鍒�
+ Member member = memberMapper.selectById(request.getMemberId());
+ //鏈�浣庡彲鐢ㄥ惎鐢ㄧН鍒�
+ BigDecimal minimumIntegral = new BigDecimal(systemDictDataBiz.queryByCode(Constants.SHOP_CONFIG,Constants.MINIMUM_AVAILABLE_INTEGRAL).getCode());
+ //绉垎鍙娇鐢ㄧ姸鎬� 澶т簬0 澶т簬鏈�灏忓彲鐢ㄩ厤缃Н鍒嗗��
+ orderPayConfirmResponse.setIntegralStatus(
+ (member.getIntegral().compareTo(BigDecimal.ZERO)<=Constants.ZERO||
+ member.getIntegral().compareTo(minimumIntegral)<Constants.ZERO)?Constants.ONE:Constants.ZERO
+ );
+
+ orderPayConfirmResponse.setDeductIntegral(deductIntegral);
+ orderPayConfirmResponse.setIntegralAmount(integralAmount);
+ if(Constants.equalsInteger(orderPayConfirmResponse.getIntegralStatus(),Constants.ZERO)){
+ integralAmount = this.calculateIntegralRata(orderPayConfirmResponse,goodsCalculateList,member.getIntegral());
+ }
+
+ //閭垂閲戦
+ if(Objects.nonNull(request.getReceiveType())){
+ if(Constants.equalsInteger(request.getReceiveType(),Constants.ZERO)){
+ //TODO 鏍规嵁鏀惰揣鍦板潃 鏌ヨ杩愯垂閰嶇疆
+ //璁$畻鍟嗗搧淇℃伅鎬婚噸閲�
+ BigDecimal totalWeight = goodsCalculateList.stream().map(i->
+ i.getWeight().multiply(new BigDecimal(i.getGoodsNum().toString()))
+ ).reduce(BigDecimal.ZERO,BigDecimal::add);
+ //TODO 鏆傛椂鏃犺繍璐归噾棰�
+ mailAmount = BigDecimal.ZERO;
+
+ amount = amount.add(mailAmount);
+ }
+ }
+ orderPayConfirmResponse.setAmount(amount);
+ orderPayConfirmResponse.setMailAmount(mailAmount);
+ //浣跨敤绉垎 鍑忓幓绉垎鎶垫墸閲戦
+ if(Constants.equalsInteger(request.getUseIntegral(), Constants.ONE)){
+ orderPayConfirmResponse.setIntegralAmount(integralAmount);
+ }
+ //浣跨敤浼樻儬鍒� 鍑忓幓浼樻儬鍒告姷鎵i噾棰�
+ if(Objects.nonNull(request.getCouponId())){
+ orderPayConfirmResponse.setCouponAmount(couponAmount);
+ }
+ //瀹為檯鏀粯閲戦 鍑忓幓浼樻儬鍒搞�佺Н鍒嗘姷鎵i噾棰�
+ orderPayConfirmResponse.setPayAmount(amount.subtract(couponAmount).subtract(orderPayConfirmResponse.getIntegralAmount()));
+ orderPayConfirmResponse.setGoodsCalculateList(goodsCalculateList);
+
+ orderPayConfirmResponse.setIntegralBack(getBackIntegral(orderPayConfirmResponse.getPayAmount(),Constants.ZERO));
+ return orderPayConfirmResponse;
+ }
+
+
+ /**
+ * 璁$畻璧犻�佺Н鍒嗘暟閲�
+ * @param payAmount
+ * @param type 0=娑堣垂鑰呯Н鍒� 1=缁忛攢鍟嗙Н鍒�
+ * @return
+ */
+ public BigDecimal getBackIntegral(BigDecimal payAmount,Integer type){
+ BigDecimal integralBack = BigDecimal.ZERO;
+ if(payAmount.compareTo(BigDecimal.ZERO)<=Constants.ZERO){
+ return integralBack;
+ }
+ PlatformConfigDTO platformConfigDTO = systemDictDataService.getPlatformConfigDTO();
+ if(Objects.isNull(platformConfigDTO)){
+ return integralBack;
+ }
+ if(Constants.equalsInteger(type,Constants.ZERO)){
+ if( Constants.equalsInteger(platformConfigDTO.getReturnMemberIntegralStatus(),Constants.ZERO)
+ && Objects.nonNull(platformConfigDTO.getReturnMemberIntegral())){
+ integralBack = payAmount.divide(platformConfigDTO.getReturnMemberIntegral(),0,BigDecimal.ROUND_DOWN);
+ }
+ }else{
+ if( Constants.equalsInteger(platformConfigDTO.getReturnShopIntegralStatus(),Constants.ZERO)
+ && Objects.nonNull(platformConfigDTO.getReturnShopIntegral())){
+ integralBack = payAmount.divide(platformConfigDTO.getReturnShopIntegral(),0,BigDecimal.ROUND_DOWN);
+ }
+ }
+ return integralBack;
+ }
+
+
+
+
+ /**
+ * 璁$畻绉垎鎶垫墸淇℃伅
+ * @param goodsCalculateList 鍟嗗搧闆嗗悎
+ * @param totalIntegral 鐢ㄦ埛鎬荤Н鍒�
+ */
+ public BigDecimal calculateIntegralRata(OrderPayConfirmResponse orderPayConfirmResponse,List<OrderGoodsCalculateResponse> goodsCalculateList,BigDecimal totalIntegral){
+ //褰撳墠閫夋嫨鍟嗗搧鏈�澶у彲鐢ㄧН鍒嗘姷鎵g殑閲戦
+ BigDecimal maxDeductionCash = goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(i.getCouponDeductCash())
+ .multiply(i.getDeductRata()).multiply(new BigDecimal("0.01"))).reduce(BigDecimal.ZERO,BigDecimal::add);
+ //绉垎 - 鐜伴噾 姣斾緥
+ BigDecimal cashToIntegralRata = new BigDecimal(systemDictDataBiz.queryByCode(Constants.SHOP_CONFIG,Constants.INTEGRAL_EXCHANGE_CASH_RATA).getCode());
+ //褰撳墠閫夋嫨鍟嗗搧鎶垫墸闇�瑕佷娇鐢ㄧ殑绉垎
+ BigDecimal maxDeductionIntegral = maxDeductionCash.multiply(cashToIntegralRata).multiply(new BigDecimal("100"));
+ //鑾峰彇褰撳墠闇�瑕佹敮浠樼殑鐜伴噾鎬婚
+ BigDecimal payCash = goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(i.getCouponDeductCash())).reduce(BigDecimal.ZERO,BigDecimal::add);
+
+ //濡傛灉瀹為檯绉垎灏戜簬鏈�澶ч渶瑕佺Н鍒� 闇�瑕佽绠楁瘮渚嬪崰姣� 鍘诲搴旀坊鍔犺嚦瀵瑰簲鐨勫晢鍝侀噷
+ //寰幆涓嬪崟鍟嗗搧鍒楄〃 璁$畻搴旇浣跨敤鐨勭Н鍒嗗��
+ BigDecimal realDeductionCash = BigDecimal.ZERO;
+ for (int j = 0; j < goodsCalculateList.size(); j++) {
+ BigDecimal deductionCash = goodsCalculateList.get(j).getSkuAmount().subtract(goodsCalculateList.get(j).getCouponDeductCash());
+ goodsCalculateList.get(j).setIntegralMaxDeductCash(deductionCash);
+ //濡傛灉鍓╀綑绉垎澶т簬鍙互浣跨敤绉垎 鍒欑洿鎺ユ弧棰濊绠� 鍙嶄箣 鍓╀綑绉垎涓嶈兘婊¤冻鍏ㄩ儴鎶垫墸 鍗曠嫭璁$畻姣忎釜鍟嗗搧鍗犳瘮
+ if(totalIntegral.compareTo(maxDeductionIntegral)<Constants.ZERO){
+ deductionCash = deductionCash.divide(payCash).multiply(totalIntegral);
+ }
+ goodsCalculateList.get(j).setIntegralDeductCash(deductionCash);
+ realDeductionCash = realDeductionCash.add(deductionCash);
+ }
+ //鍓╀綑绉垎鍊�
+ orderPayConfirmResponse.setSurplusIntegral(totalIntegral);
+ //瀹為檯鎶垫墸浣跨敤绉垎
+ orderPayConfirmResponse.setDeductIntegral(totalIntegral.compareTo(maxDeductionCash)<=Constants.ZERO?totalIntegral:maxDeductionIntegral);
+ return realDeductionCash;
+
+ }
+
+
/**
@@ -938,6 +1515,21 @@
orderUrgeMapper.insert(orderUrge);
}
+ @Override
+ public void delOrder(Integer orderId,Integer memberId){
+ Goodsorder goodsorder = goodsorderMapper.selectById(orderId);
+ if(!goodsorder.getMemberId().equals(memberId)){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氱敤鎴蜂俊鎭尮閰嶅け璐ワ紒");
+ }
+ if(!goodsorder.getStatus().equals(Constants.OrderStatus.CLOSE.getKey())){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氬綋鍓嶈鍗曠姸鎬侊紝鏃犳硶杩涜璇ユ搷浣滐紒");
+ }
+ goodsorder.setIsdeleted(Constants.ONE);
+ goodsorder.setEditDate(new Date());
+ goodsorderMapper.updateById(goodsorder);
+ }
+
+
/**
* 璁㈠崟纭鏀惰揣
@@ -950,6 +1542,9 @@
if(!goodsorder.getMemberId().equals(memberId)){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氱敤鎴蜂俊鎭尮閰嶅け璐ワ紒");
}
+ if(Constants.equalsInteger(goodsorder.getReceiveType(),Constants.ONE)){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氳嚜鎻愯鍗曪紝鏃犳硶杩涜璇ユ搷浣滐紒");
+ }
if(!goodsorder.getStatus().equals(Constants.OrderStatus.WAIT_RECEIVE.getKey())){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氳鍗曟湭鍙戣揣锛屾棤娉曡繘琛岀‘璁わ紒");
}
@@ -959,6 +1554,120 @@
goodsorder.setStatus(Constants.OrderStatus.DONE.getKey());
goodsorder.setDoneDate(new Date());
goodsorderMapper.updateById(goodsorder);
+ //鏍规嵁璁㈠崟绫诲瀷杩涜绉垎璧犻��
+ //涓嬪崟纭鏀惰揣 锛岃禒閫佺粡閿�鍟嗙Н鍒�
+ this.orderAddShopIntegral(goodsorder);
+ //娑堣垂鑰呯‘璁ゆ敹璐�
+ this.orderAddMemberIntegral(goodsorder);
+ //缁忛攢鍟� 缁撶畻閲戦
+ this.orderAddShopCash(goodsorder);
+ }
+
+ /**
+ * 璁㈠崟鏍搁攢
+ * @param
+ * @param memberId
+ */
+ @Override
+ public void orderWriteOff(String exchangeCode,Integer memberId){
+ Goodsorder goodsorder = goodsorderMapper.selectOne(new QueryWrapper<Goodsorder>().lambda()
+ .eq(Goodsorder::getExchangeCode,exchangeCode)
+ .eq(Goodsorder::getIsdeleted,Constants.ZERO).last("limit 1 "));
+ if(Objects.isNull(goodsorder)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ if(!Constants.equalsInteger(goodsorder.getReceiveType(),Constants.ONE)){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氶厤閫佽鍗曪紝鏃犳硶杩涜璇ユ搷浣滐紒");
+ }
+ if(!goodsorder.getStatus().equals(Constants.OrderStatus.PAY_DONE.getKey())){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氳鍗曠姸鎬佸凡娴佽浆锛屾棤娉曡繘琛岃鎿嶄綔锛�");
+ }
+ Shop shop = shopMapper.selectById(goodsorder.getPickUpShopId());
+ if(Objects.isNull(shop)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌璁㈠崟鍏宠仈缁忛攢鍟嗕俊鎭�,璇疯仈绯荤鐞嗗憳");
+ }
+ if(!Constants.equalsInteger(shop.getMemberId(),memberId)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"["+shop.getName()+"]闈炴偍缁戝畾鐨勭粡閿�鍟嗭紝鏃犳硶杩涜璇ユ搷浣滐紒");
+ }
+ goodsorder.setStatus(Constants.OrderStatus.DONE.getKey());
+ goodsorder.setDoneDate(new Date());
+ goodsorderMapper.updateById(goodsorder);
+ //瀛樺湪鐜伴噾鏀粯 璧犻�� 绉垎
+ if(Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ZERO)){
+ //璧犻�佹秷璐硅�呯Н鍒�
+ this.orderAddMemberIntegral(goodsorder);
+ //缁忛攢鍟� 娣诲姞璧犻�佺Н鍒�
+ this.orderAddShopIntegral(goodsorder);
+ //缁忛攢鍟� 缁撶畻閲戦
+ this.orderAddShopCash(goodsorder);
+ }
+ }
+
+
+ /**
+ * 璧犻�佺粡閿�鍟嗕笅鍗曠Н鍒�
+ * @param goodsorder
+ */
+ public void orderAddShopIntegral(Goodsorder goodsorder){
+ if(Objects.isNull(goodsorder.getDistributionShopId()) || Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ONE)){
+ return;
+ }
+ BigDecimal backIntegral = getBackIntegral(goodsorder.getPrice(),Constants.ONE);
+ if (backIntegral.compareTo(BigDecimal.ZERO) >= 0) {
+ //鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
+ DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+ dealIntegralRequest.setIntegralNum(backIntegral);
+ dealIntegralRequest.setDealType(Constants.ZERO);
+ dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
+ dealIntegralRequest.setObjId(goodsorder.getId());
+ dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
+ dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.ORDER_DONATE);
+ integralService.dealShopIntegral(dealIntegralRequest);
+ }
+ }
+
+ public void orderAddShopCash(Goodsorder goodsorder){
+ if(Objects.isNull(goodsorder.getDistributionShopId()) || Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ONE)){
+ return;
+ }
+ List<GoodsorderDetail> goodsorderDetails = goodsorderDetailMapper.selectList(new QueryWrapper<GoodsorderDetail>().lambda()
+ .eq(GoodsorderDetail::getOrderId,goodsorder.getId())
+ );
+ BigDecimal settlement = goodsorderDetails.stream().map(i->i.getShopSettlement()).reduce(BigDecimal.ZERO,BigDecimal::add);
+ if(settlement.compareTo(BigDecimal.ZERO)>Constants.ZERO ){
+ DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+ dealIntegralRequest.setIntegralNum(settlement);
+ dealIntegralRequest.setDealType(Constants.ZERO);
+ dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
+ dealIntegralRequest.setObjId(goodsorder.getId());
+ dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
+ dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.ORDER_DONE_AMOUNT);
+ integralService.dealShopAmount(dealIntegralRequest);
+ }
+ }
+
+
+
+ /**
+ * 璧犻�佹秷璐硅�呬笅鍗曠Н鍒�
+ * @param goodsorder
+ */
+ public void orderAddMemberIntegral(Goodsorder goodsorder){
+ if(Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ONE)){
+ return;
+ }
+ BigDecimal backIntegral = getBackIntegral(goodsorder.getPrice(),Constants.ZERO);
+ if (backIntegral.compareTo(BigDecimal.ZERO) >= 0) {
+ //鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
+ DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+ dealIntegralRequest.setIntegralNum(backIntegral);
+ dealIntegralRequest.setDealType(Constants.ZERO);
+ dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
+ dealIntegralRequest.setObjId(goodsorder.getId());
+ dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
+ dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.ORDER_DONATE);
+ integralService.dealIntegral(dealIntegralRequest);
+ }
}
@@ -1080,7 +1789,7 @@
}
@Override
public void refreshOrderCodes(){
- int countOrder = 0,countSign=0,countSale=0;
+ long countOrder = 0,countSign=0,countSale=0;
QueryWrapper<Goodsorder> order = new QueryWrapper<>();
order.apply(true, "TO_DAYS(NOW())=TO_DAYS(create_date)");
@@ -1175,4 +1884,53 @@
}
+
+
+ @Override
+ public HomeInfoResponse getHomeInfo(int memberId){
+ HomeInfoResponse homeInfoResponse = new HomeInfoResponse();
+ Member member = memberMapper.selectById(memberId);
+ if(Objects.isNull(member)){
+ return homeInfoResponse;
+ }
+ homeInfoResponse.setMember(member);
+ homeInfoResponse.setWaitReceiveNum(
+ goodsorderMapper.selectCount(new QueryWrapper<Goodsorder>().lambda().eq(Goodsorder::getIsdeleted,Constants.ZERO)
+ .eq(Goodsorder::getMemberId,member.getId())
+ .eq(Goodsorder::getStatus,Constants.OrderStatus.WAIT_RECEIVE.getKey()))
+ );
+ homeInfoResponse.setWaitPayNum(
+ goodsorderMapper.selectCount(new QueryWrapper<Goodsorder>().lambda().eq(Goodsorder::getIsdeleted,Constants.ZERO)
+ .eq(Goodsorder::getMemberId,member.getId())
+ .eq(Goodsorder::getStatus,Constants.OrderStatus.WAIT_PAY.getKey()))
+ );
+ homeInfoResponse.setCartTypeNum(
+ shopcartMapper.selectCount(new QueryWrapper<Shopcart>().lambda()
+ .eq(Shopcart::getIsdeleted,Constants.ZERO)
+ .eq(Shopcart::getMemberId,member.getId()))
+ );
+ homeInfoResponse.setCouponNum(
+ memberCouponMapper.selectCount(new QueryWrapper<MemberCoupon>().lambda()
+ .eq(MemberCoupon::getIsdeleted,Constants.ZERO)
+ .eq(MemberCoupon::getMemberId,member.getId())
+ .eq(MemberCoupon::getStatus,Constants.ZERO)
+ .apply(" end_date >now() ")
+ )
+ );
+ homeInfoResponse.setCollectNum(
+ collectMapper.selectCount(new QueryWrapper<Collect>().lambda()
+ .eq(Collect::getIsdeleted,Constants.ZERO)
+ .eq(Collect::getMemberId,member.getId())
+ )
+ );
+
+ return homeInfoResponse;
+
+
+ }
+
+
+
+
+
}
--
Gitblit v1.9.3