Merge remote-tracking branch 'origin/master'
| | |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.dao.business.model.WithdrawRecord; |
| | | import com.doumee.service.business.IntegralService; |
| | | import com.doumee.service.business.WithdrawRecordService; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | |
| | | |
| | | @Autowired |
| | | private WithdrawRecordService withdrawRecordService; |
| | | |
| | | @Autowired |
| | | private IntegralService integralService; |
| | | |
| | | @PreventRepeat |
| | | @ApiOperation("新建") |
| | |
| | | @PostMapping("/updateById") |
| | | @RequiresPermissions("business:withdrawrecord:update") |
| | | public ApiResponse updateById(@RequestBody WithdrawRecord withdrawRecord) { |
| | | withdrawRecordService.updateById(withdrawRecord); |
| | | withdrawRecordService.updateById(withdrawRecord,integralService); |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | |
| | | SYSTEM_RECHARGE(12,"积分发放","平台奖励,获得${param}积分",0,0), |
| | | SYSTEM_DEDUCT(13,"积分扣除","平台扣减,消耗${param}积分",0,0), |
| | | MEMBER_ORDER_CANCEL(14,"取消订单退回","交易退款退回,获得${param}积分",0,0), |
| | | MEMBER_ORDER_REFUND(28,"订单退款","订单退款,返还订单消耗${param}积分",0,0), |
| | | MEMBER_ORDER(9,"下单抵扣","消费抵扣,消耗${param}积分",1,0), |
| | | ORDER_DONATE(15,"消费返积分","购物成功,获得${param}积分",0,0), |
| | | SHOP_YEAR_SETTLEMENT(18,"积分过期","积分过期,消耗${param}积分",0,0), |
| | | MEMBER_ORDER_REFUND_RETURN(27,"订单退款","订单退款,扣除订单返还${param}积分",0,0), |
| | | |
| | | |
| | | ORDER_DONE_AMOUNT(16,"订单结算","${param1}订单结算成功,获得¥${param}元",0,1),//${param}订单编号,${param1}金额 |
| | | WITHDRAW_APPLY(17,"余额提现","余额提现已提交,消耗¥${param}元",0,1), |
| | | WITHDRAW_APPLY_BACK(19,"提现退回","余额提现失败,获得¥${param}元",0,1), |
| | | ORDER_DONE_AMOUNT_BACK(20,"订单结算退回","${param1}订单结算退回,消耗¥${param}元",0,1),//${param}订单编号,${param1}金额 |
| | | ORDER_DONE_AMOUNT(16,"订单结算","${param1}订单结算成功,获得¥${param}",0,1),//${param}订单编号,${param1}金额 |
| | | WITHDRAW_APPLY(17,"余额提现","余额提现已提交,消耗¥${param}",0,1), |
| | | WITHDRAW_APPLY_BACK(19,"提现退回","余额提现失败,获得¥${param}",0,1), |
| | | // ORDER_DONE_AMOUNT_BACK(20,"订单结算退回","${param1}订单结算退回,消耗¥${param}元",0,1),//${param}订单编号,${param1}金额 |
| | | SHOP_ORDER_REFUND_CASH(25,"订单退款","${param1}订单退款,扣除结算金额¥${param}",0,0), |
| | | |
| | | |
| | | SHOP_ORDER(21,"消费返积分","会员${param1}交易成功,获得${param}积分",0,0),//${param}昵称-手机号 |
| | | SHOP_ORDER_CANCEL(22,"订单取消退回","订单取消退回,退回${param}积分",0,0), |
| | | // SHOP_ORDER_CANCEL(22,"订单取消退回","订单取消退回,退回${param}积分",0,0), |
| | | SHOP_ORDER_REFUND_INTEGRAL(26,"订单退款","订单退款,扣除订单返还${param}积分",0,0), |
| | | SHOP_SYSTEM_RECHARGE(23,"积分发放","平台奖励,获得${param}积分",0,0), |
| | | SHOP_SYSTEM_DEDUCT(24,"积分扣除","平台扣减,消耗${param}积分",0,0), |
| | | |
| | | SHOP_ORDER_REFUND_CASH(25,"订单退款","订单退款,扣除结算金额${param}元",0,0), |
| | | SHOP_ORDER_REFUND_INTEGRAL(26,"订单退款","订单退款,扣除订单返还${param}积分",0,0), |
| | | MEMBER_ORDER_REFUND_RETURN(27,"订单退款","订单退款,扣除订单返还${param}积分",0,0), |
| | | MEMBER_ORDER_REFUND(28,"订单退款","订单退款,返还订单消耗${param}积分",0,0), |
| | | |
| | | //----------------废弃-------start--------- |
| | | SIGNIN(1, "签到", "签到",0,0), |
| | |
| | | @ExcelColumn(name="对象类型 0商城订单 1积分流水 2互动评价 3优惠券 4现金流水") |
| | | private Integer objType; |
| | | |
| | | @ApiModelProperty(value = "消息类型 0消费者;1=经销商积分;2=经销商结算金额 ", example = "1") |
| | | @ExcelColumn(name="消息类型 0消费者;1=经销商积分;2=经销商结算金额 ") |
| | | @ApiModelProperty(value = "消息类型 0消费者消息;1=经销商消息;", example = "1") |
| | | @ExcelColumn(name="消息类型 0消费者消息;1=经销商消息;") |
| | | private Integer type; |
| | | |
| | | @ApiModelProperty(value = "状态 0未读 1已读", example = "1") |
| | |
| | | @TableField(exist = false) |
| | | private Integer shopId; |
| | | |
| | | @ApiModelProperty(value = "查询类型:0=系统消息;1=社区消息;", example = "1") |
| | | @TableField(exist = false) |
| | | private Integer queryType; |
| | | } |
| | |
| | | @ApiModelProperty(value = "对象编码", example = "1") |
| | | private Integer objId; |
| | | |
| | | @ApiModelProperty(value = "对象类型 0咖豆订单 、商城、咖啡计划订单 1活动、探店、资讯 2活动探店资讯评论", example = "1") |
| | | @ApiModelProperty(value = "对象类型 0商城订单 1积分流水 2互动评价 3优惠券 4现金流水", example = "1") |
| | | private Integer objType; |
| | | |
| | | @ApiModelProperty(value = "消息类型 0订单通知 1系统消息 2互动消息 3优惠券提醒 4官方客服 5活动推荐 6我的关注", example = "1") |
| | |
| | | @ApiModelProperty(value = "待收货数量") |
| | | private Long waitReceiveNum; |
| | | |
| | | @ApiModelProperty(value = "是否存在未读:0=无;1=存在") |
| | | private Integer unRead; |
| | | |
| | | |
| | | } |
| | |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.dao.business.model.Notice; |
| | | import com.doumee.dao.web.dto.NoticeCardDTO; |
| | | import com.doumee.dao.web.request.CouponNoticeRequest; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | |
| | | Integer memberId, |
| | | BigDecimal integral, |
| | | Integer objId, String param1); |
| | | |
| | | |
| | | /** |
| | | * 优惠券消息 |
| | | * @param memberId |
| | | * @param couponList |
| | | */ |
| | | void couponNotice(Integer memberId,List<CouponNoticeRequest> couponList); |
| | | |
| | | |
| | | /** |
| | | * 订单支付成功 发送消息 |
| | | * @param shopId |
| | | * @param objId |
| | | * @param receiveType |
| | | */ |
| | | void orderPayNotice(Integer shopId, Integer objId,Integer receiveType); |
| | | |
| | | /** |
| | | * 订单取消消息 |
| | | * @param shopId |
| | | * @param objId |
| | | * @param orderNo |
| | | */ |
| | | void orderCancelNotice(Integer shopId, Integer objId,String orderNo); |
| | | |
| | | |
| | | /** |
| | | * 积分过期消息 |
| | | * @param memberId |
| | | * @param integral |
| | | * @param expireDateNum |
| | | */ |
| | | void expireNotice(Integer memberId, BigDecimal integral,Integer expireDateNum); |
| | | |
| | | /** |
| | | * 评论站内信 |
| | | * @param memberId |
| | | * @param objId |
| | | * @param memberName |
| | | */ |
| | | void commonNotice(Integer memberId, Integer objId,String memberName ); |
| | | } |
| | |
| | | * |
| | | * @param withdrawRecord 实体对象 |
| | | */ |
| | | void updateById(WithdrawRecord withdrawRecord); |
| | | void updateById(WithdrawRecord withdrawRecord, IntegralService integralService); |
| | | |
| | | /** |
| | | * 批量主键更新 |
| | |
| | | dealIntegralRequest.setObjId(goodsorder.getId()); |
| | | dealIntegralRequest.setOrderCode(goodsorder.getCode().toString()); |
| | | dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.MEMBER_ORDER_REFUND); |
| | | dealIntegralRequest.setParam1(goodsorder.getCode().toString()); |
| | | integralService.dealIntegral(dealIntegralRequest); |
| | | } |
| | | |
| | |
| | | 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; |
| | |
| | | private MemberMapper memberMapper; |
| | | @Autowired |
| | | private CouponMapper couponMapper; |
| | | @Autowired |
| | | private NoticeService noticeService; |
| | | @Autowired |
| | | private NoticeMapper noticeMapper; |
| | | @Autowired |
| | | private MemberCouponJoinMapper memberCouponJoinMapper; |
| | | @Autowired |
| | |
| | | |
| | | /****************************************移动端接口开始********************************************************************/ |
| | | |
| | | |
| | | @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(),"存在商品库存不足,无法下单!"); |
| | | } |
| | | //商品库存扣除 |
| | | 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); |
| | | } |
| | | //咖豆商城订单 单独处理 扣减积分 添加积分变动记录 |
| | | 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){ |
| | |
| | | dealIntegralRequest.setMemberId(member.getId()); |
| | | dealIntegralRequest.setObjId(goodsorder.getId()); |
| | | dealIntegralRequest.setOrderCode(goodsorder.getCode().toString()); |
| | | dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER); |
| | | dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.MEMBER_ORDER); |
| | | integralService.dealIntegral(dealIntegralRequest); |
| | | } |
| | | |
| | |
| | | PayResponse payResponse = new PayResponse(); |
| | | payResponse.setOrderId(goodsorder.getId()); |
| | | payResponse.setPayType(Constants.ONE); |
| | | //发送通知 |
| | | if(Objects.nonNull(goodsorder.getPickUpShopId())){ |
| | | //发送站内信 - 经销商 |
| | | noticeService.orderPayNotice(goodsorder.getPickUpShopId(),goodsorder.getId(),goodsorder.getReceiveType()); |
| | | } |
| | | |
| | | |
| | | return payResponse; |
| | | } |
| | | |
| | |
| | | dealIntegralRequest.setMemberId(goodsorder.getMemberId()); |
| | | dealIntegralRequest.setObjId(goodsorder.getId()); |
| | | dealIntegralRequest.setOrderCode(goodsorder.getCode().toString()); |
| | | dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER_CANCEL); |
| | | dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.MEMBER_ORDER_CANCEL); |
| | | integralService.dealIntegral(dealIntegralRequest); |
| | | } |
| | | //订单信息取消 |
| | |
| | | } |
| | | |
| | | SendWxMessage.orderCancel(goodsorder,memberMapper.selectById(goodsorder.getMemberId()),goodsName); |
| | | |
| | | |
| | | |
| | | //查询优惠券信息记录 |
| | | if(!Objects.isNull(goodsorder.getCouponId())){ |
| | |
| | | dealIntegralRequest.setMemberId(goodsorder.getMemberId()); |
| | | dealIntegralRequest.setObjId(goodsorder.getId()); |
| | | dealIntegralRequest.setOrderCode(goodsorder.getCode().toString()); |
| | | dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER_CANCEL); |
| | | dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.MEMBER_ORDER_CANCEL); |
| | | integralService.dealIntegral(dealIntegralRequest); |
| | | } |
| | | //订单信息取消 |
| | |
| | | } |
| | | } |
| | | |
| | | //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())){ |
| | |
| | | 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) { |
| | | Integer couponId = jsonObject.getInteger("couponId"); |
| | | Integer num = jsonObject.getInteger("num"); |
| | |
| | | } |
| | | 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); |
| | | } |
| | | 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() |
| | |
| | | dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId()); |
| | | dealIntegralRequest.setObjId(goodsorder.getId()); |
| | | dealIntegralRequest.setOrderCode(goodsorder.getCode().toString()); |
| | | dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.ORDER_DONATE); |
| | | dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER); |
| | | Member member = memberMapper.selectById(goodsorder.getMemberId()); |
| | | if(Objects.nonNull(member)){ |
| | | dealIntegralRequest.setParam1(member.getNickname()); |
| | | } |
| | | integralService.dealShopIntegral(dealIntegralRequest); |
| | | } |
| | | } |
| | |
| | | .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; |
| | | } |
| | |
| | | }else{ |
| | | shopMapper.subtractIntegral(shop.getId(),dealIntegralRequest.getIntegralNum()); |
| | | } |
| | | |
| | | //站内信 |
| | | noticeService.saveMemberIntegralNotice( |
| | | dealIntegralRequest.getIntegralObjType(),Constants.ZERO,shop.getId(),dealIntegralRequest.getIntegralNum(), |
| | | integral.getId(), dealIntegralRequest.getParam1() |
| | | ); |
| | | |
| | | |
| | | return integral.getId(); |
| | | } |
| | | |
| | |
| | | BigDecimal num = param.getNum(); |
| | | if(param.getType() == 1 &&Constants.formatBigdecimal(model.getIntegral()).compareTo(param.getNum())<0){ |
| | | //如果是减少,判断用户余额是否满足 |
| | | num = num.multiply(new BigDecimal(-1));//减少 |
| | | // num = num.multiply(new BigDecimal(-1));//减少 |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"用户账户余额不足!"); |
| | | } |
| | | //账户余额 |
| | | memberMapper.update(null,new UpdateWrapper<Member>().lambda() |
| | | .eq(Member::getId,model.getId()) |
| | | .set(Member::getEditDate,date) |
| | | .set(Member::getEditor,user.getId()) |
| | | .setSql(param.getType() == 0,"total_integral = ifnull(total_integral,0)+" + num)//累计增加 |
| | | .setSql(param.getType() == 0,"integral = ifnull(integral,0)+" + param.getNum()) |
| | | .setSql(param.getType() == 1,"integral = ifnull(integral,0)-" + param.getNum())); |
| | | |
| | | integralObjType = param.getType()==0?Constants.IntegralObjType.SYSTEM_RECHARGE:Constants.IntegralObjType.SYSTEM_DEDUCT; |
| | | integral.setTotalNum(param.getType() == 0? Constants.formatBigdecimal(model.getIntegral()).add(param.getNum()):Constants.formatBigdecimal(model.getIntegral()).subtract(param.getNum())); |
| | | integral.setUserType(Constants.ZERO); |
| | | DealIntegralRequest dealIntegralRequest = new DealIntegralRequest(); |
| | | dealIntegralRequest.setIntegralNum(num); |
| | | dealIntegralRequest.setDealType(param.getType()); |
| | | dealIntegralRequest.setMemberId(model.getId()); |
| | | dealIntegralRequest.setObjId(null); |
| | | dealIntegralRequest.setOrderCode(null); |
| | | dealIntegralRequest.setIntegralObjType(integralObjType); |
| | | this.dealIntegral(dealIntegralRequest); |
| | | |
| | | |
| | | //账户余额 |
| | | // memberMapper.update(null,new UpdateWrapper<Member>().lambda() |
| | | // .eq(Member::getId,model.getId()) |
| | | // .set(Member::getEditDate,date) |
| | | // .set(Member::getEditor,user.getId()) |
| | | // .setSql(param.getType() == 0,"total_integral = ifnull(total_integral,0)+" + num)//累计增加 |
| | | // .setSql(param.getType() == 0,"integral = ifnull(integral,0)+" + param.getNum()) |
| | | // .setSql(param.getType() == 1,"integral = ifnull(integral,0)-" + param.getNum())); |
| | | // |
| | | // integralObjType = param.getType()==0?Constants.IntegralObjType.SYSTEM_RECHARGE:Constants.IntegralObjType.SYSTEM_DEDUCT; |
| | | // integral.setTotalNum(param.getType() == 0? Constants.formatBigdecimal(model.getIntegral()).add(param.getNum()):Constants.formatBigdecimal(model.getIntegral()).subtract(param.getNum())); |
| | | // integral.setUserType(Constants.ZERO); |
| | | }else{//经销商账户 |
| | | Shop model = shopMapper.selectById(param.getMemberId()); |
| | | if(model == null ||Constants.equalsObject(model.getIsdeleted(),Constants.ONE)){ |
| | |
| | | BigDecimal num = param.getNum(); |
| | | if(param.getType() == 1 &&Constants.formatBigdecimal(model.getIntegral()).compareTo(param.getNum())<0){ |
| | | //如果是减少,判断用户余额是否满足 |
| | | num = num.multiply(new BigDecimal(-1));//减少 |
| | | // num = num.multiply(new BigDecimal(-1));//减少 |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"经销商账户积分余额不足!"); |
| | | } |
| | | //账户余额 |
| | | shopMapper.update(null,new UpdateWrapper<Shop>().lambda() |
| | | .eq(Shop::getId,model.getId()) |
| | | .set(Shop::getEditDate,date) |
| | | .set(Shop::getEditor,user.getId()) |
| | | .setSql(param.getType() == 0,"total_integral = ifnull(total_integral,0)+" + num)//累计增加 |
| | | .setSql(param.getType() == 0,"integral = ifnull(integral,0)+" + param.getNum()) |
| | | .setSql(param.getType() == 1,"integral = ifnull(integral,0)-" + param.getNum())); |
| | | integralObjType = param.getType()==0?Constants.IntegralObjType.SHOP_SYSTEM_RECHARGE:Constants.IntegralObjType.SHOP_SYSTEM_DEDUCT; |
| | | integral.setTotalNum(param.getType() == 0? Constants.formatBigdecimal(model.getIntegral()).add(param.getNum()):Constants.formatBigdecimal(model.getIntegral()).subtract(param.getNum())); |
| | | integral.setUserType(Constants.ONE); |
| | | // shopMapper.update(null,new UpdateWrapper<Shop>().lambda() |
| | | // .eq(Shop::getId,model.getId()) |
| | | // .set(Shop::getEditDate,date) |
| | | // .set(Shop::getEditor,user.getId()) |
| | | // .setSql(param.getType() == 0,"total_integral = ifnull(total_integral,0)+" + num)//累计增加 |
| | | // .setSql(param.getType() == 0,"integral = ifnull(integral,0)+" + param.getNum()) |
| | | // .setSql(param.getType() == 1,"integral = ifnull(integral,0)-" + param.getNum())); |
| | | // integralObjType = param.getType()==0?Constants.IntegralObjType.SHOP_SYSTEM_RECHARGE:Constants.IntegralObjType.SHOP_SYSTEM_DEDUCT; |
| | | // integral.setTotalNum(param.getType() == 0? Constants.formatBigdecimal(model.getIntegral()).add(param.getNum()):Constants.formatBigdecimal(model.getIntegral()).subtract(param.getNum())); |
| | | // integral.setUserType(Constants.ONE); |
| | | |
| | | DealIntegralRequest dealIntegralRequest = new DealIntegralRequest(); |
| | | dealIntegralRequest.setIntegralNum(num); |
| | | dealIntegralRequest.setDealType(param.getType()); |
| | | dealIntegralRequest.setMemberId(model.getId()); |
| | | dealIntegralRequest.setObjId(null); |
| | | dealIntegralRequest.setOrderCode(null); |
| | | dealIntegralRequest.setIntegralObjType(integralObjType); |
| | | this.dealShopIntegral(dealIntegralRequest); |
| | | |
| | | |
| | | } |
| | | integral.setCreateDate(new Date()); |
| | | integral.setCreator(user.getId()); |
| | | integral.setIsdeleted(Constants.ZERO); |
| | | integral.setNum(param.getNum()); |
| | | integral.setTitle(integralObjType.getName()); |
| | | integral.setContent(integralObjType.getNoteinfo().replace("${param}",integral.getNum().toString())); |
| | | integral.setMemberId(param.getMemberId()); |
| | | integral.setObjId(param.getMemberId()); |
| | | integral.setObjType(integralObjType.getKey()); |
| | | integral.setType(param.getType()); |
| | | integral.setRemark(param.getRemark()); |
| | | integral.setOrderCode(null); |
| | | integralMapper.insert(integral); |
| | | // integral.setCreateDate(new Date()); |
| | | // integral.setCreator(user.getId()); |
| | | // integral.setIsdeleted(Constants.ZERO); |
| | | // integral.setNum(param.getNum()); |
| | | // integral.setTitle(integralObjType.getName()); |
| | | // integral.setContent(integralObjType.getNoteinfo().replace("${param}",integral.getNum().toString())); |
| | | // integral.setMemberId(param.getMemberId()); |
| | | // integral.setObjId(param.getMemberId()); |
| | | // integral.setObjType(integralObjType.getKey()); |
| | | // integral.setType(param.getType()); |
| | | // integral.setRemark(param.getRemark()); |
| | | // integral.setOrderCode(null); |
| | | // integralMapper.insert(integral); |
| | | } |
| | | @Override |
| | | public IntegralDataResponse getIntegralData(IntegralRecordDTO model){ |
| | |
| | | dealIntegralRequest.setParam1(member.getNickname()); |
| | | integralService.dealIntegral(dealIntegralRequest); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | |
| | | |
| | | @Override |
| | | public PageData<NoticeCardDTO> findNoticeCardDTOPage(PageWrap<Notice> pageWrap) { |
| | | LoginUserInfo loginUserInfo = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal(); |
| | | IPage<Notice> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); |
| | | LambdaQueryWrapper<Notice> queryWrapper = new LambdaQueryWrapper<>(); |
| | | Utils.MP.blankToNull(pageWrap.getModel()); |
| | | queryWrapper.eq(Notice::getType,pageWrap.getModel().getType()) |
| | | .eq(Notice::getObjMemberId,loginUserInfo.getMemberId()); |
| | | IPage<Notice> noticeIPage = noticeMapper.selectPage(page, queryWrapper); |
| | | |
| | | Notice notice = pageWrap.getModel(); |
| | | |
| | | queryWrapper.ne(Objects.nonNull(notice.getQueryType())&&Constants.equalsInteger(notice.getQueryType(),Constants.ZERO), |
| | | Notice::getObjType,Constants.TWO) |
| | | .eq(Objects.nonNull(notice.getQueryType())&&Constants.equalsInteger(notice.getQueryType(),Constants.ONE), |
| | | Notice::getObjType,Constants.TWO) |
| | | .eq(Notice::getMemberId,notice.getMemberId()) |
| | | .orderByAsc(Notice::getStatus) |
| | | .orderByDesc(Notice::getId) |
| | | ; |
| | | IPage<Notice> noticeIPage = noticeMapper.selectPage(page, queryWrapper); |
| | | List<NoticeCardDTO> noticeCardDTOs = new ArrayList<>(); |
| | | if (CollectionUtils.isEmpty(noticeIPage.getRecords())){ |
| | | return PageData.from(new Page<>()); |
| | | } |
| | | List<NoticeCardDTO> noticeCardDTOs = noticeIPage.getRecords().stream().map(s -> { |
| | | noticeCardDTOs = noticeIPage.getRecords().stream().map(s -> { |
| | | NoticeCardDTO noticeCardDTO = new NoticeCardDTO(); |
| | | BeanUtils.copyProperties(s, noticeCardDTO); |
| | | return noticeCardDTO; |
| | | |
| | | }).collect(Collectors.toList()); |
| | | |
| | | } |
| | | PageData<NoticeCardDTO> pageData = new PageData<>(); |
| | | pageData.setPage(pageWrap.getPage()); |
| | | pageData.setCapacity(pageWrap.getCapacity()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 发放优惠券 |
| | | * 发放优惠券 站内信 |
| | | * @param memberId |
| | | * @param couponList |
| | | */ |
| | | @Override |
| | | public void couponNotice(Integer memberId,List<CouponNoticeRequest> couponList){ |
| | | String noticeInfo = "恭喜您获得${param}"; |
| | | //恭喜您获得 满50减10抵扣券 |
| | | String replaceInfo = ""; |
| | | //整理优惠券内容 |
| | | for (CouponNoticeRequest c:couponList) { |
| | | MemberCoupon mc = c.getMemberCoupon(); |
| | | String info = Constants.equalsInteger(mc.getCouponType(),Constants.ZERO)? |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 积分过期 站内消息 |
| | | * @param memberId |
| | | * @param integral |
| | | * @param expireDateNum |
| | | */ |
| | | @Override |
| | | public void expireNotice(Integer memberId, BigDecimal integral,Integer expireDateNum){ |
| | | //您有1000积分30天后过期,请尽快使用 |
| | | String noticeInfo = "您有${param}积分即将过期,请尽快使用"; |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 评论消息 站内信 |
| | | * @param memberId |
| | | * @param objId |
| | | * @param memberName |
| | | */ |
| | | @Override |
| | | public void commonNotice(Integer memberId, Integer objId,String memberName ){ |
| | | //您有1000积分30天后过期,请尽快使用 |
| | | String noticeInfo = "${param}回复了您的评论"; |
| | |
| | | memberId, |
| | | noticeInfo, |
| | | noticeInfo, |
| | | null |
| | | objId |
| | | ); |
| | | } |
| | | |
| | | /** |
| | | * 订单支付成功 发送消息 |
| | | * @param shopId |
| | | * @param objId |
| | | * @param receiveType |
| | | */ |
| | | @Override |
| | | public void orderPayNotice(Integer shopId, Integer objId,Integer receiveType){ |
| | | if(Constants.equalsInteger(receiveType,Constants.ZERO)){ |
| | | return; |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 订单取消 发送站内信 |
| | | * @param shopId |
| | | * @param objId |
| | | * @param orderNo |
| | | */ |
| | | @Override |
| | | public void orderCancelNotice(Integer shopId, Integer objId,String orderNo){ |
| | | // 您的订单{订单号},已由客户手动取消,请知悉 |
| | | String noticeInfo = " 您的订单${param},已由客户手动取消,请知悉"; |
| | |
| | | @Autowired |
| | | private WithdrawRecordMapper withdrawRecordMapper; |
| | | |
| | | |
| | | @Autowired |
| | | private ShopMapper shopMapper; |
| | | |
| | |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public void updateById(WithdrawRecord withdrawRecord) { |
| | | public void updateById(WithdrawRecord withdrawRecord, IntegralService integralService) { |
| | | LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); |
| | | if(!Constants.equalsObject(withdrawRecord.getStatus(),Constants.ONE) |
| | | && !Constants.equalsObject(withdrawRecord.getStatus(),Constants.TWO)){ |
| | |
| | | model.setPayBank(withdrawRecord.getPayBank()); |
| | | withdrawRecordMapper.updateById(model); |
| | | dealBatchMultiFiles(model,withdrawRecord.getPayFileList()); |
| | | |
| | | //审批未通过 退回提现金额 |
| | | if (Constants.equalsObject(model.getStatus(), Constants.TWO)) { |
| | | DealIntegralRequest dealIntegralRequest = new DealIntegralRequest(); |
| | | dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.WITHDRAW_APPLY_BACK); |
| | | dealIntegralRequest.setIntegralNum(model.getAmount()); |
| | | dealIntegralRequest.setObjId(withdrawRecord.getId()); |
| | | dealIntegralRequest.setOrderCode(withdrawRecord.getCode().toString()); |
| | | dealIntegralRequest.setMemberId(model.getMemberId()); |
| | | dealIntegralRequest.setDealType(Constants.ZERO); |
| | | integralService.dealShopAmount(dealIntegralRequest); |
| | | } |
| | | } |
| | | |
| | | public void dealBatchMultiFiles(WithdrawRecord model, List<Multifile> fileList ) { |
| | | //清空原有的 |
| | | if(fileList!=null && fileList.size()>0){ |
| | |
| | | return; |
| | | } |
| | | for (WithdrawRecord withdrawRecord: withdrawRecords) { |
| | | this.updateById(withdrawRecord); |
| | | // this.updateById(withdrawRecord); |
| | | } |
| | | } |
| | | |
| | |
| | | import com.doumee.dao.business.model.Notice; |
| | | import com.doumee.dao.web.dto.NoticeCardDTO; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiImplicitParam; |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.web.bind.annotation.*; |
| | |
| | | @Api(tags = "消息通知信业务") |
| | | @Trace(exclude = true) |
| | | @LoginRequired |
| | | //@RestController |
| | | @RestController |
| | | @RequestMapping("/web/notice") |
| | | @Slf4j |
| | | public class NoticeApi extends ApiController{ |
| | |
| | | * @param pageWrap |
| | | * @return |
| | | */ |
| | | @ApiOperation(value = "查询用户通知", notes = "小程序端") |
| | | @GetMapping("/findNoticeCardDTOPage") |
| | | public ApiResponse<PageData<NoticeCardDTO>> findNoticeCardDTOPage(@RequestBody PageWrap<Notice> pageWrap){ |
| | | |
| | | @LoginRequired |
| | | @ApiOperation(value = "查询用户通知", notes = "小程序端") |
| | | @PostMapping("/findNoticeCardDTOPage") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true), |
| | | }) |
| | | public ApiResponse<PageData<NoticeCardDTO>> findNoticeCardDTOPage(@RequestBody PageWrap<Notice> pageWrap){ |
| | | pageWrap.getModel().setMemberId(this.getMemberId()); |
| | | return ApiResponse.success(noticeService.findNoticeCardDTOPage(pageWrap)); |
| | | } |
| | | |
| | |
| | | goodsOrder.setExchangeCode(Constants.equalsInteger(goodsOrder.getReceiveType(),Constants.ZERO)?null:Constants.getRandomNumber()); |
| | | goodsOrder.setPayMethod(Constants.ZERO); |
| | | goodsorderService.updateById(goodsOrder); |
| | | if(Objects.nonNull(goodsOrder.getPickUpShopId())){ |
| | | //发送站内信 - 经销商 |
| | | noticeService.orderPayNotice(goodsOrder.getPickUpShopId(),goodsOrder.getId(),goodsOrder.getReceiveType()); |
| | | } |
| | | Fund fund = new Fund(); |
| | | fund.setOrderCode(goodsOrder.getPayOrderId()); |
| | | fund.setCreator(goodsOrder.getMemberId()); |