doum
12 小时以前 0a206f3acb9af0ec9db650861d34a256cda1c960
server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java
@@ -7,15 +7,11 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.IntegralMapper;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.ShopMapper;
import com.doumee.dao.business.*;
import com.doumee.dao.business.join.IntegralJoinMapper;
import com.doumee.dao.business.model.Fund;
import com.doumee.dao.business.model.Integral;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Shop;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.model.SystemDictData;
import com.doumee.dao.web.dto.IntegralDTO;
import com.doumee.dao.web.dto.IntegralRecordDTO;
@@ -67,6 +63,12 @@
    @Autowired
    private ShopMapper shopMapper;
    @Autowired
    private WithdrawRecordMapper withdrawRecordMapper;
    @Autowired
    private GoodsorderMapper goodsorderMapper;
    @Autowired
    private NoticeService noticeService;
@@ -155,7 +157,12 @@
        integral.setCreator(member.getId());
        integral.setIsdeleted(Constants.ZERO);
        integral.setTitle(dealIntegralRequest.getIntegralObjType().getName());
        integral.setContent(dealIntegralRequest.getIntegralObjType().getNoteinfo());
        String info = dealIntegralRequest.getIntegralObjType().getNoteinfo();
        info = info.replace("${param}",dealIntegralRequest.getIntegralNum().toString());
        if(StringUtils.isNotBlank(dealIntegralRequest.getParam1())){
            info = info .replace("${param1}",dealIntegralRequest.getParam1());
        }
        integral.setContent(info);
        integral.setObjId(dealIntegralRequest.getObjId());
        integral.setObjType(dealIntegralRequest.getIntegralObjType().getKey());
        integral.setType(dealIntegralRequest.getDealType());
@@ -174,7 +181,7 @@
        //站内信
        noticeService.saveMemberIntegralNotice(
                dealIntegralRequest.getIntegralObjType(),Constants.ZERO,member.getId(),dealIntegralRequest.getIntegralNum(),
                integral.getId(), dealIntegralRequest.getParam1()
                integral.getId(), info
        );
@@ -193,7 +200,12 @@
        integral.setCreateDate(new Date());
        integral.setIsdeleted(Constants.ZERO);
        integral.setTitle(dealIntegralRequest.getIntegralObjType().getName());
        integral.setContent(dealIntegralRequest.getIntegralObjType().getNoteinfo());
        String info = dealIntegralRequest.getIntegralObjType().getNoteinfo();
        info = info.replace("${param}",dealIntegralRequest.getIntegralNum().toString());
        if(StringUtils.isNotBlank(dealIntegralRequest.getParam1())){
            info = info .replace("${param1}",dealIntegralRequest.getParam1());
        }
        integral.setContent(info);
        integral.setObjId(dealIntegralRequest.getObjId());
        integral.setObjType(dealIntegralRequest.getIntegralObjType().getKey());
        integral.setType(dealIntegralRequest.getDealType());
@@ -203,11 +215,19 @@
        integral.setUserType(Constants.ONE);
        integralMapper.insert(integral);
        if(dealIntegralRequest.getDealType().equals(Constants.ZERO)){
            shopMapper.addIntegral(shop.getId(),dealIntegralRequest.getIntegralNum(),
                    dealIntegralRequest.getIntegralObjType().getAddTitle()==Constants.ZERO?dealIntegralRequest.getIntegralNum():BigDecimal.ZERO);
        }else{
            shopMapper.subtractIntegral(shop.getId(),dealIntegralRequest.getIntegralNum());
        }
        //站内信
        noticeService.saveMemberIntegralNotice(
                dealIntegralRequest.getIntegralObjType(),Constants.ZERO,shop.getId(),dealIntegralRequest.getIntegralNum(),
                integral.getId(), info
        );
        return integral.getId();
    }
