doum
10 小时以前 e8dd7cfa6bbfd8be4a52f24e03c74f853cc6ac4f
Merge remote-tracking branch 'origin/master'
已修改15个文件
522 ■■■■ 文件已修改
server/dmmall_admin/src/main/java/com/doumee/api/business/WithdrawRecordController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Notice.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/NoticeCardDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/web/response/HomeInfoResponse.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/NoticeService.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/WithdrawRecordService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/AftersaleServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java 230 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/NoticeServiceImpl.java 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/WithdrawRecordServiceImpl.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/NoticeApi.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_web/src/main/java/com/doumee/api/web/mall/PaymentCallback.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_admin/src/main/java/com/doumee/api/business/WithdrawRecordController.java
@@ -7,6 +7,7 @@
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;
@@ -29,6 +30,9 @@
    @Autowired
    private WithdrawRecordService withdrawRecordService;
    @Autowired
    private IntegralService integralService;
    @PreventRepeat
    @ApiOperation("新建")
@@ -63,7 +67,7 @@
    @PostMapping("/updateById")
    @RequiresPermissions("business:withdrawrecord:update")
    public ApiResponse updateById(@RequestBody WithdrawRecord withdrawRecord) {
        withdrawRecordService.updateById(withdrawRecord);
        withdrawRecordService.updateById(withdrawRecord,integralService);
        return ApiResponse.success(null);
    }
server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -884,26 +884,26 @@
        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),
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Notice.java
@@ -84,8 +84,8 @@
    @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")
@@ -104,4 +104,7 @@
    @TableField(exist = false)
    private Integer shopId;
    @ApiModelProperty(value = "查询类型:0=系统消息;1=社区消息;", example = "1")
    @TableField(exist = false)
    private Integer queryType;
}
server/dmmall_service/src/main/java/com/doumee/dao/web/dto/NoticeCardDTO.java
@@ -31,7 +31,7 @@
    @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")
server/dmmall_service/src/main/java/com/doumee/dao/web/response/HomeInfoResponse.java
@@ -32,5 +32,8 @@
    @ApiModelProperty(value = "待收货数量")
    private Long waitReceiveNum;
    @ApiModelProperty(value = "是否存在未读:0=无;1=存在")
    private Integer unRead;
}
server/dmmall_service/src/main/java/com/doumee/service/business/NoticeService.java
@@ -5,6 +5,7 @@
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;
@@ -119,4 +120,46 @@
                                  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 );
}
server/dmmall_service/src/main/java/com/doumee/service/business/WithdrawRecordService.java
@@ -48,7 +48,7 @@
     *
     * @param withdrawRecord 实体对象
     */
    void updateById(WithdrawRecord withdrawRecord);
    void updateById(WithdrawRecord withdrawRecord, IntegralService integralService);
    /**
     * 批量主键更新
server/dmmall_service/src/main/java/com/doumee/service/business/impl/AftersaleServiceImpl.java
@@ -1045,7 +1045,7 @@
        aftersale.setReturnShopSettlement(BigDecimal.ZERO);
        aftersale.setCode(getNextInCode());
        //订单退回 返回给经销商的积分
        //订单退回返回给经销商的积分
        if(Objects.nonNull(goodsorder.getDistributionShopId())&&goodsorder.getReturnCustomerIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
            Shop shop = shopMapper.selectById(goodsorder.getDistributionShopId());
            //经销商存在剩余积分
@@ -1122,6 +1122,7 @@
            dealIntegralRequest.setObjId(goodsorder.getId());
            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.MEMBER_ORDER_REFUND);
            dealIntegralRequest.setParam1(goodsorder.getCode().toString());
            integralService.dealIntegral(dealIntegralRequest);
        }
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -36,6 +36,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;
@@ -90,6 +91,10 @@
    private MemberMapper memberMapper;
    @Autowired
    private CouponMapper couponMapper;
    @Autowired
    private NoticeService noticeService;
    @Autowired
    private NoticeMapper noticeMapper;
    @Autowired
    private MemberCouponJoinMapper memberCouponJoinMapper;
    @Autowired
@@ -708,187 +713,6 @@
    /****************************************移动端接口开始********************************************************************/
    @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){
@@ -1068,7 +892,7 @@
            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);
        }
@@ -1089,6 +913,13 @@
        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;
    }
@@ -1316,7 +1147,7 @@
            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);
        }
        //订单信息取消
