From e4f9739d74323aacf09d139700f22a383910ee97 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期三, 04 三月 2026 10:38:32 +0800
Subject: [PATCH] 合并
---
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java | 589 ++++++++++++++++++++++++++++++++--------------------------
1 files changed, 325 insertions(+), 264 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 05a4f69..7f9c503 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
@@ -1,5 +1,6 @@
package com.doumee.service.business.impl;
+import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -36,6 +37,7 @@
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.business.NoticeService;
import com.doumee.service.system.SystemDictDataService;
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
@@ -64,6 +66,7 @@
import java.net.UnknownHostException;
import java.util.*;
import java.util.Date;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -90,6 +93,10 @@
private MemberMapper memberMapper;
@Autowired
private CouponMapper couponMapper;
+ @Autowired
+ private NoticeService noticeService;
+ @Autowired
+ private NoticeMapper noticeMapper;
@Autowired
private MemberCouponJoinMapper memberCouponJoinMapper;
@Autowired
@@ -163,6 +170,9 @@
@Autowired
private IntegralMapper integralMapper;
+
+
+ private final static String GOODS_ORDER_CREATE_LOCK = "goods:order:create:lock:";
@Override
public Integer create(Goodsorder goodsorder) {
@@ -282,6 +292,16 @@
goodsorder.getKdName()+"(鍗曞彿锛�"+goodsorder.getKdCode()+")");
}
+
+ //鍙戦�佸彂璐х珯鍐呬俊
+ Notice notice = Notice.getNotice(
+ Constants.NoticeType.NOTICE_ORDER_SEND,
+ goodsorder.getMemberId(),
+ goodsorder.getId()
+ );
+ notice.setContent(notice.getContent().replace("{param}",goodsorder.getCode().toString()));
+ noticeMapper.insert(notice);
+
/* // TODO 鍙戦�佸井淇℃ā鏉挎秷鎭�
Member member=memberMapper.selectById(query.getMemberId());
@@ -502,6 +522,9 @@
queryWrapper.le(pageWrap.getModel().getEndtime()!=null,Goodsorder::getCreateDate, pageWrap.getModel().getEndtime());
queryWrapper.eq(pageWrap.getModel().getReceiveType()!=null,Goodsorder::getReceiveType,pageWrap.getModel().getReceiveType());
queryWrapper.eq(pageWrap.getModel().getPayOrderId()!=null,Goodsorder::getPayOrderId,pageWrap.getModel().getPayOrderId());
+ if (StringUtils.isNotBlank(pageWrap.getModel().getGoodsName())) {
+ queryWrapper.exists("select gs.id from goodsorder_detail gs where gs.order_id=t.id and gs.isdeleted=0 and gs.NAME like '%"+pageWrap.getModel().getGoodsName()+"%' ");
+ }
}
@@ -581,6 +604,7 @@
Utils.MP.blankToNull(pageWrap.getModel());
queryWrapper.selectAll(Goodsorder.class)
+ .eq(pageWrap.getModel().getReceiveType()!=null,Goodsorder::getReceiveType,pageWrap.getModel().getReceiveType())
.eq(pageWrap.getModel().getDistributionShopId()!=null,Goodsorder::getDistributionShopId,pageWrap.getModel().getDistributionShopId())
.eq(pageWrap.getModel().getStatus()!=null,Goodsorder::getStatus,pageWrap.getModel().getStatus())
.eq(pageWrap.getModel().getCode()!=null,Goodsorder::getCode,pageWrap.getModel().getCode())
@@ -708,190 +732,16 @@
/****************************************绉诲姩绔帴鍙e紑濮�********************************************************************/
-
- @Transactional(rollbackFor = {Exception.class,BusinessException.class})
- public PayResponse orderPay(OrderPayRequest orderPayRequest){
- Member member = memberMapper.selectById(orderPayRequest.getMemberId());
- //鏌ヨ鏀惰揣鍦板潃
- 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 goodsorder = new Goodsorder();
- goodsorder.setCreator(orderPayRequest.getMemberId());
- goodsorder.setIntegral(BigDecimal.ZERO);
- goodsorder.setCreateDate(new Date());
- goodsorder.setIsdeleted(Constants.ZERO);
- goodsorder.setMemberInfo(orderPayRequest.getRemark());
- goodsorder.setAddrId(addr.getId());
- goodsorder.setLinkaddr(area.getProvinceName()+area.getCityName() + area.getName() + addr.getAddr());
- goodsorder.setLinkphone(addr.getPhone());
- goodsorder.setLinkname(addr.getName());
- goodsorder.setMemberId(member.getId());
- goodsorder.setType(orderPayRequest.getOrderType());
- //鍗曟嵁缂栧彿 鑷
- goodsorder.setCode(getNextInCode());
- //璁$畻璁㈠崟鎬婚噾棰�
- BigDecimal sumPrice = BigDecimal.ZERO;
- //瀛樺偍璁板綍鏄庣粏
- List<PayDetailRequest> payDetailRequestList = orderPayRequest.getPayDetailRequestList();
- if(Objects.isNull(payDetailRequestList)||payDetailRequestList.size()==Constants.ZERO){
- throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏃犳槑缁嗘暟鎹�,璇锋鏌ラ�夋嫨鏁版嵁锛�");
- }
- List<GoodsorderDetail> goodsOrderDetailList = new ArrayList<>();
- for (PayDetailRequest payDetailRequest:payDetailRequestList) {
- //鏌ヨ鍟嗗搧
- GoodsSku goodsSku = goodsSkuMapper.selectById(payDetailRequest.getGoodsSkuId());
- 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());
- goodsOrderDetailList.add(goodsOrderDetail);
- sumPrice = sumPrice.add(goodsSku.getPrice().multiply(new BigDecimal(payDetailRequest.getGoodsNum())));
- //璐墿杞︽敮浠� 鍒犻櫎璐墿杞﹀晢鍝�
- if(orderPayRequest.getIsShopChart().equals(Constants.ONE)){
- shopcartMapper.deleteById(payDetailRequest.getShopCartId());
- }
- }
-
- //璁㈠崟鏀粯鐜伴噾閲戦
- goodsorder.setPrice((sumPrice.subtract(orderPayRequest.getDeductionBalance())));
- MemberCoupon memberCoupon = new MemberCoupon();
- if(!Objects.isNull(orderPayRequest.getCouponId())){
- memberCoupon = memberCouponMapper.selectById(orderPayRequest.getCouponId());
- if(Objects.isNull(memberCoupon)){
- throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌浼樻儬鍒镐俊鎭紒");
- }
- if(sumPrice.compareTo(memberCoupon.getLimitPrice())<Constants.ZERO){
- throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"璁㈠崟閲戦灏忎簬浼樻儬鍒告�婚噾棰濓紝鏃犳硶浣跨敤锛�");
- }
- if(memberCoupon.getStatus().equals(Constants.ONE)){
- throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"浼樻儬鍒稿凡浣跨敤锛�");
- }
- sumPrice = sumPrice.subtract(memberCoupon.getPrice());
- goodsorder.setCouponId(orderPayRequest.getCouponId());
- goodsorder.setCouponPrice(memberCoupon.getPrice());
- }
-
- goodsorder.setCode(getNextInCode());
- if(!Objects.isNull(memberCoupon)){
- memberCoupon.setStatus(Constants.ONE);
- memberCouponMapper.updateById(memberCoupon);
- }
- //鍜栬眴鍟嗗煄璁㈠崟 鍗曠嫭澶勭悊 鎵e噺绉垎 娣诲姞绉垎鍙樺姩璁板綍
- if(orderPayRequest.getOrderType().equals(Constants.ONE)){
- if(member.getIntegral().compareTo(sumPrice)<=Constants.ZERO){
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍜栬眴涓嶈冻,鏃犳硶鍏戞崲锛�");
- }
- goodsorder.setStatus(Constants.OrderStatus.PAY_DONE.getKey());
- goodsorder.setPayStatus(Constants.ZERO);
- goodsorder.setPayDate(new Date());
- goodsorderMapper.insert(goodsorder);
- //鏇存柊鐢ㄦ埛绉垎
- memberMapper.subtractIntegral(member.getId(),sumPrice);
- PayResponse payResponse = new PayResponse();
- payResponse.setOrderId(goodsorder.getId());
- return payResponse;
- }
- goodsorder.setIntegral(orderPayRequest.getDeductionBalance());
- 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 totalWxMoney = new BigDecimal(0);
- BigDecimal totalIntegral = new BigDecimal(0);
- for (int i =0;i< goodsOrderDetailList.size();i++) {
- GoodsorderDetail goodsOrderDetail= goodsOrderDetailList.get(i);
- goodsOrderDetail.setOrderId(goodsorder.getId());
- BigDecimal wxMoney ;
- BigDecimal integral;
- if(i!=0 && i == goodsOrderDetailList.size() -1){
- //澶勭悊鍥犱负鍥涜垗浜斿叆閫犳垚鐨勫彲閫�閲戦鎹熷け
- wxMoney = Constants.formatBigdecimal(goodsorder.getPrice()).subtract(totalWxMoney);
- integral = Constants.formatBigdecimal(goodsorder.getIntegral()).subtract(totalIntegral);;
- }else{
- //褰撳墠鏄庣粏瀹為檯浠锋牸
- BigDecimal detialTotal = Constants.formatBigdecimal(goodsOrderDetail.getPrice()).multiply(new BigDecimal(Constants.formatIntegerNum(goodsOrderDetail.getGoodsNum())));
- //鎶樼畻浼樻儬鍒稿悗鏀粯浠锋牸锛堝寘鍚幇閲戝拰浣欓閮ㄥ垎锛�
- BigDecimal actDetialTotal = detialTotal.subtract(detialTotal.multiply(rate));
- //鎸夌幇閲戝拰绉垎鏀粯姣斾緥锛屾姌绠楁瘡涓槑缁嗙幇閲戝拰绉垎鏀粯鐨勬暟閲�
- BigDecimal rate1 = detialTotal .divide(total,4,BigDecimal.ROUND_HALF_UP);
- //鍙��鐜伴噾閲戦
- wxMoney = Constants.formatBigdecimal(goodsorder.getPrice()).multiply(rate1);
- //鍓╀笅鐨勬槸浣欓鎶垫墸
- integral =actDetialTotal.subtract(wxMoney);
- totalWxMoney = totalWxMoney.add(wxMoney);//绱
- totalIntegral= totalIntegral.add(integral);//绱
- }
- goodsOrderDetail.setMoney(wxMoney);
- goodsOrderDetail.setIntegral(integral);
- goodsorderDetailMapper.insert(goodsOrderDetail);
- }
- //濡傛灉鎶垫墸閲戦澶т簬 0 鍒欒繘琛屼綑棰濅笟鍔″鐞�
- if(orderPayRequest.getDeductionBalance().compareTo(BigDecimal.ZERO)>Constants.ZERO){
- //鎶垫墸閲戦灏忎簬浼氬憳鍓╀綑浣欓
- if(orderPayRequest.getDeductionBalance().compareTo(member.getIntegral())<=Constants.ZERO){
- //鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
- DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
- dealIntegralRequest.setIntegralNum(orderPayRequest.getDeductionBalance());
- 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);
- //鍙戦�佸井淇″皬绋嬪簭璁㈤槄娑堟伅
- SendWxMessage.integralChangeNotice(member,orderPayRequest.getDeductionBalance());
- //浣欓鍏ㄩ儴鎶垫墸
- if(goodsorder.getPrice().compareTo(BigDecimal.ZERO)==Constants.ZERO){
- goodsorder.setStatus(Constants.OrderStatus.PAY_DONE.getKey());
- goodsorder.setPayStatus(Constants.ONE);
- goodsorder.setPayDate(new Date());
- goodsorderMapper.updateById(goodsorder);
- PayResponse payResponse = new PayResponse();
- payResponse.setOrderId(goodsorder.getId());
- return payResponse;
- }
- }else{
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浣欓涓嶈冻锛屾棤娉曡繘琛屾敮浠橈紝褰撳墠鍓╀綑浣欓锛氥��"+member.getIntegral()+"銆戯紒");
- }
- }
- if(goodsorder.getPrice().compareTo(orderPayRequest.getTitlePrice())!=Constants.ZERO){
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍟嗗搧浠锋牸鍙戠敓鍙樺寲锛岃鍒锋柊鍚庨噸鏂版敮浠橈紒");
- }
- return this.wxPay(goodsorder,member);
- }
-
-
-
@Override
@Transactional(rollbackFor = {Exception.class,BusinessException.class})
public PayResponse orderPay(ShopOrderPayRequest orderPayRequest,MemberCouponServiceImpl memberCouponService){
+ String lockKey = GOODS_ORDER_CREATE_LOCK + orderPayRequest.getMemberId();
+ //鍒ゆ柇鍓嶇鏄惁鍦ㄥ悓涓�椤甸潰鍒涘缓浜嗕袱娆¤鍗�
+ if (redisTemplate.hasKey(lockKey)) {
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"姝e湪鍒涘缓璁㈠崟锛岃鍕块噸澶嶈皟鐢紒");
+ } else {
+ redisTemplate.opsForValue().set(lockKey, "", 5, TimeUnit.SECONDS);
+ }
Member member = memberMapper.selectById(orderPayRequest.getMemberId());
Goodsorder goodsorder = new Goodsorder();
@@ -903,6 +753,8 @@
goodsorder.setMemberId(member.getId());
goodsorder.setType(Constants.ZERO);
goodsorder.setStatus(Constants.ZERO);
+ goodsorder.setReceiveType(orderPayRequest.getReceiveType());
+ goodsorder.setCouponPrice(BigDecimal.ZERO);
Shop shop = null;
if(Constants.equalsInteger(orderPayRequest.getReceiveType(),Constants.ZERO)){
//鏌ヨ鏀惰揣鍦板潃
@@ -940,6 +792,8 @@
}
goodsorder.setPickUpShopId(shop.getId());
goodsorder.setDistributionShopId(shop.getId());
+ goodsorder.setLinkname(member.getName());
+ goodsorder.setLinkphone(member.getPhone());
if(Objects.isNull(member.getBindShopId())){
member.setBindShopId(shop.getId());
member.setBindShopDate(new Date());
@@ -958,6 +812,7 @@
payConfirmRequest.setAddressId(orderPayRequest.getAddressId());
payConfirmRequest.setMemberId(member.getId());
payConfirmRequest.setCouponId(orderPayRequest.getCouponId());
+ payConfirmRequest.setUseIntegral(orderPayRequest.getUseIntegral());
//閫氳繃鏀粯纭鎺ュ彛鑾峰彇鐢熸垚鏀粯淇℃伅
OrderPayConfirmResponse orderPayConfirmResponse = this.orderPayConfirm(payConfirmRequest,memberCouponService);
if(Objects.isNull(orderPayConfirmResponse)){
@@ -965,10 +820,11 @@
}
goodsorder.setPrice(orderPayConfirmResponse.getPayAmount());
goodsorder.setTotalPrice(orderPayConfirmResponse.getAmount());
- goodsorder.setUseIntegral(orderPayConfirmResponse.getDeductIntegral());
- goodsorder.setIntegral(orderPayConfirmResponse.getIntegralAmount());
+ goodsorder.setUseIntegral(Constants.equalsInteger(orderPayRequest.getUseIntegral(),Constants.ONE)?orderPayConfirmResponse.getDeductIntegral():BigDecimal.ZERO);
+ goodsorder.setIntegral(Constants.equalsInteger(orderPayRequest.getUseIntegral(),Constants.ONE)?orderPayConfirmResponse.getIntegralAmount():BigDecimal.ZERO);
goodsorder.setMailPrice(orderPayConfirmResponse.getMailAmount());
goodsorder.setPayMethod(goodsorder.getPrice().compareTo(BigDecimal.ZERO)>Constants.ZERO?Constants.ZERO:Constants.ONE);
+ goodsorder.setGoodsNum(orderPayRequest.getPayDetailRequestList().stream().mapToInt(PayDetailRequest::getGoodsNum).sum());
if(Objects.nonNull(orderPayConfirmResponse.getMemberCoupon())){
sumPrice = sumPrice.subtract(orderPayConfirmResponse.getMemberCoupon().getPrice());
goodsorder.setCouponId(orderPayConfirmResponse.getMemberCoupon().getId());
@@ -987,17 +843,18 @@
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏃犳槑缁嗘暟鎹�,璇锋鏌ラ�夋嫨鏁版嵁锛�");
}
List<GoodsorderDetail> goodsOrderDetailList = new ArrayList<>();
+ BigDecimal shopSettlement = BigDecimal.ZERO;
for (OrderGoodsCalculateResponse payDetailRequest:goodsCalculateList) {
//鏌ヨ鍟嗗搧
GoodsSku goodsSku = goodsSkuMapper.selectById(payDetailRequest.getSkuId());
- if(Objects.isNull(goodsSku)){
+ if(Objects.isNull(goodsSku)||!Constants.equalsInteger(goodsSku.getIsdeleted(),Constants.ZERO)){
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)){
+ if(!Constants.equalsInteger(goods.getStatus(),Constants.ZERO)||!Constants.equalsInteger(goods.getIsdeleted(),Constants.ZERO)){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪鍟嗗搧宸插垹闄ゆ垨宸蹭笅鏋讹紝鏃犳硶涓嬪崟");
}
if(goodsSku.getStock().compareTo(new BigDecimal(Constants.formatIntegerNum(payDetailRequest.getGoodsNum())))<Constants.ZERO){
@@ -1019,6 +876,7 @@
goodsOrderDetail.setCouponDeduct(payDetailRequest.getCouponDeductCash());
goodsOrderDetail.setIntegralDeduct(payDetailRequest.getIntegralDeductCash());
goodsOrderDetail.setOrderId(goodsorder.getId());
+ goodsOrderDetail.setGoodsId(goodsSku.getGoodsId());
//鍒ゆ柇闂ㄥ簵鏄惁璁剧疆鍟嗗搧鐨勪环鏍间俊鎭�
if(Objects.nonNull(goodsorder.getDistributionShopId())){
@@ -1032,7 +890,6 @@
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());
@@ -1043,8 +900,11 @@
if(shop.getSaleType().equals(Constants.ONE)){
goodsOrderDetail.setShopSettlement(goodsOrderDetail.getPrice().subtract(shopDeductAmount));
}else {
+ //骞冲彴閾鸿揣
goodsOrderDetail.setShopSettlement(
- shopGoodsRelation.getPrice().subtract(shopGoodsRelation.getPrice()).subtract(shopDeductAmount));
+ goodsOrderDetail.getPrice()
+ .subtract(shopGoodsRelation.getPrice())
+ .subtract(shopDeductAmount));
}
if(goodsOrderDetail.getShopSettlement().compareTo(BigDecimal.ZERO)<Constants.ZERO){
goodsOrderDetail.setShopSettlement(BigDecimal.ZERO);
@@ -1052,12 +912,16 @@
}else{
goodsOrderDetail.setShopSettlement(BigDecimal.ZERO);
}
+ shopSettlement = shopSettlement.add(goodsOrderDetail.getShopSettlement());
goodsOrderDetailList.add(goodsOrderDetail);
//鍒犻櫎璐墿杞﹀晢鍝�
shopcartMapper.delete(new QueryWrapper<Shopcart>().lambda()
.eq(Shopcart::getMemberId,member.getId())
.eq(Shopcart::getGoodsSkuId,goodsOrderDetail.getGoodsSkuId())
);
+ }
+ if(CollectionUtils.isNotEmpty(goodsOrderDetailList)){
+ goodsorderDetailMapper.insert(goodsOrderDetailList);
}
//绉垎鍙樺姩璁板綍
if(goodsorder.getUseIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
@@ -1068,20 +932,24 @@
dealIntegralRequest.setMemberId(member.getId());
dealIntegralRequest.setObjId(goodsorder.getId());
dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
- dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER);
- integralService.dealIntegral(dealIntegralRequest);
+ dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.MEMBER_ORDER);
+ integralService.dealIntegral(dealIntegralRequest,null);
}
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);
+ PayResponse payResponse = this.wxPay(goodsorder,member);
+ payResponse.setLockKey(lockKey);
+ return payResponse;
}
//鏃犵幇閲戞敮浠�
goodsorderMapper.update(null,new UpdateWrapper<Goodsorder>().lambda()
.set(Goodsorder::getStatus,Constants.ONE)
+ .set(Goodsorder::getShopSettlement,shopSettlement)
.set(Goodsorder::getPayStatus,Constants.OrderStatus.PAY_DONE.getKey())
.set(Goodsorder::getPayDate,DateUtil.getCurrDateTime())
.set(Goodsorder::getId,goodsorder.getId())
@@ -1089,6 +957,13 @@
PayResponse payResponse = new PayResponse();
payResponse.setOrderId(goodsorder.getId());
payResponse.setPayType(Constants.ONE);
+ payResponse.setLockKey(lockKey);
+// //鍙戦�侀�氱煡
+// if(Objects.nonNull(goodsorder.getPickUpShopId())){
+// //鍙戦�佺珯鍐呬俊 - 缁忛攢鍟�
+// noticeService.orderPayNotice(goodsorder.getPickUpShopId(),goodsorder.getId(),goodsorder.getReceiveType());
+// }
+
return payResponse;
}
@@ -1162,7 +1037,7 @@
request.setBody("骞冲彴鍟嗗煄");
request.setAttach("shopGoods");
request.setOutTradeNo(goodsorder.getCode().toString());
- request.setTotalFee(BaseWxPayRequest.yuanToFen(goodsorder.getPrice().toString()));
+ request.setTotalFee(1);//BaseWxPayRequest.yuanToFen(goodsorder.getPrice().toString()));
// request.setTotalFee(2);
request.setTimeStart(DateUtil.DateToString(new Date(), "yyyyMMddHHmmss"));
request.setSpbillCreateIp(this.getIpAddr());
@@ -1196,14 +1071,31 @@
String fullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode();
page.getRecords().forEach(i->{
- List<MemberOrderDetailResponse> memberOrderDetailResponseList = goodsorderDetailMapper.getDetailList(i.getOrderId());
- memberOrderDetailResponseList.forEach(j->{
- j.setImgUrl(fullUrl + j.getImgUrl());
+ List<GoodsorderDetail> goodsorderDetailList=goodsorderDetailJoinMapper.selectList(new QueryWrapper<GoodsorderDetail>().lambda()
+ .eq(GoodsorderDetail::getOrderId,i.getOrderId()));
+ goodsorderDetailList.stream().forEach(s ->{
+ if(StringUtils.isNotBlank(s.getImgurl())){
+ s.setImgurl(fullUrl + s.getImgurl());
+ }
});
- i.setMemberOrderDetailResponseList(memberOrderDetailResponseList);
+ i.setGoodsorderDetailList(goodsorderDetailList);
});
return page;
}
+
+
+
+ @Override
+ public MemberOrderResponse getGoodsOrderDetailByCode(String exchangeCode){
+ Goodsorder goodsorder = goodsorderMapper.selectOne(new QueryWrapper<Goodsorder>().lambda().eq(Goodsorder::getExchangeCode,exchangeCode)
+ .last(" limit 1")
+ );
+ if(Objects.isNull(goodsorder)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌璁㈠崟淇℃伅");
+ }
+ return this.getGoodsOrderDetail(goodsorder.getId());
+ }
+
/**
@@ -1218,23 +1110,34 @@
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌璁㈠崟淇℃伅");
}
if(memberOrderResponse.getOrderStatus().equals(Constants.OrderStatus.WAIT_PAY.getKey())){
- memberOrderResponse.setCountdown(memberOrderResponse.getCancelDate().getTime()-System.currentTimeMillis());
+ memberOrderResponse.setCountdown(memberOrderResponse.getCancelOptDate().getTime()>System.currentTimeMillis()?memberOrderResponse.getCancelOptDate().getTime()-System.currentTimeMillis():Constants.ZERO);
}
- List<MemberOrderDetailResponse> memberOrderDetailResponseList = goodsorderDetailMapper.getDetailList(memberOrderResponse.getOrderId());
String fullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode();
- memberOrderDetailResponseList.forEach(j->{
- j.setImgUrl(fullUrl + j.getImgUrl());
+
+
+ List<GoodsorderDetail> goodsorderDetailList=goodsorderDetailJoinMapper.selectList(new QueryWrapper<GoodsorderDetail>().lambda()
+ .eq(GoodsorderDetail::getOrderId,memberOrderResponse.getOrderId()));
+ goodsorderDetailList.stream().forEach(s ->{
+ if(StringUtils.isNotBlank(s.getImgurl())){
+ s.setImgurl(fullUrl + s.getImgurl());
+ }
});
- memberOrderResponse.setMemberOrderDetailResponseList(memberOrderDetailResponseList);
- if(Constants.equalsInteger(memberOrderResponse.getReceiveType(),Constants.ONE)){
- memberOrderResponse.setShopInfo(shopMapper.selectById(memberOrderResponse.getShopId()));
+ memberOrderResponse.setGoodsorderDetailList(goodsorderDetailList);
+ Shop shop = shopMapper.selectById(memberOrderResponse.getShopId());
+ if(Objects.nonNull(shop)){
+ shop.setPassword(null);
+ shop.setUsername(null);
+ shop.setAreas(AreasServiceImpl.getAddressByAreaId(shop.getAreaId()));
+ memberOrderResponse.setShopInfo(shop);
}
Member member = memberMapper.selectById(memberOrderResponse.getMemberId());
if(Objects.nonNull(member)){
String memberfullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode();
- member.setImgFullUrl(memberfullUrl + member.getImgurl());
+ if(StringUtils.isNotBlank(member.getImgurl())){
+ member.setImgFullUrl(memberfullUrl + member.getImgurl());
+ }
memberOrderResponse.setMember(member);
}
return memberOrderResponse;
@@ -1316,8 +1219,8 @@
dealIntegralRequest.setMemberId(goodsorder.getMemberId());
dealIntegralRequest.setObjId(goodsorder.getId());
dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
- dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER_CANCEL);
- integralService.dealIntegral(dealIntegralRequest);
+ dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.MEMBER_ORDER_CANCEL);
+ integralService.dealIntegral(dealIntegralRequest,null);
}
//璁㈠崟淇℃伅鍙栨秷
goodsorder.setStatus(Constants.OrderStatus.CLOSE.getKey());
@@ -1325,6 +1228,10 @@
goodsorder.setCancelInfo(cancelInfo);
goodsorder.setCancelUser(optUserId);
goodsorderMapper.updateById(goodsorder);
+ if(Constants.equalsInteger(goodsorder.getReceiveType(),Constants.ONE)){
+ //閲婃斁鏍搁攢鐮�
+ this.releaseExchangeCode(goodsorder.getExchangeCode());
+ }
String goodsName = "";
List<GoodsorderDetail> goodsorderDetailList = goodsorderDetailMapper.selectList(new QueryWrapper<GoodsorderDetail>().eq("ORDER_ID",goodsorder.getId()));
if(!Objects.isNull(goodsorderDetailList)&&goodsorderDetailList.size()>Constants.ZERO){
@@ -1340,11 +1247,7 @@
}
}
}
-
SendWxMessage.orderCancel(goodsorder,memberMapper.selectById(goodsorder.getMemberId()),goodsName);
-
-
-
//鏌ヨ浼樻儬鍒镐俊鎭褰�
if(!Objects.isNull(goodsorder.getCouponId())){
MemberCoupon memberCoupon = memberCouponMapper.selectById(goodsorder.getCouponId());
@@ -1356,20 +1259,8 @@
}
- @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()) )){
- throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鍙栨秷澶辫触锛氳鍗曠姸鎬佸凡娴佽浆锛�");
- }
+ public void cancel(Goodsorder goodsorder,Integer optUserId,String cancelInfo){
if(Constants.formatBigdecimal(goodsorder.getPrice()).compareTo(BigDecimal.ZERO)>Constants.ZERO
&& Constants.equalsObject(goodsorder.getPayStatus(),Constants.ONE) ){
//寰俊鐜伴噾閫�娆�
@@ -1389,17 +1280,16 @@
fundMapper.insert(fund);
}
//璁㈠崟宸叉敮浠樼姸鎬� 锛� 浣跨敤浜嗙Н鍒� 涓旂Н鍒嗕娇鐢ㄥぇ浜�0
- if(goodsorder.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO
- &&Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.PAY_DONE.getKey())){
+ if(goodsorder.getUseIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
//鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
- dealIntegralRequest.setIntegralNum(goodsorder.getIntegral());
+ dealIntegralRequest.setIntegralNum(goodsorder.getUseIntegral());
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);
+ dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.MEMBER_ORDER_CANCEL);
+ integralService.dealIntegral(dealIntegralRequest,null);
}
//璁㈠崟淇℃伅鍙栨秷
goodsorder.setStatus(Constants.OrderStatus.CLOSE.getKey());
@@ -1407,6 +1297,10 @@
goodsorder.setCancelInfo(StringUtils.isBlank(cancelInfo)?"鐢ㄦ埛涓诲姩鍙栨秷":cancelInfo);
goodsorder.setCancelUser(optUserId);
goodsorderMapper.updateById(goodsorder);
+ if(Constants.equalsInteger(goodsorder.getReceiveType(),Constants.ONE)){
+ //閲婃斁鏍搁攢鐮�
+ this.releaseExchangeCode(goodsorder.getExchangeCode());
+ }
String goodsName = "";
List<GoodsorderDetail> goodsorderDetailList = goodsorderDetailMapper.selectList(new QueryWrapper<GoodsorderDetail>().eq("ORDER_ID",goodsorder.getId()));
if(!Objects.isNull(goodsorderDetailList)&&goodsorderDetailList.size()>Constants.ZERO){
@@ -1423,7 +1317,10 @@
}
}
- //SendWxMessage.orderCancel(goodsorder,memberMapper.selectById(goodsorder.getMemberId()),goodsName);
+ // 鐢ㄦ埛涓诲姩鍙栨秷 鍙戦�佺粡閿�鍟嗙珯鍐呮秷鎭�
+// if(Objects.nonNull(goodsorder.getPickUpShopId())&&StringUtils.isBlank(cancelInfo)){
+// noticeService.orderCancelNotice(goodsorder.getPickUpShopId(),goodsorder.getId(),goodsorder.getCode().toString());
+// }
//鏌ヨ浼樻儬鍒镐俊鎭褰�
if(!Objects.isNull(goodsorder.getCouponId())){
@@ -1433,6 +1330,26 @@
memberCouponMapper.updateById(memberCoupon);
}
}
+ }
+
+
+
+ @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()) )){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鍙栨秷澶辫触锛氳鍗曠姸鎬佸凡娴佽浆锛�");
+ }
+ this.cancel(goodsorder,optUserId,cancelInfo);
+
}
public BigDecimal getDeductAmount(List<PayDetailRequest> requestList){
@@ -1481,6 +1398,7 @@
OrderPayConfirmResponse orderPayConfirmResponse = new OrderPayConfirmResponse();
List<Goods> goodsList = goodsMapper.selectJoinList(Goods.class,
new MPJLambdaWrapper<Goods>()
+ .selectAll(Goods.class)
.selectAs(GoodsSku::getPrice,Goods::getSkuPrice)
.selectAs(GoodsSku::getId,Goods::getSkuId)
.selectAs(GoodsSku::getIntegralRate,Goods::getDeductRata)
@@ -1491,8 +1409,16 @@
if(CollectionUtils.isEmpty(goodsList)){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈尮閰嶅埌鍟嗗搧淇℃伅");
}
- List<OrderGoodsCalculateResponse> goodsCalculateList = ListUtil.copyProperties(goodsList,OrderGoodsCalculateResponse::new);
+ List<OrderGoodsCalculateResponse> goodsCalculateList = ListUtil.copyProperties(goodsList,OrderGoodsCalculateResponse::new);
+ String fullUrl = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
+ systemDictDataBiz.queryByCode(Constants.OSS,Constants.GOODS_FILE).getCode();
+ for (OrderGoodsCalculateResponse orderGoodsCalculateResponse:goodsCalculateList) {
+ orderGoodsCalculateResponse.setSkuImg(StringUtils.isNotBlank(orderGoodsCalculateResponse.getSkuImg())?fullUrl+orderGoodsCalculateResponse.getSkuImg():null);
+ if(Objects.isNull(orderGoodsCalculateResponse.getCouponDeductCash())){
+ orderGoodsCalculateResponse.setCouponDeductCash(BigDecimal.ZERO);
+ }
+ }
//璁㈠崟鎬婚噾棰�
BigDecimal amount = BigDecimal.ZERO;
//浼樻儬鍒告姷鎵i噾棰�
@@ -1519,13 +1445,16 @@
List<MemberCoupon> memberCouponList = memberCouponService.getApplyCoupon(request.getPayDetailRequestList(),request.getMemberId());
if(CollectionUtils.isNotEmpty(memberCouponList)){
orderPayConfirmResponse.setMemberCouponList(memberCouponList);
+ if(Objects.nonNull(request.getCouponId())&&Constants.equalsInteger(request.getCouponId(),-Constants.ONE)&&Objects.nonNull(memberCouponList)){
+ request.setCouponId(memberCouponList.get(Constants.ZERO).getId());
+ }
//濡傛灉閫夋嫨浜嗕紭鎯犲埜锛屽垯鍒ゆ柇閫夋嫨鐨勪紭鎯犲埜鏄惁鏈夋晥
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);
+ memberCoupon = memberCoupons.get(Constants.ZERO);
couponAmount = memberCoupon.getValidAmount();
memberCouponService.calculateCouponRata(memberCoupon,goodsCalculateList,amount);
orderPayConfirmResponse.setMemberCoupon(memberCoupon);
@@ -1538,7 +1467,7 @@
//鏌ヨ鐢ㄦ埛鎬荤Н鍒�
Member member = memberMapper.selectById(request.getMemberId());
//鏈�浣庡彲鐢ㄥ惎鐢ㄧН鍒�
- BigDecimal minimumIntegral = new BigDecimal(systemDictDataBiz.queryByCode(Constants.SHOP_CONFIG,Constants.MINIMUM_AVAILABLE_INTEGRAL).getCode());
+ BigDecimal minimumIntegral = new BigDecimal(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET,Constants.INTERALSET_MININTEGRALPRICELIMIT).getCode());
//绉垎鍙娇鐢ㄧ姸鎬� 澶т簬0 澶т簬鏈�灏忓彲鐢ㄩ厤缃Н鍒嗗��
orderPayConfirmResponse.setIntegralStatus(
(member.getIntegral().compareTo(BigDecimal.ZERO)<=Constants.ZERO||
@@ -1549,6 +1478,8 @@
orderPayConfirmResponse.setIntegralAmount(integralAmount);
if(Constants.equalsInteger(orderPayConfirmResponse.getIntegralStatus(),Constants.ZERO)){
integralAmount = this.calculateIntegralRata(orderPayConfirmResponse,goodsCalculateList,member.getIntegral());
+ }else{
+ orderPayConfirmResponse.setSurplusIntegral(member.getIntegral());
}
//閭垂閲戦
@@ -1562,7 +1493,7 @@
}
Areas areas = areasMapper.selectOne(new QueryWrapper<Areas>().lambda()
.eq(Areas::getIsdeleted,Constants.ZERO)
- .eq(Areas::getId,StringUtils.leftPad(addr.getAreaId().toString().substring(0,2),6,"0"))
+ .eq(Areas::getId,StringUtils.rightPad(addr.getAreaId().toString().substring(0,2),6,"0"))
.isNotNull(Areas::getYunFeeId)
.last(" limit 1 ")
);
@@ -1579,7 +1510,7 @@
BigDecimal totalWeight = goodsCalculateList.stream().map(i->
i.getWeight().multiply(new BigDecimal(i.getGoodsNum().toString()))
).reduce(BigDecimal.ZERO,BigDecimal::add);
- if(totalWeight.compareTo(mailConfigResponse.getWeight0())>=Constants.ZERO){
+ if(totalWeight.compareTo(mailConfigResponse.getWeight0())<=Constants.ZERO){
mailAmount = mailConfigResponse.getFee0();
}else{
//瓒呴噸閲嶉噺
@@ -1632,12 +1563,12 @@
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);
+ integralBack = payAmount.multiply(platformConfigDTO.getReturnMemberIntegral()).divide(BigDecimal.ONE,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);
+ integralBack = payAmount.multiply(platformConfigDTO.getReturnShopIntegral()).divide(BigDecimal.ONE,0,BigDecimal.ROUND_DOWN);
}
}
return integralBack;
@@ -1653,20 +1584,22 @@
*/
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 maxDeductionCash = goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(Objects.isNull(i.getCouponDeductCash())?BigDecimal.ZERO:i.getCouponDeductCash())
+ .multiply(i.getDeductRata()).divide(new BigDecimal("100"),2,RoundingMode.DOWN)).reduce(BigDecimal.ZERO,BigDecimal::add);
+ //绉垎-鐜伴噾鍏戞崲姣斾緥锛圶XX绉垎鎶垫墸1鍏冿級
+ BigDecimal cashToIntegralRata = new BigDecimal(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET,Constants.INTERALSET_DEDUCTINTEGRALLIMIT).getCode());
//褰撳墠閫夋嫨鍟嗗搧鎶垫墸闇�瑕佷娇鐢ㄧ殑绉垎
- BigDecimal maxDeductionIntegral = maxDeductionCash.multiply(cashToIntegralRata).multiply(new BigDecimal("100"));
+ BigDecimal maxDeductionIntegral = maxDeductionCash.multiply(cashToIntegralRata);
//鑾峰彇褰撳墠闇�瑕佹敮浠樼殑鐜伴噾鎬婚
- BigDecimal payCash = goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(i.getCouponDeductCash())).reduce(BigDecimal.ZERO,BigDecimal::add);
+ BigDecimal payCash = goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(Objects.isNull(i.getCouponDeductCash())?BigDecimal.ZERO: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());
+ //鑾峰彇鏈�澶у彲鎶垫墸閲戦
+ BigDecimal deductionCash = goodsCalculateList.get(j).getSkuAmount().subtract(goodsCalculateList.get(j).getCouponDeductCash())
+ .multiply(goodsCalculateList.get(j).getDeductRata()).divide(new BigDecimal("100"),2,RoundingMode.DOWN);
goodsCalculateList.get(j).setIntegralMaxDeductCash(deductionCash);
//濡傛灉鍓╀綑绉垎澶т簬鍙互浣跨敤绉垎 鍒欑洿鎺ユ弧棰濊绠� 鍙嶄箣 鍓╀綑绉垎涓嶈兘婊¤冻鍏ㄩ儴鎶垫墸 鍗曠嫭璁$畻姣忎釜鍟嗗搧鍗犳瘮
if(totalIntegral.compareTo(maxDeductionIntegral)<Constants.ZERO){
@@ -1678,7 +1611,7 @@
//鍓╀綑绉垎鍊�
orderPayConfirmResponse.setSurplusIntegral(totalIntegral);
//瀹為檯鎶垫墸浣跨敤绉垎
- orderPayConfirmResponse.setDeductIntegral(totalIntegral.compareTo(maxDeductionCash)<=Constants.ZERO?totalIntegral:maxDeductionIntegral);
+ orderPayConfirmResponse.setDeductIntegral(totalIntegral.compareTo(maxDeductionIntegral)<=Constants.ZERO?totalIntegral:maxDeductionIntegral);
return realDeductionCash;
}
@@ -1746,6 +1679,7 @@
* @param memberId
*/
@Override
+ @Transactional(rollbackFor = {Exception.class,BusinessException.class})
public void affirmOrder(Integer orderId,Integer memberId){
Goodsorder goodsorder = goodsorderMapper.selectById(orderId);
if(!goodsorder.getMemberId().equals(memberId)){
@@ -1768,10 +1702,11 @@
this.orderAddShopIntegral(goodsorder);
//涓嬪崟瀹屾垚 鏍规嵁淇℃伅纭鏄惁闇�瑕佽禒閫侀個璇疯�呬紭鎯犲埜
this.orderDoneRewardInviteCoupon(goodsorder);
- //娑堣垂鑰呯‘璁ゆ敹璐�
+ //璧犻�佹秷璐硅�呬笅鍗曠Н鍒�
this.orderAddMemberIntegral(goodsorder);
//缁忛攢鍟� 缁撶畻閲戦
this.orderAddShopCash(goodsorder);
+
}
@@ -1808,7 +1743,11 @@
String couponNames = "";
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(shareCouponRewardList)){
List<MemberCoupon> memberCouponList = new ArrayList<>();
+ List<CouponNoticeRequest> requestList = new ArrayList<>();
for (JSONObject jsonObject:shareCouponRewardList) {
+ if(!jsonObject.containsKey("couponId")||!jsonObject.containsKey("num")){
+ continue;
+ }
Integer couponId = jsonObject.getInteger("couponId");
Integer num = jsonObject.getInteger("num");
Coupon coupon = couponMapper.selectById(couponId);
@@ -1817,14 +1756,32 @@
}
MemberCoupon memberCoupon = MemberCoupon.couponToBean(coupon,inviteMember,new Date(),Constants.ONE,null);
for (int i = 0; i < num; i++) {
+ //婊″噺鍗蜂笉浼氱敓鎴恗axPrice 闇�瑕佹牴鎹紭鎯犲埜鍑忓皯閲戦璁剧疆
+ if(Constants.equalsInteger(coupon.getCouponType(),Constants.ZERO)){
+ memberCoupon.setMaxPrice(coupon.getPrice());
+ }
memberCouponList.add(memberCoupon);
}
couponIds = couponIds + (StringUtils.isBlank(couponIds)? ",":"" )+ couponId ;
couponNames = couponNames + (StringUtils.isBlank(couponNames)? ",":"" )+ coupon.getName() ;
+
+ CouponNoticeRequest couponNoticeRequest = new CouponNoticeRequest();
+ couponNoticeRequest.setMemberCoupon(memberCoupon);
+ couponNoticeRequest.setNum(num);
+ requestList.add(couponNoticeRequest);
+
+ Notice notice = Notice.getNotice(Constants.NoticeType.COUPON,
+ member.getId(),null);
+ notice.setContent(notice.getContent().replace("{param}",Constants.getCouponInfo(memberCoupon,num)));
+ noticeMapper.insert(notice);
}
if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberCouponList)){
memberCouponJoinMapper.insert(memberCouponList);
}
+// if(CollectionUtils.isNotEmpty(requestList)){
+// //鍙戦�佺珯鍐呬俊
+// noticeService.couponNotice(inviteMember.getId(),requestList);
+// }
}
inviteRecordMapper.update(new UpdateWrapper<InviteRecord>().lambda()
.set(InviteRecord::getFirstOrderStatus,Constants.ONE)
@@ -1844,10 +1801,12 @@
* @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 "));
+ @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+ public void orderWriteOff(Integer orderId,Integer memberId){
+ 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);
}
@@ -1861,12 +1820,14 @@
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()+"]闈炴偍缁戝畾鐨勭粡閿�鍟嗭紝鏃犳硶杩涜璇ユ搷浣滐紒");
- }
+// 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);
+ //閲婃斁鏍搁攢鐮�
+ this.releaseExchangeCode(goodsorder.getExchangeCode());
//瀛樺湪鐜伴噾鏀粯 璧犻�� 绉垎
if(Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ZERO)){
//璧犻�佹秷璐硅�呯Н鍒�
@@ -1878,6 +1839,15 @@
//缁忛攢鍟� 缁撶畻閲戦
this.orderAddShopCash(goodsorder);
}
+ //鍙戦�佹牳閿�閫氱煡
+ Notice notice = Notice.getNotice(
+ Constants.NoticeType.NOTICE_ORDER_WRITE_OFF,
+ goodsorder.getMemberId(),
+ goodsorder.getId()
+ );
+ notice.setContent(notice.getContent().replace("{param}",goodsorder.getCode().toString()));
+ noticeMapper.insert(notice);
+
}
@@ -1890,7 +1860,7 @@
return;
}
BigDecimal backIntegral = getBackIntegral(goodsorder.getPrice(),Constants.ONE);
- if (backIntegral.compareTo(BigDecimal.ZERO) >= 0) {
+ if (backIntegral.compareTo(BigDecimal.ZERO) > 0) {
//鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
dealIntegralRequest.setIntegralNum(backIntegral);
@@ -1898,8 +1868,12 @@
dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
dealIntegralRequest.setObjId(goodsorder.getId());
dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
- dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.ORDER_DONATE);
- integralService.dealShopIntegral(dealIntegralRequest);
+ dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER);
+ Member member = memberMapper.selectById(goodsorder.getMemberId());
+ if(Objects.nonNull(member)){
+ dealIntegralRequest.setParam1(member.getNickname());
+ }
+ integralService.dealShopIntegral(dealIntegralRequest,null);
}
}
@@ -1935,16 +1909,16 @@
return;
}
BigDecimal backIntegral = getBackIntegral(goodsorder.getPrice(),Constants.ZERO);
- if (backIntegral.compareTo(BigDecimal.ZERO) >= 0) {
+ if (backIntegral.compareTo(BigDecimal.ZERO) > 0) {
//鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
dealIntegralRequest.setIntegralNum(backIntegral);
dealIntegralRequest.setDealType(Constants.ZERO);
- dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
+ dealIntegralRequest.setMemberId(goodsorder.getMemberId());
dealIntegralRequest.setObjId(goodsorder.getId());
dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.ORDER_DONATE);
- integralService.dealIntegral(dealIntegralRequest);
+ integralService.dealIntegral(dealIntegralRequest,null);
}
}
@@ -1997,7 +1971,6 @@
if(!goodsorder.getStatus().equals(Constants.OrderStatus.DONE.getKey())){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氳鍗曟湭瀹屾垚锛屾棤娉曢��娆撅紒");
}
-
}
@@ -2233,6 +2206,13 @@
.eq(Collect::getMemberId,member.getId())
)
);
+ homeInfoResponse.setUnRead(
+ noticeMapper.selectCount(new QueryWrapper<Notice>().lambda()
+ .eq(Notice::getIsdeleted,Constants.ZERO)
+ .eq(Notice::getMemberId,member.getId())
+ .eq(Notice::getStatus,Constants.ZERO)
+ )>=Constants.ZERO?Constants.ZERO:Constants.ONE
+ );
return homeInfoResponse;
}
@@ -2247,12 +2227,13 @@
Utils.MP.blankToNull(pageWrap.getModel());
ShopOrderRequest model = pageWrap.getModel();
queryWrapper.selectAll(Goodsorder.class);
-// queryWrapper.selectAs(Member::getNickname,Goodsorder::getNickName);
-// queryWrapper.selectAs(Member::getPhone,Goodsorder::getPhone);
-// queryWrapper.selectAs(Member::getImgurl,Goodsorder::getImgurl);
+ queryWrapper.selectAs(Shop::getName,Goodsorder::getShopName);
+ queryWrapper.selectAs(Shop::getPhone,Goodsorder::getShopPhone);
+ queryWrapper.leftJoin(Shop.class,Shop::getId,Goodsorder::getDistributionShopId);
queryWrapper.eq(Goodsorder::getIsdeleted,Constants.ZERO);
queryWrapper.eq(Objects.nonNull(model.getStatus()),Goodsorder::getStatus,model.getStatus());
- queryWrapper.eq(Objects.nonNull(model.getShopId()),Goodsorder::getDistributionShopId,model.getShopId());
+ queryWrapper.eq(Objects.nonNull(model.getShopId())&&Constants.equalsInteger(model.getUserType(),Constants.ONE),Goodsorder::getDistributionShopId,model.getShopId());
+ queryWrapper.eq(Objects.nonNull(model.getShopId())&&Constants.equalsInteger(model.getUserType(),Constants.ZERO),Goodsorder::getMemberId,model.getShopId());
queryWrapper.orderByDesc(Goodsorder::getCreateDate);
IPage<Goodsorder> result = goodsorderJoinMapper.selectJoinPage(page, Goodsorder.class, queryWrapper);
@@ -2265,8 +2246,8 @@
List<GoodsorderDetail> goodsorderDetailList=goodsorderDetailJoinMapper.selectList(new QueryWrapper<GoodsorderDetail>().lambda()
.eq(GoodsorderDetail::getOrderId,goodsorder.getId()));
goodsorderDetailList.stream().forEach(s ->{
- if(StringUtils.isBlank(s.getImgurl())){
- s.setImgurl(path + s.getGoodsImgurl());
+ if(StringUtils.isNotBlank(s.getImgurl())){
+ s.setImgurl(path + s.getImgurl());
}
});
goodsorder.setGoodsorderDetailList(goodsorderDetailList);
@@ -2276,4 +2257,84 @@
+// public IPage<Shop> getGoodsorderPageForShop(PageWrap pageWrap,String shopId) {
+// IPage<Shop> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+//
+// IPage<Goodsorder> goodsorderPage = goodsorderJoinMapper.selectJoinPage(page,Goodsorder.class,
+// new MPJLambdaWrapper<Goodsorder>()
+// .selectAll(Goodsorder.class)
+// .selectAs(Member::getPhone,Goodsorder::getPhone)
+// .selectAs(Member::getNickname,Goodsorder::getNickName)
+// .leftJoin(Member.class,Member::getId,Goodsorder::getMemberId)
+// .eq(Goodsorder::getIsdeleted,Constants.ZERO)
+// .eq(Goodsorder::getDistributionShopId,shopId)
+// .eq(Goodsorder::getStatus,Constants.OrderStatus.PAY_DONE.getKey())
+// .eq(Goodsorder::getReceiveType,Constants.ONE)
+// .orderByDesc(Goodsorder::getId)
+// );
+//
+//
+//
+// }
+
+
+
+
+ @Override
+ public String createExchangeCode(){
+ List<Goodsorder> goodsorderList = goodsorderMapper.selectList(new QueryWrapper<Goodsorder>().lambda()
+ .eq(Goodsorder::getIsdeleted,Constants.ZERO)
+ .eq(Goodsorder::getReceiveType,Constants.ONE)
+ .in(Goodsorder::getStatus,Constants.OrderStatus.WAIT_RECEIVE.getKey(),
+ Constants.OrderStatus.WAIT_PAY.getKey(),
+ Constants.OrderStatus.PAY_DONE.getKey())
+ );
+ String exchangeCode = UniqueVerificationCodeGenerator.generateNumericCode();
+ if(CollectionUtils.isNotEmpty(goodsorderList)){
+ Boolean flag = true;
+ while (flag){
+ String finalExchangeCode = exchangeCode;
+ flag = goodsorderList.stream().filter(i->i.getExchangeCode().equals(finalExchangeCode)).count()>0L?true:false;
+ if(flag){
+ exchangeCode = UniqueVerificationCodeGenerator.generateNumericCode();
+ }
+ }
+ }
+ RedisUtil.addObject(redisTemplate,Constants.RedisKeys.EXCHANGE_KEY+exchangeCode,exchangeCode);
+ return exchangeCode;
+ }
+
+
+ /**
+ * 閲婃斁鏍搁攢鐮�
+ * @param code
+ */
+ public void releaseExchangeCode(String code){
+ if(StringUtils.isNotBlank(code)){
+ RedisUtil.deleteObject(redisTemplate,Constants.RedisKeys.EXCHANGE_KEY+code);
+ }
+ }
+
+
+ /**
+ * 璁㈠崟鏈敮浠樿秴鏃惰嚜鍔ㄥ彇娑�
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void autoCancelOrder(){
+ List<Goodsorder> goodsorderList = goodsorderMapper.selectList(new QueryWrapper<Goodsorder>().lambda()
+ .eq(Goodsorder::getIsdeleted, Constants.ZERO)
+ .eq(Goodsorder::getStatus, Constants.OrderStatus.WAIT_PAY.getKey())
+ .ge(Goodsorder::getCreateDate, "DATE_SUB(NOW(), INTERVAL 15 MINUTE)")
+ );
+ if(CollectionUtils.isNotEmpty(goodsorderList)){
+ for (Goodsorder goodsorder:goodsorderList) {
+ this.cancel(goodsorder,null,"璁㈠崟鏈敮浠樿秴鏃惰嚜鍔ㄥ彇娑�");
+ }
+ }
+
+
+
+ }
+
}
--
Gitblit v1.9.3