| | |
| | | package com.doumee.service.business.impl; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.Wrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.doumee.biz.system.SystemDictDataBiz; |
| | |
| | | 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.MailConfigResponse; |
| | | import com.doumee.dao.web.response.MyPageResponse; |
| | | import com.doumee.dao.web.response.goods.*; |
| | | import com.doumee.service.business.AreasService; |
| | |
| | | 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.bean.result.WxPayRefundV3Result; |
| | | import com.github.binarywang.wxpay.exception.WxPayException; |
| | | import com.github.xiaoymin.knife4j.core.util.CollectionUtils; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import io.swagger.models.auth.In; |
| | | import okhttp3.Address; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.shiro.SecurityUtils; |
| | | import org.checkerframework.checker.units.qual.C; |
| | |
| | | private ShopGoodsRelationMapper shopGoodsRelationMapper; |
| | | @Autowired |
| | | private MemberMapper memberMapper; |
| | | @Autowired |
| | | private CouponMapper couponMapper; |
| | | @Autowired |
| | | private MemberCouponJoinMapper memberCouponJoinMapper; |
| | | @Autowired |
| | | private InviteRecordMapper inviteRecordMapper; |
| | | |
| | | @Autowired |
| | | private GoodsorderDetailMapper goodsorderDetailMapper; |
| | |
| | | |
| | | @Autowired |
| | | private ShopMapper shopMapper; |
| | | |
| | | @Autowired |
| | | private LabelsMapper labelsMapper; |
| | | |
| | | @Autowired |
| | | private ShopGoodsRelationMapper relationMapper; |
| | |
| | | |
| | | @Autowired |
| | | private AreasService areasService; |
| | | |
| | | @Autowired |
| | | private AreasMapper areasMapper; |
| | | |
| | | @Autowired |
| | | private GoodsorderDetailJoinMapper goodsorderDetailJoinMapper; |
| | |
| | | queryWrapper.eq(pageWrap.getModel().getPayOrderId()!=null,Goodsorder::getPayOrderId,pageWrap.getModel().getPayOrderId()); |
| | | queryWrapper.eq(pageWrap.getModel().getStatus()!=null,Goodsorder::getStatus,pageWrap.getModel().getStatus()); |
| | | queryWrapper.eq(pageWrap.getModel().getIsdeleted()==null,Goodsorder::getIsdeleted,Constants.ZERO); |
| | | queryWrapper.eq(pageWrap.getModel().getIsdeleted()!=null,Goodsorder::getIsdeleted,pageWrap.getModel().getIsdeleted()); |
| | | queryWrapper.orderByDesc(Goodsorder::getCreateDate); |
| | | |
| | | IPage<Goodsorder> result = goodsorderJoinMapper.selectJoinPage(page, Goodsorder.class, queryWrapper); |
| | |
| | | model.setGoodsorderDetailList(goodsorderDetailList); |
| | | } |
| | | return PageData.from(result); |
| | | } |
| | | @Override |
| | | public PageData<Goodsorder> findPageShop(PageWrap<Goodsorder> pageWrap) { |
| | | IPage<Goodsorder> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); |
| | | MPJLambdaWrapper<Goodsorder> queryWrapper = new MPJLambdaWrapper<>(); |
| | | Utils.MP.blankToNull(pageWrap.getModel()); |
| | | |
| | | queryWrapper.selectAll(Goodsorder.class) |
| | | .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()) |
| | | .ge(pageWrap.getModel().getStarttime()!=null,Goodsorder::getCreateDate,pageWrap.getModel().getStarttime()) |
| | | .le(pageWrap.getModel().getEndtime()!=null,Goodsorder::getCreateDate, pageWrap.getModel().getEndtime()) |
| | | .eq(Goodsorder::getIsdeleted,Constants.ZERO) |
| | | .exists(StringUtils.isNotBlank(pageWrap.getModel().getGoodsName()), |
| | | "select d.id from goodsorder_detail d where d.isdeleted=0 and d.order_id=t.id and (d.goods_sku_id ='"+pageWrap.getModel().getGoodsName()+"' or d.name like '%"+pageWrap.getModel().getGoodsName()+"%')") |
| | | .orderByDesc(Goodsorder::getCreateDate); |
| | | IPage<Goodsorder> result = goodsorderJoinMapper.selectJoinPage(page, Goodsorder.class, queryWrapper); |
| | | PageData<Goodsorder> rr = PageData.from(result); |
| | | if(result!=null && result.getRecords().size()>0) { |
| | | List<Integer> idList = new ArrayList<>(); |
| | | for(Goodsorder model:result.getRecords()){ |
| | | idList.add(model.getId()); |
| | | } |
| | | MPJLambdaWrapper<GoodsorderDetail> queryGoods = new MPJLambdaWrapper<>(); |
| | | queryGoods.selectAll(GoodsorderDetail.class); |
| | | queryGoods.in(GoodsorderDetail::getOrderId,idList); |
| | | queryGoods.eq(GoodsorderDetail::getIsdeleted,Constants.ZERO); |
| | | queryGoods.and( StringUtils.isNotBlank(pageWrap.getModel().getGoodsName()),w ->{ |
| | | w.like(GoodsorderDetail::getName,pageWrap.getModel().getGoodsName() ).or().eq(GoodsorderDetail::getGoodsSkuId,pageWrap.getModel().getGoodsName()); |
| | | } ); |
| | | List<GoodsorderDetail> goodsorderDetailList=goodsorderDetailJoinMapper.selectList(queryGoods); |
| | | for(Goodsorder model:result.getRecords()){ |
| | | model.setGoodsorderDetailList(getDetailListById(goodsorderDetailList,model.getId())); |
| | | } |
| | | if(pageWrap.getPage() == 1 && pageWrap.getModel().getDistributionShopId()!=null){ |
| | | //如果查询第一页,做经销商销售信息统计业务查询 |
| | | Goodsorder count = new Goodsorder(); |
| | | count.setOrderCount(rr.getTotal()); |
| | | List<GoodsorderDetail> list = goodsorderDetailJoinMapper.selectJoinList(GoodsorderDetail.class,new MPJLambdaWrapper<GoodsorderDetail>() |
| | | .selectAll(GoodsorderDetail.class) |
| | | .leftJoin(Goodsorder.class,Goodsorder::getId,GoodsorderDetail::getOrderId) |
| | | .eq(pageWrap.getModel().getDistributionShopId()!=null,Goodsorder::getDistributionShopId,pageWrap.getModel().getDistributionShopId()) |
| | | .eq(pageWrap.getModel().getStatus()!=null,Goodsorder::getStatus,pageWrap.getModel().getStatus()) |
| | | .and( StringUtils.isNotBlank(pageWrap.getModel().getGoodsName()),w ->{ |
| | | w.like(GoodsorderDetail::getName,pageWrap.getModel().getGoodsName() ).or().eq(GoodsorderDetail::getGoodsSkuId,pageWrap.getModel().getGoodsName()); |
| | | } ) |
| | | .eq(pageWrap.getModel().getCode()!=null,Goodsorder::getCode,pageWrap.getModel().getCode()) |
| | | .ge(pageWrap.getModel().getStarttime()!=null,Goodsorder::getCreateDate,pageWrap.getModel().getStarttime()) |
| | | .le(pageWrap.getModel().getEndtime()!=null,Goodsorder::getCreateDate, pageWrap.getModel().getEndtime()) |
| | | .eq(Goodsorder::getIsdeleted,Constants.ZERO)); |
| | | if(list!=null && list.size()>0){ |
| | | //商品总量 |
| | | for (GoodsorderDetail d : list){ |
| | | count.setGoodsNum(Constants.formatIntegerNum(count.getGoodsNum()) + Constants.formatIntegerNum(d.getGoodsNum())); |
| | | count.setOrderMoneyCount(Constants.formatBigdecimal(count.getOrderMoneyCount()) |
| | | .add(Constants.formatBigdecimal(d.getPrice()).multiply(new BigDecimal(Constants.formatIntegerNum(d.getGoodsNum()))))); |
| | | } |
| | | } |
| | | rr.setCountData(count); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | return rr; |
| | | } |
| | | |
| | | private List<GoodsorderDetail> getDetailListById(List<GoodsorderDetail> goodsorderDetailList, Integer id) { |
| | | List<GoodsorderDetail> list = new ArrayList<>(); |
| | | for(GoodsorderDetail d : goodsorderDetailList){ |
| | | if(Constants.equalsInteger(id,d.getOrderId())){ |
| | | list.add(d); |
| | | } |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | |
| | |
| | | goodsorder.setPrice(orderPayConfirmResponse.getPayAmount()); |
| | | goodsorder.setTotalPrice(orderPayConfirmResponse.getAmount()); |
| | | goodsorder.setUseIntegral(orderPayConfirmResponse.getDeductIntegral()); |
| | | goodsorder.setIntegral(goodsorder.getUseIntegral()); |
| | | goodsorder.setIntegralPrice(orderPayConfirmResponse.getIntegralAmount()); |
| | | goodsorder.setIntegral(orderPayConfirmResponse.getIntegralAmount()); |
| | | goodsorder.setMailPrice(orderPayConfirmResponse.getMailAmount()); |
| | | goodsorder.setPayMethod(goodsorder.getPrice().compareTo(BigDecimal.ZERO)>Constants.ZERO?Constants.ZERO:Constants.ONE); |
| | | if(Objects.nonNull(orderPayConfirmResponse.getMemberCoupon())){ |
| | |
| | | .eq(MemberCoupon::getId,orderPayConfirmResponse.getMemberCoupon().getId()) |
| | | ); |
| | | } |
| | | goodsorder.setReturnCustomerIntegral(getBackIntegral(goodsorder.getPrice(),Constants.ONE)); |
| | | goodsorder.setReturnMemberIntegral(getBackIntegral(goodsorder.getPrice(),Constants.ZERO)); |
| | | goodsorderMapper.insert(goodsorder); |
| | | List<OrderGoodsCalculateResponse> goodsCalculateList = orderPayConfirmResponse.getGoodsCalculateList(); |
| | | if(CollectionUtils.isEmpty(goodsCalculateList)){ |
| | |
| | | member.setImgFullUrl(memberfullUrl + member.getImgurl()); |
| | | memberOrderResponse.setMember(member); |
| | | } |
| | | |
| | | return memberOrderResponse; |
| | | } |
| | | |
| | |
| | | //邮费金额 |
| | | if(Objects.nonNull(request.getReceiveType())){ |
| | | if(Constants.equalsInteger(request.getReceiveType(),Constants.ZERO)){ |
| | | //TODO 根据收货地址 查询运费配置 |
| | | MailConfigResponse mailConfigResponse = systemDictDataBiz.getMailConfig(); |
| | | if(Objects.nonNull(request.getAddressId())){ |
| | | Addr addr = addrMapper.selectById(request.getAddressId()); |
| | | if(Objects.isNull(addr)){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到收货地址信息"); |
| | | } |
| | | 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")) |
| | | .isNotNull(Areas::getYunFeeId) |
| | | .last(" limit 1 ") |
| | | ); |
| | | if(Objects.nonNull(areas)){ |
| | | Labels labels = labelsMapper.selectById(areas.getYunFeeId()); |
| | | if(Objects.nonNull(labels)&&StringUtils.isNotBlank(labels.getParam())){ |
| | | //{weight0:10,fee0:10,weight1:10,fee1:10},{首重:10,首重运费:10,续重:10,续重费:10} |
| | | mailConfigResponse = JSONObject.parseObject(labels.getParam(),MailConfigResponse.class); |
| | | } |
| | | } |
| | | } |
| | | //根据收货地址 查询运费配置 |
| | | //计算商品信息总重量 |
| | | BigDecimal totalWeight = goodsCalculateList.stream().map(i-> |
| | | i.getWeight().multiply(new BigDecimal(i.getGoodsNum().toString())) |
| | | ).reduce(BigDecimal.ZERO,BigDecimal::add); |
| | | //TODO 暂时无运费金额 |
| | | mailAmount = BigDecimal.ZERO; |
| | | |
| | | if(totalWeight.compareTo(mailConfigResponse.getWeight0())>=Constants.ZERO){ |
| | | mailAmount = mailConfigResponse.getFee0(); |
| | | }else{ |
| | | //超重重量 |
| | | BigDecimal overWeight = totalWeight.subtract(mailConfigResponse.getWeight0()); |
| | | if (overWeight.compareTo(mailConfigResponse.getWeight1()) >= Constants.ZERO) { |
| | | mailAmount = mailConfigResponse.getFee0().add( |
| | | mailConfigResponse.getFee1() |
| | | .multiply(overWeight.divide(mailConfigResponse.getWeight1(),2,RoundingMode.HALF_UP))); |
| | | }else{ |
| | | mailAmount = mailConfigResponse.getFee0().add(mailConfigResponse.getFee1()); |
| | | } |
| | | } |
| | | amount = amount.add(mailAmount); |
| | | } |
| | | } |
| | |
| | | //根据订单类型进行积分赠送 |
| | | //下单确认收货 ,赠送经销商积分 |
| | | this.orderAddShopIntegral(goodsorder); |
| | | //下单完成 根据信息确认是否需要赠送邀请者优惠券 |
| | | this.orderDoneRewardInviteCoupon(goodsorder); |
| | | //消费者确认收货 |
| | | this.orderAddMemberIntegral(goodsorder); |
| | | //经销商 结算金额 |
| | | this.orderAddShopCash(goodsorder); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 订单确认收货,赠送邀请者优惠券 |
| | | * @param |
| | | */ |
| | | public void orderDoneRewardInviteCoupon(Goodsorder goodsorder){ |
| | | PlatformConfigDTO platformConfigDTO = systemDictDataService.getPlatformConfigDTO(); |
| | | if (platformConfigDTO.getShareCouponRewardStatus().equals(Constants.ONE)) { |
| | | return; |
| | | } |
| | | Member member = memberMapper.selectById(goodsorder.getMemberId()); |
| | | if(Objects.isNull(member)||member.getIsdeleted().equals(Constants.ONE)){ |
| | | return; |
| | | } |
| | | InviteRecord inviteRecord = inviteRecordMapper.selectOne(new QueryWrapper<InviteRecord>().lambda() |
| | | .eq(InviteRecord::getMemberId,member.getId()) |
| | | .eq(InviteRecord::getIsdeleted,Constants.ZERO) |
| | | .eq(InviteRecord::getFirstOrderStatus,Constants.ZERO) |
| | | .last("limit 1") |
| | | ); |
| | | if(Objects.isNull(inviteRecord)){ |
| | | return; |
| | | } |
| | | Member inviteMember = memberMapper.selectById(inviteRecord.getInviteId()); |
| | | if(Objects.isNull(inviteMember)||inviteMember.getIsdeleted().equals(Constants.ONE)){ |
| | | return; |
| | | } |
| | | |
| | | List<JSONObject> shareCouponRewardList = platformConfigDTO.getShareCouponRewardList(); |
| | | //[{"num":"2","couponId":6},{"num":"3","couponId":5}] |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(shareCouponRewardList)){ |
| | | List<MemberCoupon> memberCouponList = new ArrayList<>(); |
| | | for (JSONObject jsonObject:shareCouponRewardList) { |
| | | Integer couponId = jsonObject.getInteger("couponId"); |
| | | Integer num = jsonObject.getInteger("num"); |
| | | Coupon coupon = couponMapper.selectById(couponId); |
| | | if(Objects.isNull(coupon)||Constants.equalsInteger(coupon.getIsdeleted(),Constants.ONE)&&num>Constants.ZERO){ |
| | | continue; |
| | | } |
| | | MemberCoupon memberCoupon = MemberCoupon.couponToBean(coupon,inviteMember,new Date(),Constants.ONE,null); |
| | | for (int i = 0; i < num; i++) { |
| | | memberCouponList.add(memberCoupon); |
| | | } |
| | | } |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberCouponList)){ |
| | | memberCouponJoinMapper.insert(memberCouponList); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 订单核销 |
| | |
| | | if(Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ZERO)){ |
| | | //赠送消费者积分 |
| | | this.orderAddMemberIntegral(goodsorder); |
| | | //下单完成 根据信息确认是否需要赠送邀请者优惠券 |
| | | this.orderDoneRewardInviteCoupon(goodsorder); |
| | | //经销商 添加赠送积分 |
| | | this.orderAddShopIntegral(goodsorder); |
| | | //经销商 结算金额 |