jyy
2021-03-22 d08ec8845a4c2663b3502cd83872964b07d7d589
积分商城11
1 files added
7 files modified
201 ■■■■■ changed files
zq-erp/src/main/java/com/matrix/config/RabbitMqConfig.java 6 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/score/dao/ScoreVipDetailDao.java 5 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/score/service/ScoreVipDetailService.java 53 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java 5 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/MQTaskRouting.java 1 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/SalesOrderRefundTask.java 18 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/ScoreOrderTask.java 77 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/shop/shopProduct-form.html 36 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/config/RabbitMqConfig.java
@@ -39,6 +39,11 @@
    public static final String MQ_EXCHANGE_TOPIC = "hive_exchange_fanout";
    @Bean
    ScoreOrderTask ScoreOrderTask() {
        return new ScoreOrderTask();
    }
    @Bean
    VipCreateTask VipCreateTask() {
        return new VipCreateTask();
    }
@@ -96,6 +101,7 @@
        //不同任务在不同的队列,但是routingKey一样则可以收到生产者消息
        taskList.add(new MqTask(MQ_EXCHANGE_TOPIC + evn, MQTaskRouting.CREATE_ORDER + evn,MQTaskRouting.CREATE_ORDER + evn,SalesOrderTask()));
        taskList.add(new MqTask(MQ_EXCHANGE_TOPIC + evn, MQTaskRouting.SALES_ORDER + evn,MQTaskRouting.CREATE_ORDER + evn,OrderrCreateTask()));
        taskList.add(new MqTask(MQ_EXCHANGE_TOPIC + evn, MQTaskRouting.SCORE_ORDER + evn,MQTaskRouting.CREATE_ORDER + evn,ScoreOrderTask()));
        rabiitMqTemplate.binding(taskList);
zq-erp/src/main/java/com/matrix/system/score/dao/ScoreVipDetailDao.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.matrix.system.score.entity.ScoreVipDetail;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -18,12 +19,12 @@
     * @param vipId
     * @return
     */
    int selectUserTotalScore(String openId, Long vipId);
    int selectUserTotalScore(@Param("openId") String openId, @Param("openId")Long vipId);
    /**
     * 查询用户有效的积分,按时间顺序排
     * @param
     * @return
     */
    List<ScoreVipDetail> selectEffectiveScore(String openId, Long vipId);
    List<ScoreVipDetail> selectEffectiveScore(@Param("openId") String openId, @Param("openId")Long vipId);
}
zq-erp/src/main/java/com/matrix/system/score/service/ScoreVipDetailService.java
@@ -1,6 +1,7 @@
package com.matrix.system.score.service;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.matrix.biz.dao.BizUserDao;
import com.matrix.core.constance.MatrixConstance;
@@ -51,11 +52,6 @@
    /**
     * 扣除用户积分
     *
     * @param openId
     * @param score
     * @param businessId
     * @param type
     */
    @Transactional(rollbackFor = Exception.class)
    public void deductionScore(String openId, Long vipId,Long shopId, Integer score, Long businessId, int type) {
@@ -120,12 +116,6 @@
    /**
     * 新增用户积分
     * @param openId
     * @param vipId
     * @param oprationUserId
     * @param score
     * @param businessId
     * @param type
     */
    @Transactional(rollbackFor = Exception.class)
    public void addScore(String openId, Long vipId, Long oprationUserId,Long shopId, Integer score, Long businessId, int type) {
@@ -193,5 +183,46 @@
    }
    /**
     * 退积分
     */
    public void refundScore(String openId, Long vipId, Integer score, Long oldBusinessId, int type){
        Long companyId=null;
        if(openId!=null){
            companyId= bizUserDao.findByOpenId(openId).getCompanyId();
        }else if(vipId!=null){
            companyId= vipInfoDao.selectById(vipId).getCompanyId();
        }else{
            throw new IllegalArgumentException("vipId,openId必须有一个");
        }
        if(score<0){
            throw new IllegalArgumentException("score必须有为大于零的数");
        }
        //查询原始使用记录
        QueryWrapper queryWrapper=new QueryWrapper();
        queryWrapper.eq("business_id",oldBusinessId);
        queryWrapper.eq("company_id",companyId);
        queryWrapper.eq("type",type);
        List<ScoreUseRecord> scoreUseRecordList = scoreUseRecordDao.selectList(queryWrapper);
        scoreUseRecordList.forEach(scoreUseRecord -> {
            ScoreVipDetail scoreVipDetail = scoreVipDetailDao.selectById(scoreUseRecord.getScoreVipDetailId());
            if(scoreVipDetail!=null){
                if(DateTime.now().isAfter(scoreVipDetail.getValiditeTime())){
                    //积分还有效
                    scoreVipDetail.setRemainScore( scoreVipDetail.getRemainScore()+score);
                    scoreVipDetail.setUsedScore(scoreVipDetail.getUsedScore()-score);
                    scoreVipDetail.setState(ScoreVipDetail.SCORE_STATUS_YX);
                    scoreVipDetailDao.updateById(scoreVipDetail);
                    scoreUseRecordDao.deleteById(scoreUseRecord.getId());
                }
            }
        });
    }
    public static void main(String[] args) {
        System.out.println(DateTime.now().isAfter(DateTime.of("2020-11-11 23:22","yyyy-MM-dd HH:mm")));
    }
}
zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java
@@ -200,10 +200,7 @@
                            // 根据订单类型创建不同的处理任务
                            rabiitMqTemplate.sendTopicMsg(RabbitMqConfig.MQ_EXCHANGE_TOPIC +evn, MQTaskRouting.CREATE_ORDER+evn, orderId);
                            //扣除积分
                            if(order.getScorePay()!=null){
                                scoreVipDetailService.deductionScore(order.getUserId(),null,Long.parseLong(order.getStoreId()+""),order.getScorePay(),Long.parseLong(order.getId()+""), ScoreVipDetail.SCORE_VIP_TYPE_CASH);
                            }
                            threadResult.putInMap("status", "success");
                            resXml = AppConstance.RESULT_XML_SUCCESS;
zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/MQTaskRouting.java
@@ -9,6 +9,7 @@
    String CREATE_ORDER = "CREATE_ORDER";
    String SALES_ORDER = "SALES_ORDER";
    String SCORE_ORDER = "SCORE_ORDER";
    /**
     * 发送微信消息
     */
zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/SalesOrderRefundTask.java
@@ -5,6 +5,10 @@
import com.matrix.core.tools.LogUtil;
import com.matrix.system.fenxiao.dao.ShopSalesmanOrderDao;
import com.matrix.system.fenxiao.entity.ShopSalesmanOrder;
import com.matrix.system.score.entity.ScoreVipDetail;
import com.matrix.system.score.service.ScoreVipDetailService;
import com.matrix.system.shopXcx.bean.ShopOrder;
import com.matrix.system.shopXcx.dao.ShopOrderDao;
import com.rabbitmq.client.DeliverCallback;
import com.rabbitmq.client.Delivery;
import org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +26,12 @@
    @Autowired
    private ShopSalesmanOrderDao shopSalesmanOrderDao;
    @Autowired
        private ShopOrderDao shopOrderDao;
    @Autowired
    private ScoreVipDetailService scoreVipDetailService;
    @Override
@@ -38,6 +48,14 @@
        }else{
            LogUtil.debug("改订单为生成分销订单={}", orderId);
        }
        ShopOrder order=shopOrderDao.selectById(Integer.parseInt(orderId));
        if(order.getScorePay()!=null && order.getScorePay()>0){
            LogUtil.debug("处理积分退款={}", orderId);
            scoreVipDetailService.refundScore(order.getUserId(),null,order.getScorePay(),Long.parseLong(order.getId()+""), ScoreVipDetail.SCORE_VIP_TYPE_CASH);
        }
    }
}
zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/ScoreOrderTask.java
New file
@@ -0,0 +1,77 @@
package com.matrix.system.shopXcx.mqTask;
import com.matrix.biz.service.BizUserService;
import com.matrix.core.tools.LogUtil;
import com.matrix.system.score.entity.ScoreVipDetail;
import com.matrix.system.score.service.ScoreVipDetailService;
import com.matrix.system.shopXcx.bean.ShopOrder;
import com.matrix.system.shopXcx.bean.ShopOrderDetails;
import com.matrix.system.shopXcx.dao.ShopOrderDao;
import com.matrix.system.shopXcx.dao.ShopOrderDetailsDao;
import com.rabbitmq.client.DeliverCallback;
import com.rabbitmq.client.Delivery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.List;
/**
 * 订单创建积分事件处理
 */