@@ -224,11 +244,16 @@
        integral.setCreateDate(new Date());
        integral.setIsdeleted(Constants.ZERO);
        integral.setTitle(dealIntegralRequest.getIntegralObjType().getName());
        integral.setContent(dealIntegralRequest.getIntegralObjType().getNoteinfo());
        integral.setNum(dealIntegralRequest.getIntegralNum());
        String info = dealIntegralRequest.getIntegralObjType().getNoteinfo();
        info = info.replace("${param}",integral.getNum().toString());
        if(StringUtils.isNotBlank(dealIntegralRequest.getParam1())){
            info = info .replace("${param1}",dealIntegralRequest.getParam1());
        }
        integral.setContent(info);
        integral.setObjId(dealIntegralRequest.getObjId());
        integral.setObjType(dealIntegralRequest.getIntegralObjType().getKey());
        integral.setType(dealIntegralRequest.getDealType());
        integral.setNum(dealIntegralRequest.getIntegralNum());
        integral.setTotalNum(dealIntegralRequest.getDealType().equals(Constants.ZERO)? shop.getAmount().add(integral.getNum()):shop.getAmount().subtract(integral.getNum()));
        integral.setOrderCode(dealIntegralRequest.getOrderCode());
        integral.setUserType(Constants.TWO);
@@ -349,7 +374,7 @@
        if (pageWrap.getModel().getEndtime() != null) {
            queryWrapper.le(Integral::getCreateDate, pageWrap.getModel().getEndtime());
        }
        queryWrapper.orderByDesc(Integral::getCreateDate);
        queryWrapper.orderByDesc(Integral::getId);
        IPage<Integral> result = integralJoinMapper.selectJoinPage(page, Integral.class, queryWrapper);
        String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OSS, Constants.MEMBER_FILE).getCode();
@@ -422,6 +447,10 @@
                .lambda()
                .eq(Objects.nonNull(model.getUserType()),Integral::getUserType,model.getUserType())
                .eq(Objects.nonNull(model.getType()),Integral::getType,model.getType())
                .eq(Objects.nonNull(model.getObjType()),Integral::getObjType,model.getObjType())
                .ge(Objects.nonNull(model.getStartDate()),Integral::getCreateDate,  model.getStartDate()+" 00:00:00")
                .le(Objects.nonNull(model.getEndDate()),Integral::getCreateDate,  model.getEndDate()+" 23:59:59")
                .eq(Objects.nonNull(model.getObjType()),Integral::getObjType,model.getObjType())
                .eq(Integral::getMemberId,model.getMemberId())
                .orderByDesc(Integral::getCreateDate)
        );
@@ -429,9 +458,46 @@
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(result.getRecords())){
            for (Integral integral:result.getRecords()) {
                integral.setStrObjType(Constants.IntegralObjType.getName(integral.getObjType()));
                //余额提现 关联 提现记录
                if(Constants.equalsInteger(integral.getObjType(),Constants.IntegralObjType.WITHDRAW_APPLY.getKey())){
                    WithdrawRecord withdrawRecord = withdrawRecordMapper.selectById(integral.getObjId());
                    if(Objects.nonNull(withdrawRecord)){
                        integral.setWithdrawStatus(withdrawRecord.getStatus());
                    }
                }
            }
        }
        return PageData.from(result);
        PageData<Integral> rr =  PageData.from(result);
        if(pageWrap.getPage() == 1  && Constants.equalsInteger(model.getUserType(),Constants.TWO)){
            //如果查询第一页,做数据统计
            rr.setCountData(dealCountIntegralNum(pageWrap));
        }
        return rr;
    }
    private Integral dealCountIntegralNum(PageWrap<IntegralRecordDTO> pageWrap) {
        IntegralRecordDTO model = pageWrap.getModel();
        List<Integral> result = integralMapper.selectList(new QueryWrapper<Integral>()
                .lambda()
                .eq(Objects.nonNull(model.getUserType()),Integral::getUserType,model.getUserType())
                .eq(Objects.nonNull(model.getType()),Integral::getType,model.getType())
                .eq(Objects.nonNull(model.getObjType()),Integral::getObjType,model.getObjType())
                .ge(Objects.nonNull(model.getStartDate()),Integral::getCreateDate,  model.getStartDate()+" 00:00:00")
                .le(Objects.nonNull(model.getEndDate()),Integral::getCreateDate,  model.getEndDate()+" 23:59:59")
                .eq(Objects.nonNull(model.getObjType()),Integral::getObjType,model.getObjType())
                .eq(Integral::getMemberId,model.getMemberId())
                .orderByDesc(Integral::getCreateDate)
        );
        Integral integral = new Integral();
        integral.setInAmount(BigDecimal.ZERO);
        integral.setOutAmount(BigDecimal.ZERO);
        if(CollectionUtils.isEmpty( result)){
            return integral;
        }
        integral.setInAmount(result.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ZERO)).map(i->i.getNum()).reduce(BigDecimal.ZERO,BigDecimal::add));
        integral.setOutAmount(result.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)).map(i->i.getNum()).reduce(BigDecimal.ZERO,BigDecimal::add));
        return integral;
    }
    @Override
