zq-erp/src/main/java/com/matrix/biz/bean/BizUser.java
@@ -172,10 +172,6 @@ private Integer userType; /** * 用户总积分 */ private Integer totalScore; /** @@ -475,13 +471,7 @@ this.endTime = endTime; } public Integer getTotalScore() { return totalScore; } public void setTotalScore(Integer totalScore) { this.totalScore = totalScore; } public Integer getCurrentScore() { return currentScore; zq-erp/src/main/java/com/matrix/system/hive/bean/SysVipInfo.java
@@ -230,77 +230,6 @@ private SysOrder sysOrder; public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getArea() { return area; } public void setArea(String area) { this.area = area; } public Long getRecommendId() { return recommendId; } public void setRecommendId(Long recommendId) { this.recommendId = recommendId; } public SysOrder getSysOrder() { return sysOrder; } public void setSysOrder(SysOrder sysOrder) { this.sysOrder = sysOrder; } public Integer getIsDeal() { return isDeal; } public void setIsDeal(Integer isDeal) { this.isDeal = isDeal; } public Long getParentId() { return parentId; } public void setParentId(Long parentId) { this.parentId = parentId; } public Date getCreateDistributionTime() { return createDistributionTime; } public void setCreateDistributionTime(Date createDistributionTime) { this.createDistributionTime = createDistributionTime; } public Date getHandleTime() { return handleTime; } public void setHandleTime(Date handleTime) { this.handleTime = handleTime; } /** 扩展信息 **/ @@ -452,6 +381,77 @@ this.openId = openId; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getArea() { return area; } public void setArea(String area) { this.area = area; } public Long getRecommendId() { return recommendId; } public void setRecommendId(Long recommendId) { this.recommendId = recommendId; } public SysOrder getSysOrder() { return sysOrder; } public void setSysOrder(SysOrder sysOrder) { this.sysOrder = sysOrder; } public Integer getIsDeal() { return isDeal; } public void setIsDeal(Integer isDeal) { this.isDeal = isDeal; } public Long getParentId() { return parentId; } public void setParentId(Long parentId) { this.parentId = parentId; } public Date getCreateDistributionTime() { return createDistributionTime; } public void setCreateDistributionTime(Date createDistributionTime) { this.createDistributionTime = createDistributionTime; } public Date getHandleTime() { return handleTime; } public void setHandleTime(Date handleTime) { this.handleTime = handleTime; } public String getPayTotal() { return payTotal; } zq-erp/src/main/java/com/matrix/system/score/dao/ScoreVipDetailDao.java
@@ -1,11 +1,9 @@ package com.matrix.system.score.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; import com.matrix.core.pojo.PaginationVO; import com.matrix.system.score.entity.ScoreVipDetail; import java.util.List; /** * @description 客户积分余额 @@ -14,4 +12,18 @@ */ public interface ScoreVipDetailDao extends BaseMapper<ScoreVipDetail> { /** * 查询用户总积分 * @param openId * @param vipId * @return */ int selectUserTotalScore(String openId, Long vipId); /** * 查询用户有效的积分,按时间顺序排 * @param userId * @return */ List<ScoreVipDetail> selectEffectiveScore(String openId); } zq-erp/src/main/java/com/matrix/system/score/entity/ScoreVipDetail.java
@@ -16,10 +16,27 @@ @TableName("score_vip_detail") public class ScoreVipDetail extends BaseEntity{ @Extend private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L; /** * 获取类型(1:现金消费) */ public static final int SCORE_VIP_TYPE_CASH=1; /** * 获取类型(2:赠送等) */ public static final int SCORE_VIP_TYPE_CONSUME=2; /** * 用户openId */ private String openId; /** * erp用户Id */ private String vipId; /** zq-erp/src/main/java/com/matrix/system/score/service/ScoreVipDetailService.java
@@ -1,20 +1,81 @@ package com.matrix.system.score.service; import com.matrix.system.score.dao.ScoreVipDetailDao; import com.matrix.system.score.entity.ScoreVipDetail; import cn.hutool.core.date.DateTime; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.matrix.biz.bean.BizUser; import com.matrix.biz.dao.BizUserDao; import com.matrix.core.constance.MatrixConstance; import com.matrix.system.score.dao.ScoreUseRecordDao; import com.matrix.system.score.dao.ScoreVipDetailDao; import com.matrix.system.score.entity.ScoreUseRecord; import com.matrix.system.score.entity.ScoreVipDetail; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * @description 客户积分余额 * @author jyy * @description 客户积分余额 * @date 2021-02-26 15:26 */ @Service public class ScoreVipDetailService extends ServiceImpl<ScoreVipDetailDao, ScoreVipDetail>{ public class ScoreVipDetailService extends ServiceImpl<ScoreVipDetailDao, ScoreVipDetail> { @Autowired ScoreVipDetailDao scoreVipDetailDao; @Autowired ScoreUseRecordDao scoreUseRecordDao; @Autowired BizUserDao bizUserDao; /** * 扣除用户积分 * * @param openId * @param score * @param businessId * @param type */ public void deductionScore(String openId, Integer score, Long businessId, int type) { BizUser user = bizUserDao.findByOpenId(openId); List<ScoreVipDetail> effectiveScoreList = scoreVipDetailDao.selectEffectiveScore(openId); for (ScoreVipDetail scoreVipDetail : effectiveScoreList) { ScoreUseRecord scoreUseRecord = new ScoreUseRecord(); scoreUseRecord.setPreScore(scoreVipDetail.getRemainScore()); int surplus = scoreVipDetail.getRemainScore() - score; int currentDedution = 0; if (surplus > 0 || surplus == 0) { //余额充足 currentDedution = score; scoreVipDetail.setRemainScore(surplus); scoreVipDetailDao.updateById(scoreVipDetail); break; } else { currentDedution = scoreVipDetail.getRemainScore(); scoreVipDetail.setRemainScore(0); scoreVipDetailDao.updateById(scoreVipDetail); score=Math.abs(surplus); } //新增扣除记录 scoreUseRecord.setCreateBy(MatrixConstance.SYSTEM_USER); scoreUseRecord.setUpdateBy(MatrixConstance.SYSTEM_USER); scoreUseRecord.setCreateTime(DateTime.now()); scoreUseRecord.setUpdateTime(DateTime.now()); scoreUseRecord.setNowScore(scoreVipDetail.getRemainScore()); scoreUseRecord.setCompanyId(user.getCompanyId()); scoreUseRecord.setScoreVipDetailId(scoreVipDetail.getId()); scoreUseRecord.setBusinessId(businessId); scoreUseRecord.setRecNum(currentDedution); scoreUseRecord.setRecType(type); scoreUseRecordDao.insert(scoreUseRecord); } } } zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxCommonAction.java
@@ -12,6 +12,8 @@ import com.matrix.system.common.dao.BusParameterSettingsDao; import com.matrix.system.hive.bean.SysVipInfo; import com.matrix.system.hive.dao.SysVipInfoDao; import com.matrix.system.score.entity.ScoreVipDetail; import com.matrix.system.score.service.ScoreVipDetailService; import com.matrix.system.shopXcx.bean.ShopActivitiesGroupJoin; import com.matrix.system.shopXcx.bean.ShopActivitiesGroupJoinUser; import com.matrix.system.shopXcx.bean.ShopOrder; @@ -78,6 +80,9 @@ @Autowired BusParameterSettingsDao busParameterSettingsDao; @Autowired ScoreVipDetailService scoreVipDetailService; @@ -195,6 +200,10 @@ // 根据订单类型创建不同的处理任务 rabiitMqTemplate.sendTopicMsg(RabbitMqConfig.MQ_EXCHANGE_TOPIC +evn, MQTaskRouting.CREATE_ORDER+evn, orderId); //扣除积分 if(order.getScorePay()!=null){ scoreVipDetailService.deductionScore(order.getUserId(),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/api/action/WxShopScoreAction.java
@@ -1,23 +1,8 @@ package com.matrix.system.shopXcx.api.action; import com.matrix.biz.bean.BizUser; import com.matrix.biz.service.BizUserService; import com.matrix.component.redis.RedisUserLoginUtils; import com.matrix.core.pojo.AjaxResult; import com.matrix.core.pojo.PaginationVO; import com.matrix.component.redis.RedisUserLoginUtils; import com.matrix.system.shopXcx.bean.ShopScoreExchange; import com.matrix.system.shopXcx.bean.ShopScoreRecord; import com.matrix.system.shopXcx.dao.ShopScoreExchangeDao; import com.matrix.system.shopXcx.dao.ShopScoreRecordDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.util.List; /** * @description 用户积分控制器 @@ -29,76 +14,6 @@ @CrossOrigin(origins = "*", maxAge = 3600) public class WxShopScoreAction { @Autowired private ShopScoreRecordDao shopScoreRecordDao; @Autowired private ShopScoreExchangeDao shopScoreExchangeDao; @Autowired private RedisUserLoginUtils redisUserLoginUtils; @Autowired private BizUserService bizUserService; /** * 查询我的获得积分列表 * @return */ @RequestMapping(value = "/getRecordList") @ResponseBody public AjaxResult getRecordList(@RequestBody PaginationVO pageVo) { pageVo.setSort("create_time"); pageVo.setOrder("desc"); BizUser loginBizUser = redisUserLoginUtils.getLoginUser(BizUser.class); ShopScoreRecord params = new ShopScoreRecord(); params.setBeneficiaryId(loginBizUser.getOpenId()); List<ShopScoreRecord> dataList = shopScoreRecordDao.selectInPage(params, pageVo); int total = shopScoreRecordDao.selectTotalRecord(params); AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, dataList, total); //查询用户总积分 BizUser user = bizUserService.findById(loginBizUser.getUserId()); Integer totalScore = 0; if (user != null && user.getTotalScore() != null) { totalScore = user.getTotalScore(); } result.putInMap("totalScore", totalScore); //查询下级总人数 BizUser peopleSumParams = new BizUser(); peopleSumParams.setParentOpenId(loginBizUser.getOpenId()); int peopleSum = bizUserService.findTotal(peopleSumParams); result.putInMap("peopleSum", peopleSum); return result; } /** * 查询我的积分兑换列表 * @return */ @RequestMapping(value = "/getChangeRecordList") @ResponseBody public AjaxResult getChangeRecordList(@RequestBody PaginationVO pageVo) { //不分页 pageVo.setOffset(null); pageVo.setLimit(null); //按生成时间倒序排列 pageVo.setSort("create_time"); pageVo.setOrder("desc"); BizUser loginBizUser = redisUserLoginUtils.getLoginUser(BizUser.class); ShopScoreExchange params = new ShopScoreExchange(); params.setUserId(loginBizUser.getOpenId()); List<ShopScoreExchange> dataList = shopScoreExchangeDao.selectInPage(params, pageVo); int total = shopScoreExchangeDao.selectTotalRecord(params); AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, dataList, total); //查询用户当前积分 BizUser user = bizUserService.findById(loginBizUser.getUserId()); Integer currentScore = 0; if (user != null && user.getCurrentScore() != null) { currentScore = user.getCurrentScore(); } result.putInMap("currentScore", currentScore); return result; } } zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxUserAction.java
@@ -175,6 +175,8 @@ return new AjaxResult(AjaxResult.STATUS_SUCCESS, Collections.singletonList(bizUser)); } void checkNeedToBeSalesman(BizUser bizUser, BizUser loginUser) { //查询是否需要自动成为分销员 if ((loginUser.getIsSales() == null || loginUser.getIsSales() == 2) zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java
@@ -18,6 +18,7 @@ import com.matrix.system.common.dao.CustomerDataDictionaryDao; import com.matrix.system.common.interceptor.HostInterceptor; import com.matrix.system.hive.dao.ShoppingGoodsDao; import com.matrix.system.score.dao.ScoreVipDetailDao; import com.matrix.system.shopXcx.api.action.PayThreadPool; import com.matrix.system.shopXcx.api.pojo.OrderCouponGroup; import com.matrix.system.shopXcx.api.pojo.OrderInfoQueryPOJO; @@ -100,6 +101,9 @@ @Autowired private BusParameterSettingsDao busParameterSettingsDao; @Autowired private ScoreVipDetailDao scoreVipDetailDao; @Override public BigDecimal calculationPostage(BigDecimal payPrice, Long companyId) { BigDecimal postage = BigDecimal.ZERO; @@ -133,19 +137,17 @@ return new AjaxResult(AjaxResult.STATUS_FAIL, "请选择正确的收获地址"); } AjaxResult caculateResult= buildDiscountExplain(shopOrderDto); //计算订单优惠信息 AjaxResult caculateResult= buildDiscountExplain(shopOrderDto); DiscountExplain discountExplain= (DiscountExplain) caculateResult.getMapInfo().get("discountExplain"); //取出购物车中选中的产品 List<ShopShoppingCart> buyCart = new ArrayList<>(); //取出购物车中没有参加店铺活动的产品,和参加了店铺活动但是活动没有达到标准的产品,用来计算是否可以使用优惠券 List<ShopShoppingCart> notCouponuyCart = new ArrayList<>(); if(discountExplain.getScorePay()!=null){ //校验用户积分是否够用 int score=scoreVipDetailDao.selectUserTotalScore(bizUser.getOpenId(),null); if(score<discountExplain.getScorePay()){ return AjaxResult.buildFailInstance("积分不足"); } } ShopOrder shopOrder = new ShopOrder(); shopOrder.setCompanyId(bizUser.getCompanyId()); @@ -154,7 +156,7 @@ shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS); List<ShopOrderDetails> details = new ArrayList<>(); Integer cartCount = 0; Integer orderCount = 0; for (OrderItemDto orderItemDto : shopOrderDto.getOrderItemList()) { ShopOrderDetails shopOrderDetails = new ShopOrderDetails(); shopOrderDetails.setCreateBy(AppConstance.SYSTEM_USER); @@ -178,7 +180,12 @@ shopOrderDetails.setDiscountAmount(BigDecimal.ZERO); details.add(shopOrderDetails); cartCount += shopOrderDetails.getCount(); orderCount += shopOrderDetails.getCount(); if(orderItemDto.getCartId()!=null){ //删除用户购物车选中的产品 shoppingCartDao.deleteById(orderItemDto.getCartId()); } } //校验商品是否限购 @@ -190,7 +197,7 @@ shopOrder.setCreateBy("微信小程序生成"); shopOrder.setUpdateBy("微信小程序生成"); shopOrder.setCommodityPrice(discountExplain.getBillPrice()); shopOrder.setPurchaseQuantity(cartCount); shopOrder.setPurchaseQuantity(orderCount); shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS); //购买方式 shopOrder.setShippingMethod(shopOrderDto.getDeliverySelect()); @@ -219,6 +226,7 @@ //获取邮费 shopOrder.setPostage(discountExplain.getPostage()); shopOrder.setOrderMoney(discountExplain.getPayPrice()); shopOrder.setScorePay(discountExplain.getScorePay()); Gson g = new GsonBuilder().create(); shopOrder.setDiscountExplain(g.toJson(discountExplain)); shopOrder.setDiscountAmount(discountExplain.getActivityPrice().add(discountExplain.getCouponPrice())); @@ -242,8 +250,6 @@ shopCouponRecordDao.updateByModel(record); } //删除用户购物车选中的产品 shoppingCartDao.deleteUserSelectCart(bizUser.getOpenId()); BrandWCPayRequestData payData = startPayment(shopOrder); @@ -388,6 +394,15 @@ if (!shopOrder.getPayResult().equals(ShopOrder.ORDER_PAY_STATUS_WAIT)) { throw new GlobleException("该订单不是待支付状态!"); } if(shopOrder.getScorePay()!=null){ //校验用户积分是否够用 int score=scoreVipDetailDao.selectUserTotalScore(shopOrder.getUserId(),null); if(score<shopOrder.getScorePay()){ return AjaxResult.buildFailInstance("积分不足"); } } BrandWCPayRequestData payData = startPayment(shopOrder); AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, Arrays.asList(payData)); result.putInMap("orderId", shopOrder.getId()); zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopOrder.java
@@ -141,7 +141,10 @@ * 用户ID */ private String userId; /** * 支付积分 */ private Integer scorePay; /** * 下单时间 @@ -336,6 +339,13 @@ return orderNo; } public Integer getScorePay() { return scorePay; } public void setScorePay(Integer scorePay) { this.scorePay = scorePay; } public void setOrderNo(String orderNo) { this.orderNo = orderNo; zq-erp/src/main/resources/mybatis/mapper/score/ScoreVipDetailDao.xml
@@ -3,41 +3,23 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.matrix.system.score.dao.ScoreVipDetailDao"> <!-- 定义ScoreVipDetail 的复杂关联map --> <resultMap type="com.matrix.system.score.entity.ScoreVipDetail" id="ScoreVipDetailMap"> <id property="id" column="id" /> <result property="createBy" column="create_by" /> <result property="createTime" column="create_time" /> <result property="updateBy" column="update_by" /> <result property="updateTime" column="update_time" /> <result property="type" column="type" /> <result property="allScore" column="all_score" /> <result property="usedScore" column="used_score" /> <result property="remainScore" column="remain_score" /> <result property="gainTime" column="gain_time" /> <result property="validiteTime" column="validite_time" /> <result property="state" column="state" /> <result property="businessId" column="business_id" /> <result property="companyId" column="company_id" /> </resultMap> <!-- 定义ScoreVipDetail 的简单map ,本map不添加其他的关联属性 --> <resultMap type="com.matrix.system.score.entity.ScoreVipDetail" id="ScoreVipDetailSimpleMap"> <id property="id" column="id" /> <result property="createBy" column="create_by" /> <result property="createTime" column="create_time" /> <result property="updateBy" column="update_by" /> <result property="updateTime" column="update_time" /> <result property="type" column="type" /> <result property="allScore" column="all_score" /> <result property="usedScore" column="used_score" /> <result property="remainScore" column="remain_score" /> <result property="gainTime" column="gain_time" /> <result property="validiteTime" column="validite_time" /> <result property="state" column="state" /> <result property="businessId" column="business_id" /> <result property="companyId" column="company_id" /> </resultMap> <select id="selectUserTotalScore" resultType="java.lang.Integer"> select IFNULL(sum(IFNULL( remain_score, 0 )),0) from score_vip_detail <where> and state=1 <if test="openId !=null"> and open_id=#{openId} </if> <if test="vipId !=null"> and vip_id=#{vipId} </if> </where> </select> <select id="selectEffectiveScore" resultType="com.matrix.system.score.entity.ScoreVipDetail"> select * from score_vip_detail where open_id=#{openId} and state=1 order by create_time </select> </mapper> zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopOrderDao.xml
@@ -33,6 +33,7 @@ <result property="storeName" column="shop_name" /> <result property="orderType" column="order_type" /> <result property="applyStatus" column="apply_status" /> <result property="scorePay" column="score_pay" /> <result property="companyId" column="company_id" /> </resultMap> @@ -66,6 +67,7 @@ <result property="postage" column="postage" /> <result property="orderType" column="order_type" /> <result property="storeName" column="shop_name" /> <result property="scorePay" column="score_pay" /> <result property="companyId" column="company_id" /> <result property="activityType" column="activity_type" /> <!--支付时间--> @@ -127,6 +129,7 @@ postage, order_type, activity_type, score_pay, company_id </sql> @@ -159,6 +162,7 @@ #{item.postage}, #{item.orderType}, #{item.activityType}, #{item.scorePay}, #{item.companyId} </sql> @@ -337,6 +341,9 @@ <if test="_parameter.containsKey('orderType')"> order_type = #{orderType}, </if> <if test="_parameter.containsKey('scorePay')"> score_pay = #{scorePay}, </if> </set> WHERE id=#{id} </update> @@ -405,6 +412,9 @@ </if> <if test="record.postage != null and record.postage != '' "> postage = #{record.postage}, </if> <if test="record.scorePay != null and record.scorePay != '' "> score_pay = #{record.scorePay}, </if> <if test="true"> update_time = now(), @@ -558,6 +568,7 @@ o.postage, s.shop_name, o.order_type, o.score_pay, o.apply_status from shop_order o INNER JOIN sys_shop_info s on o.store_id = s.ID @@ -629,6 +640,7 @@ o.pay_result, o.postage, s.store_name, s.score_pay, o.order_type from shop_order o LEFT JOIN shop_store s on o.store_id = s.store_id zq-erp/src/test/java/com/matrix/JyyTests.java
@@ -1,5 +1,6 @@ package com.matrix; import com.matrix.system.score.dao.ScoreVipDetailDao; import com.matrix.system.shopXcx.dao.ShopOrderV2Dao; import org.junit.Test; import org.junit.runner.RunWith; @@ -22,12 +23,18 @@ @Autowired private ShopOrderV2Dao shopOrderV2Dao; @Autowired ScoreVipDetailDao scoreVipDetailDao; /** * */ @Test public void scoreVipDetailDao() throws InterruptedException { System.out.println( scoreVipDetailDao.selectUserTotalScore("oJkRK4yelehsY4S7I6Ee1ydWtQMI",null)); } @Test public void testSelectReceivedOrderCount() throws InterruptedException { System.out.println( shopOrderV2Dao.selectReceivedOrderCount("oJkRK4yelehsY4S7I6Ee1ydWtQMI")); }