@Component
public class ScoreOrderTask implements DeliverCallback {
    @Autowired
    ShopOrderDao shopOrderDao;
    @Autowired
    ShopOrderDetailsDao shopOrderDetailsDao;
    @Autowired
    BizUserService bizUserService;
    @Autowired
    ScoreVipDetailService scoreVipDetailService;
    @Override
    public void handle(String consumerTag, Delivery message) throws IOException {
        String orderId = new String(message.getBody(), "UTF-8");
        LogUtil.debug("收到订单积分任务orderId={}", orderId);
        //获取订单信息
        ShopOrder order = shopOrderDao.selectById(Integer.valueOf(orderId));
        //获取订单详情
        List<ShopOrderDetails> orderDetails = shopOrderDetailsDao.selectByOrderId(Integer.valueOf(orderId));
        order.setDetails(orderDetails);
        //扣除积分
        if(order.getScorePay()!=null){
            scoreVipDetailService.deductionScore(order.getUserId(),null,Long.parseLong(order.getStoreId()+""),order.getScorePay(),Long.parseLong(order.getId()+""), ScoreVipDetail.SCORE_VIP_TYPE_CASH);
        }
        //消费获得积分
        orderDetails.forEach(shopOrderDetail -> {
            int addScore=0;
            if(shopOrderDetail.getPayType()==ShopOrderDetails.PAYTYPE_MICRO){
              Integer xfkdScore=  shopOrderDetail.getShopSku().getScore();
              if(xfkdScore!=null && xfkdScore>0){
                  addScore+=xfkdScore;
              }
            }
            if(addScore>0){
                //插入新的积分
                scoreVipDetailService.addScore(
                        order.getUserId(),null,
                        null,
                       Long.parseLong(order.getStoreId()+""),
                        addScore,
                        Long.parseLong(orderId+""),
                        ScoreVipDetail.SCORE_VIP_TYPE_CASH);
            }
        });
    }
}
zq-erp/src/main/resources/templates/views/admin/shop/shopProduct-form.html
@@ -825,6 +825,11 @@
    /*验证sku表格中的参数*/
    function getSkusValues() {
        var ableScorePay=$("#ableScorePay").val();
        var ableSales=$("#ableSales").val();
        var flag = false;
        var reg = new RegExp("(^[1-9]([0-9]+)?(\\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\\.[0-9]([0-9])?$)");
        $("#skutable tbody").find("tr").each(function(i) {
@@ -832,6 +837,37 @@
            if (i != 0) {
                var tds = $(this).find("td");
                var length = tds.length - 1;
                if(ableSales==1){
                    //推广提成
                    var sealesPrice = tds.eq(length - 4).find("input").val();
                    //邀请提成
                    var invitationPrice = tds.eq(length - 3).find("input").val();
                    if(sealesPrice == ""||invitationPrice==""){
                        layer.msg("请填写推广提成和邀请提成",{
                            icon : 2,
                            time : 2000
                        });
                        flag = true;
                        return false;
                    }
                }
                if(ableScorePay==1){
                    //兑换所需金额
                    var scorePrice = tds.eq(length - 2).find("input").val();
                    //兑换所需积分
                    var scoreCount = tds.eq(length - 1).find("input").val();
                    if(scorePrice == ""||scoreCount==""){
                        layer.msg("请填写兑换所需金额和积分",{
                            icon : 2,
                            time : 2000
                        });
                        flag = true;
                        return false;
                    }
                }
                var name = tds.eq(length - 11).find("input").val();
                if(name == ""){
                    layer.msg("请填写规格名称",{