@@ -462,21 +528,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,56 +562,97 @@
            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){
        if(Objects.isNull(model)
            || Objects.isNull(model.getUserType())
            || Objects.isNull(model.getMemberId())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        IntegralDataResponse integralDataResponse = new IntegralDataResponse();
        integralDataResponse.setSurplusIntegral(BigDecimal.ZERO);
        integralDataResponse.setExpiredIntegral(BigDecimal.ZERO);
        Shop shop = shopMapper.selectById(model.getMemberId());
        if (Objects.nonNull(shop)) {
            integralDataResponse.setSurplusIntegral(
                    Constants.equalsInteger(model.getUserType(),Constants.TWO)?shop.getAmount():shop.getIntegral());
        }
        List<Integral> list = integralMapper.selectList(new QueryWrapper<Integral>().lambda()
                .eq(Objects.nonNull(model.getUserType()),Integral::getUserType,model.getUserType())
                .eq(Objects.nonNull(model.getType()),Integral::getType,model.getType())
                .eq(Integral::getMemberId,model.getMemberId())
                .orderByDesc(Integral::getCreateDate));
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){
            integralDataResponse.setSurplusIntegral(
                    list.stream().map(i->i.getNum().multiply(new BigDecimal(i.getType().toString()))
                    ).reduce(BigDecimal.ZERO, BigDecimal::add)
            );
            //提现业务数据
            if(Constants.equalsInteger(model.getUserType(),Constants.TWO)){
                integralDataResponse.setWithdrawAmount(
                        withdrawRecordMapper.selectList(new QueryWrapper<WithdrawRecord>().lambda()
                                .eq(WithdrawRecord::getMemberId,model.getMemberId())
                                .eq(WithdrawRecord::getStatus,Constants.ONE)
                        ).stream().map(WithdrawRecord::getAmount)
                        .reduce(BigDecimal.ZERO, BigDecimal::add)
                );
                integralDataResponse.setWithdrawIngAmount(
                        withdrawRecordMapper.selectList(new QueryWrapper<WithdrawRecord>().lambda()
                                        .eq(WithdrawRecord::getMemberId,model.getMemberId())
                                        .eq(WithdrawRecord::getStatus,Constants.ZERO)
                                ).stream().map(WithdrawRecord::getAmount)
                                .reduce(BigDecimal.ZERO, BigDecimal::add)
                );
                integralDataResponse.setWaitPayAmount(
                        goodsorderMapper.selectList(new QueryWrapper<Goodsorder>().lambda()
                                .eq(Goodsorder::getDistributionShopId,model.getMemberId())
                                .in(Goodsorder::getStatus,Constants.OrderStatus.WAIT_PAY.getKey(),
                                        Constants.OrderStatus.PAY_DONE.getKey(),
                                        Constants.OrderStatus.WAIT_RECEIVE.getKey())
                        ).stream().map(Goodsorder::getShopSettlement)
                        .reduce(BigDecimal.ZERO, BigDecimal::add)
                );
            }
            //积分失效方式 0长期有效 1按积分产生时间失效
            Integer type  = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET, Constants.INTERALSET_INTEGRALINVALIDTYPE).getCode());
            //消费者积分 需要查询即将过期积分
            if(Constants.equalsInteger(type,Constants.ZERO)){
            if(Constants.equalsInteger(type,Constants.ONE)&& Constants.equalsInteger(model.getUserType(),Constants.ONE)){
                Integer validYear  = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET, Constants.INTERALSET_INTEGRALINVALIDCIRCLE).getCode());
                if(validYear.compareTo(Constants.ZERO)>Constants.ZERO){
                     list = integralMapper.selectList(new QueryWrapper<Integral>().lambda()