@@ -1342,8 +1173,6 @@
        }
        SendWxMessage.orderCancel(goodsorder,memberMapper.selectById(goodsorder.getMemberId()),goodsName);
        //查询优惠券信息记录
        if(!Objects.isNull(goodsorder.getCouponId())){
@@ -1398,7 +1227,7 @@
            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);
        }
        //订单信息取消
@@ -1423,7 +1252,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())){
@@ -1808,6 +1640,7 @@
        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");
@@ -1821,9 +1654,19 @@
                }
                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()
@@ -1898,7 +1741,11 @@
            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);
        }
    }
@@ -2233,6 +2080,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;
    }
server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java
@@ -208,6 +208,14 @@
        }else{
            shopMapper.subtractIntegral(shop.getId(),dealIntegralRequest.getIntegralNum());
        }
        //站内信
        noticeService.saveMemberIntegralNotice(
                dealIntegralRequest.getIntegralObjType(),Constants.ZERO,shop.getId(),dealIntegralRequest.getIntegralNum(),
                integral.getId(), dealIntegralRequest.getParam1()
        );
        return integral.getId();
    }
@@ -462,21 +470,32 @@
            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)){
@@ -485,34 +504,45 @@
            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){
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -475,9 +475,6 @@
            dealIntegralRequest.setParam1(member.getNickname());
            integralService.dealIntegral(dealIntegralRequest);
        }
    }
server/dmmall_service/src/main/java/com/doumee/service/business/impl/NoticeServiceImpl.java
@@ -30,6 +30,7 @@
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;
@@ -216,24 +217,30 @@
    @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());
        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<>());
            noticeCardDTOs = noticeIPage.getRecords().stream().map(s -> {
                NoticeCardDTO noticeCardDTO = new NoticeCardDTO();
                BeanUtils.copyProperties(s, noticeCardDTO);
                return noticeCardDTO;
            }).collect(Collectors.toList());
        }
        List<NoticeCardDTO> 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());
@@ -293,14 +300,16 @@
    }
    /**
     * 发放优惠券
     * 发放优惠券 站内信
     * @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)?
@@ -322,6 +331,13 @@
    }
    /**
     * 积分过期 站内消息
     * @param memberId
     * @param integral
     * @param expireDateNum
     */
    @Override
    public void expireNotice(Integer memberId, BigDecimal integral,Integer expireDateNum){
        //您有1000积分30天后过期,请尽快使用
        String noticeInfo = "您有${param}积分即将过期,请尽快使用";
@@ -340,7 +356,13 @@
    }
    /**
     * 评论消息 站内信
     * @param memberId
     * @param objId
     * @param memberName
     */
    @Override
    public void commonNotice(Integer memberId, Integer objId,String memberName ){
        //您有1000积分30天后过期,请尽快使用
        String noticeInfo = "${param}回复了您的评论";
@@ -351,10 +373,17 @@
                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;
@@ -373,6 +402,13 @@
    }
    /**
     * 订单取消 发送站内信
     * @param shopId
     * @param objId
     * @param orderNo
     */
    @Override
    public void orderCancelNotice(Integer shopId, Integer objId,String orderNo){
        // 您的订单{订单号},已由客户手动取消,请知悉
        String noticeInfo = " 您的订单${param},已由客户手动取消,请知悉";
server/dmmall_service/src/main/java/com/doumee/service/business/impl/WithdrawRecordServiceImpl.java
@@ -52,6 +52,7 @@
    @Autowired
    private WithdrawRecordMapper withdrawRecordMapper;
    @Autowired
    private ShopMapper shopMapper;
@@ -101,7 +102,7 @@
     */
    @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)){
@@ -126,7 +127,20 @@
        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){
@@ -153,7 +167,7 @@
            return;
        }
        for (WithdrawRecord withdrawRecord: withdrawRecords) {
            this.updateById(withdrawRecord);
//            this.updateById(withdrawRecord);
        }
    }
server/dmmall_web/src/main/java/com/doumee/api/web/NoticeApi.java
@@ -9,6 +9,8 @@
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.*;
@@ -16,7 +18,7 @@
@Api(tags = "消息通知信业务")
@Trace(exclude = true)
@LoginRequired
//@RestController
@RestController
@RequestMapping("/web/notice")
@Slf4j
public class NoticeApi extends ApiController{
@@ -27,10 +29,15 @@
     * @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));
    }
server/dmmall_web/src/main/java/com/doumee/api/web/mall/PaymentCallback.java
@@ -118,6 +118,10 @@
                        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());