| | |
| | | import com.doumee.dao.business.join.GoodsorderJoinMapper; |
| | | import com.doumee.dao.business.join.PlanorderDetailJoinMapper; |
| | | import com.doumee.dao.business.model.*; |
| | | 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.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.web.request.goods.*; |
| | | import com.doumee.dao.web.response.HomeInfoResponse; |
| | | import com.doumee.dao.web.response.MyPageResponse; |
| | | import com.doumee.dao.web.response.goods.*; |
| | |
| | | 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 javax.servlet.http.HttpServletRequest; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.net.InetAddress; |
| | | import java.net.UnknownHostException; |
| | | import java.util.*; |
| | |
| | | |
| | | @Autowired |
| | | private SystemDictDataBiz systemDictDataBiz; |
| | | |
| | | @Autowired |
| | | private SystemDictDataService systemDictDataService; |
| | | |
| | | @Autowired |
| | | private PlanorderDetailJoinMapper planorderDetailJoinMapper; |
| | |
| | | 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(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(),"è¯·éæ©æ£ç¡®çèªæé¨åºï¼"); |
| | | } |
| | | Shop shop = shopMapper.selectById(orderPayRequest.getShopId()); |
| | | shop = shopMapper.selectById(orderPayRequest.getShopId()); |
| | | if(Objects.isNull(shop)){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"è¯·éæ©æ£ç¡®çèªæé¨åºï¼"); |
| | | } |
| | | |
| | | |
| | | //æ ¹æ®éæ©åæ·è¿è¡ä¼åä¸åæ·ä¿¡æ¯ç»å® |
| | | if(Objects.isNull(member.getBindShopId())){ |
| | |
| | | member.setBindShopId(shop.getId()); |
| | | } |
| | | } |
| | | |
| | | //åæ®ç¼å· èªå¢ |
| | | goodsorder.setCode(getNextInCode()); |
| | | //计ç®è®¢åæ»éé¢ |
| | | BigDecimal sumPrice = BigDecimal.ZERO; |
| | | |
| | | //åå¨è®°å½æç» |
| | | OrderPayConfirmResponse orderPayConfirmResponse = this.orderPayConfirm(orderPayRequest.getReceiveType(),orderPayRequest.getPayDetailRequestList(),orderPayRequest.getAddressId(),memberCouponService,member.getId()); |
| | | 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.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())){ |
| | | MemberCoupon memberCoupon = memberCouponMapper.selectById(orderPayConfirmResponse.getMemberCoupon().getId()); |
| | | if(Objects.isNull(memberCoupon)){ |
| | | 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(memberCoupon.getId()); |
| | | 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,memberCoupon.getId()) |
| | | .eq(MemberCoupon::getId,orderPayConfirmResponse.getMemberCoupon().getId()) |
| | | ); |
| | | } |
| | | |
| | | goodsorderMapper.insert(goodsorder); |
| | | List<OrderGoodsCalculateResponse> goodsCalculateList = orderPayConfirmResponse.getGoodsCalculateList(); |
| | | if(CollectionUtils.isEmpty(goodsCalculateList)){ |
| | |
| | | .last(" limit 1 ") |
| | | ); |
| | | if(Objects.isNull(shopGoodsRelation)){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对ä¸èµ·ï¼å
³èç»éåæªç»å®["+goods.getName()+"]ååï¼è¯·è系管çåï¼"); |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对ä¸èµ·ï¼ç»éåæªç»å®["+goods.getName()+"]ååï¼è¯·è系管çåï¼"); |
| | | } |
| | | goodsOrderDetail.setShopSettlement(shopGoodsRelation.getPrice()); |
| | | |
| | | 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); |
| | | //å é¤è´ç©è½¦åå |
| | |
| | | if(goodsorder.getPrice().compareTo(orderPayRequest.getTitlePrice())!=Constants.ZERO){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"ååä»·æ ¼åçååï¼è¯·å·æ°åéæ°æ¯ä»ï¼"); |
| | | } |
| | | |
| | | return this.wxPay(goodsorder,member); |
| | | //åå¨ç°éæ¯ä» |
| | | 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()+"]ååï¼è¯·è系管çåï¼"); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * éæ°æ¯ä» |
| | |
| | | PayResponse payResponse = new PayResponse(); |
| | | payResponse.setResponse(response); |
| | | payResponse.setOrderId(goodsorder.getId()); |
| | | payResponse.setPayType(Constants.ZERO); |
| | | return payResponse; |
| | | } catch (WxPayException e) { |
| | | e.printStackTrace(); |
| | |
| | | |
| | | /** |
| | | * 订å确认æ¥å£ |
| | | * @param receiveType 0=å¿«éé
é 1=èªæ |
| | | * @param requestList |
| | | * @param addressId |
| | | * @param memberCouponService |
| | | * @param memberId |
| | | * @param request |
| | | */ |
| | | public OrderPayConfirmResponse orderPayConfirm(Integer receiveType,List<PayDetailRequest> requestList,Integer addressId, |
| | | MemberCouponServiceImpl memberCouponService,Integer memberId){ |
| | | @Override |
| | | public OrderPayConfirmResponse orderPayConfirm(OrderPayConfirmRequest request, |
| | | MemberCouponServiceImpl memberCouponService){ |
| | | OrderPayConfirmResponse orderPayConfirmResponse = new OrderPayConfirmResponse(); |
| | | List<Goods> goodsList = goodsMapper.selectJoinList(Goods.class, |
| | | new MPJLambdaWrapper<Goods>() |
| | |
| | | .selectAs(GoodsSku::getWeight,Goods::getWeight) |
| | | .selectAs(GoodsSku::getImgurl,Goods::getSkuImg) |
| | | .leftJoin(GoodsSku.class,GoodsSku::getGoodsId,Goods::getId) |
| | | .in(GoodsSku::getId,requestList.stream().map(i->i.getGoodsSkuId()).collect(Collectors.toList()))); |
| | | .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 mailAmount = BigDecimal.ZERO; |
| | | for (OrderGoodsCalculateResponse response:goodsCalculateList) { |
| | | List<PayDetailRequest> request = requestList.stream().filter(i->Constants.equalsInteger(i.getGoodsSkuId(), response.getSkuId())).collect(Collectors.toList()); |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(request)){ |
| | | PayDetailRequest payDetailRequest = request.get(Constants.ZERO); |
| | | 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()); |
| | | } |
| | | } |
| | | //è·å伿 å¸ä¼æ éé¢ |
| | | List<MemberCoupon> memberCouponList = memberCouponService.getApplyCoupon(requestList,memberId); |
| | | MemberCoupon memberCoupon = new MemberCoupon(); |
| | | orderPayConfirmResponse.setCouponAmount(couponAmount); |
| | | //è·åå¯ä»¥ä½¿ç¨ç伿 å¸ |
| | | List<MemberCoupon> memberCouponList = memberCouponService.getApplyCoupon(request.getPayDetailRequestList(),request.getMemberId()); |
| | | if(CollectionUtils.isNotEmpty(memberCouponList)){ |
| | | memberCoupon = memberCouponList.get(Constants.ZERO); |
| | | couponAmount = memberCoupon.getValidAmount(); |
| | | memberCouponService.calculateCouponRata(memberCoupon,goodsCalculateList,amount); |
| | | orderPayConfirmResponse.setMemberCoupon(memberCoupon); |
| | | } |
| | | //ç§¯åæµæ£éé¢ |
| | | //æ¥è¯¢ç¨æ·æ»ç§¯å |
| | | Member member = memberMapper.selectById(memberId); |
| | | //积å大äº0 ä¸å¤§äºå¯ç¨ç§¯åé
置项 æå¯ä»¥ä½¿ç¨ |
| | | if(member.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){ |
| | | //æä½å¯ç¨å¯ç¨ç§¯å |
| | | BigDecimal minimumIntegral = new BigDecimal(systemDictDataBiz.queryByCode(Constants.SHOP_CONFIG,Constants.MINIMUM_AVAILABLE_INTEGRAL).getCode()); |
| | | if(member.getIntegral().compareTo(minimumIntegral)>=Constants.ZERO){ |
| | | this.calculateIntegralRata(goodsCalculateList,member.getIntegral()); |
| | | 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(),"æ å¯ç¨ä¼æ å¸ï¼è¯·å·æ°æ¥ç"); |
| | | } |
| | | } |
| | | //é®è´¹éé¢ |
| | | if(Constants.equalsInteger(receiveType,Constants.ZERO)){ |
| | | //TODO æ ¹æ®æ¶è´§å°å æ¥è¯¢è¿è´¹é
ç½® |
| | | |
| | | //计ç®ååä¿¡æ¯æ»éé |
| | | BigDecimal totalWeight = goodsCalculateList.stream().map(i-> |
| | | i.getWeight().multiply(new BigDecimal(i.getGoodsNum().toString())) |
| | | ).reduce(BigDecimal.ZERO,BigDecimal::add); |
| | | |
| | | } |
| | | |
| | | orderPayConfirmResponse.setAmount(amount); |
| | | orderPayConfirmResponse.setCouponAmount(couponAmount); |
| | | orderPayConfirmResponse.setDeductIntegral(deductIntegral); |
| | | orderPayConfirmResponse.setMailAmount(mailAmount); |
| | | orderPayConfirmResponse.setIntegralAmount(integralAmount); |
| | | orderPayConfirmResponse.setPayAmount(amount.subtract(couponAmount).subtract(mailAmount).subtract(integralAmount)); |
| | | orderPayConfirmResponse.setGoodsCalculateList(goodsCalculateList); |
| | | BigDecimal cashToIntegralRata = new BigDecimal(systemDictDataBiz.queryByCode(Constants.SHOP_CONFIG,Constants.CASH_EXCHANGE_INTEGRAL_RATA).getCode()); |
| | | orderPayConfirmResponse.setIntegralBack( |
| | | orderPayConfirmResponse.getPayAmount().multiply(cashToIntegralRata) |
| | | //æ¥è¯¢ç¨æ·æ»ç§¯å |
| | | 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); |
| | | } |
| | | //使ç¨ä¼æ å¸ åå»ä¼æ 叿µæ£éé¢ |
| | | if(Objects.nonNull(request.getCouponId())){ |
| | | orderPayConfirmResponse.setCouponAmount(couponAmount); |
| | | } |
| | | //å®é
æ¯ä»éé¢ åå»ä¼æ å¸ãç§¯åæµæ£éé¢ |
| | | 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 void calculateIntegralRata(List<OrderGoodsCalculateResponse> goodsCalculateList,BigDecimal totalIntegral){ |
| | | public BigDecimal calculateIntegralRata(OrderPayConfirmResponse orderPayConfirmResponse,List<OrderGoodsCalculateResponse> goodsCalculateList,BigDecimal totalIntegral){ |
| | | //å½åéæ©ååæå¤§å¯ç¨ç§¯åæµæ£çéé¢ |
| | | BigDecimal maxDeductionCash = goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(i.getCouponDeductCash()) |
| | | .multiply(i.getDeductRata())).reduce(BigDecimal.ZERO,BigDecimal::add); |
| | | .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 deductionRata = BigDecimal.ONE; |
| | | //è·åå½åéè¦æ¯ä»çç°éæ»é¢ |
| | | BigDecimal payCash = goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(i.getCouponDeductCash())).reduce(BigDecimal.ZERO,BigDecimal::add); |
| | | |
| | | //妿å®é
积åå°äºæå¤§éè¦ç§¯å éè¦è®¡ç®æ¯ä¾å æ¯ å»å¯¹åºæ·»å è³å¯¹åºçååé |
| | | if(totalIntegral.compareTo(maxDeductionIntegral)<=Constants.ZERO) { |
| | | deductionRata = totalIntegral.divide(maxDeductionIntegral, 2, BigDecimal.ROUND_HALF_UP); |
| | | } |
| | | //è·åæ»çæµæ£éé¢ ä¸ æ¯ä¸ªåå坿µæ£éé¢ |
| | | //å·²ç¨å æ¯æ¯ä¾å¼ |
| | | BigDecimal rata = BigDecimal.ZERO; |
| | | //å©ä½å¯åé
éé¢ |
| | | BigDecimal surplusValidAmount = maxDeductionCash; |
| | | //循ç¯ä¸åååå表 计ç®åºè¯¥ä½¿ç¨ç积åå¼ |
| | | BigDecimal realDeductionCash = BigDecimal.ZERO; |
| | | for (int j = 0; j < goodsCalculateList.size(); j++) { |
| | | if(Constants.equalsInteger(j+1,goodsCalculateList.size())){ |
| | | goodsCalculateList.get(j).setIntegralMaxDeductCash(surplusValidAmount); |
| | | goodsCalculateList.get(j).setOrderIntegralRata(new BigDecimal("1").subtract(rata)); |
| | | }else{ |
| | | //积åæå¤§å¯æµæ£éé¢ |
| | | goodsCalculateList.get(j).setIntegralMaxDeductCash( |
| | | goodsCalculateList.get(j).getSkuAmount() |
| | | .subtract(goodsCalculateList.get(j).getCouponDeductCash()) |
| | | .multiply(goodsCalculateList.get(j).getDeductRata())); |
| | | //订åä¸ç§¯åéé¢å®é
å æ¯ |
| | | goodsCalculateList.get(j).setOrderIntegralRata( |
| | | goodsCalculateList.get(j) |
| | | .getIntegralMaxDeductCash().divide(maxDeductionCash,2,BigDecimal.ROUND_DOWN) |
| | | ); |
| | | rata = rata.add(goodsCalculateList.get(j).getOrderIntegralRata()); |
| | | surplusValidAmount = surplusValidAmount.subtract(goodsCalculateList.get(j).getIntegralMaxDeductCash()); |
| | | 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(goodsCalculateList.get(j).getIntegralMaxDeductCash().multiply(deductionRata)); |
| | | goodsCalculateList.get(j).setIntegralDeduct(goodsCalculateList.get(j).getIntegralMaxDeductCash().multiply(cashToIntegralRata).multiply(deductionRata)); |
| | | goodsCalculateList.get(j).setIntegralDeductCash(deductionCash); |
| | | realDeductionCash = realDeductionCash.add(deductionCash); |
| | | } |
| | | //å©ä½ç§¯åå¼ |
| | | orderPayConfirmResponse.setSurplusIntegral(totalIntegral); |
| | | //å®é
æµæ£ä½¿ç¨ç§¯å |
| | | orderPayConfirmResponse.setDeductIntegral(totalIntegral.compareTo(maxDeductionCash)<=Constants.ZERO?totalIntegral:maxDeductionIntegral); |
| | | return realDeductionCash; |
| | | |
| | | } |
| | | |
| | |
| | | goodsorder.setStatus(Constants.OrderStatus.DONE.getKey()); |
| | | goodsorder.setDoneDate(new Date()); |
| | | goodsorderMapper.updateById(goodsorder); |
| | | //ç»éååé æ·»å åééé¢è®°å½ |
| | | this.addShopIntegral(goodsorder); |
| | | //æ ¹æ®è®¢åç±»åè¿è¡ç§¯åèµ é |
| | | //ä¸å确认æ¶è´§ ï¼èµ éç»éå积å |
| | | this.orderAddShopIntegral(goodsorder); |
| | | //æ¶è´¹è
确认æ¶è´§ |
| | | this.orderAddMemberIntegral(goodsorder); |
| | | //ç»éå ç»ç®éé¢ |
| | | this.orderAddShopCash(goodsorder); |
| | | } |
| | | |
| | | /** |
| | | * è®¢åæ ¸é |
| | | * @param code |
| | | * @param |
| | | * @param memberId |
| | | */ |
| | | @Override |
| | |
| | | if(!goodsorder.getStatus().equals(Constants.OrderStatus.PAY_DONE.getKey())){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"æä½å¤±è´¥ï¼è®¢åç¶æå·²æµè½¬ï¼æ æ³è¿è¡è¯¥æä½ï¼"); |
| | | } |
| | | Shop shop = shopMapper.selectById(goodsorder.getPickUpShopId());/*selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getMemberId,memberId) |
| | | .eq(Shop::getIsdeleted,Constants.ZERO).last("limit 1 ") |
| | | );*/ |
| | | Shop shop = shopMapper.selectById(goodsorder.getPickUpShopId()); |
| | | if(Objects.isNull(shop)){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"æªæ¥è¯¢å°è®¢åå
³èç»éåä¿¡æ¯,请è系管çå"); |
| | | } |
| | |
| | | goodsorder.setStatus(Constants.OrderStatus.DONE.getKey()); |
| | | goodsorder.setDoneDate(new Date()); |
| | | goodsorderMapper.updateById(goodsorder); |
| | | //ç»éååé æ·»å åééé¢è®°å½ |
| | | this.addShopIntegral(goodsorder); |
| | | //åå¨ç°éæ¯ä» èµ é 积å |
| | | if(Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ZERO)){ |
| | | //èµ éæ¶è´¹è
积å |
| | | this.orderAddMemberIntegral(goodsorder); |
| | | //ç»éå æ·»å èµ é积å |
| | | this.orderAddShopIntegral(goodsorder); |
| | | //ç»éå ç»ç®éé¢ |
| | | this.orderAddShopCash(goodsorder); |
| | | } |
| | | } |
| | | |
| | | |
| | | public void addShopIntegral(Goodsorder goodsorder){ |
| | | if(Objects.isNull(goodsorder.getDistributionShopId())){ |
| | | /** |
| | | * èµ éç»éåä¸å积å |
| | | * @param goodsorder |
| | | */ |
| | | public void orderAddShopIntegral(Goodsorder goodsorder){ |
| | | if(Objects.isNull(goodsorder.getDistributionShopId()) || Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ONE)){ |
| | | return; |
| | | } |
| | | List<GoodsorderDetail> detailList = goodsorderDetailMapper.selectList(new QueryWrapper<GoodsorderDetail>().lambda() |
| | | .eq(GoodsorderDetail::getOrderId,goodsorder.getId()) |
| | | .isNotNull(GoodsorderDetail::getShopSettlement) |
| | | ); |
| | | if(CollectionUtils.isNotEmpty(detailList)){ |
| | | BigDecimal settlement = detailList.stream().map(i->i.getShopSettlement()).reduce(BigDecimal.ZERO,BigDecimal::add); |
| | | 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.SHOP_ORDER_SETTLEMENT); |
| | | integralService.dealShopIntegral(dealIntegralRequest); |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |