Browse Source

Merge remote-tracking branch 'origin/saas' into saas

zouxuan 3 years ago
parent
commit
12b8c23288

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysCouponIssueRecordDao.java

@@ -23,5 +23,18 @@ public interface SysCouponIssueRecordDao extends BaseMapper<SysCouponIssueRecord
 
     <T> IPage<T> queryIssueRecord(Page<T> page, @Param("param") Map<String, Object> param);
 
+    int queryCouponCode(@Param("issueId") Integer issueId,@Param("state") Integer state);
+
+    /**
+     * 撤回未使用的优惠券
+     */
+    void revoke(Integer issueId);
+
+    /**
+     * @param id sys_coupon表的id
+     * @param consumeNum 消费数量
+     */
+    void opsConsume(@Param("id") Integer id,@Param("consumeNum") Integer consumeNum);
+
 }
 

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SysCouponCodeDto.java

@@ -72,6 +72,9 @@ public class SysCouponCodeDto {
     @ApiModelProperty("发放类型 0手动领取 1手动发放 2交易获取")
     private Integer issueType;
 
+    @ApiModelProperty("优惠券具体类型 - CouponDetailTypeEnum")
+    private String typeDetail;
+
     public Integer getCouponCodeId() {
         return couponCodeId;
     }
@@ -231,4 +234,12 @@ public class SysCouponCodeDto {
     public void setIssueType(Integer issueType) {
         this.issueType = issueType;
     }
+
+    public String getTypeDetail() {
+        return typeDetail;
+    }
+
+    public void setTypeDetail(String typeDetail) {
+        this.typeDetail = typeDetail;
+    }
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/CouponIssueRecordVo.java

@@ -10,6 +10,7 @@ import java.util.Date;
  * Created by 2021-12-30
  */
 public class CouponIssueRecordVo implements Serializable {
+    private Integer id;
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createdTime;
@@ -22,6 +23,14 @@ public class CouponIssueRecordVo implements Serializable {
 
     private Integer ops;
 
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
     public Date getCreatedTime() {
         return createdTime;
     }

+ 5 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/SysCouponIssueRecordService.java

@@ -18,7 +18,11 @@ public interface SysCouponIssueRecordService extends IService<SysCouponIssueReco
 
     void issueCoupon(Map<String, Object> param);
 
-    int revokeCoupon(Integer couponId);
+    void revokeCoupon(Integer couponId);
+
+    void manualIssueCoupon(Integer userId, Integer couponId);
+
+    int checkRevoke(Integer couponId);
 
     PageInfo<?> queryIssueDetail(Map<String, Object> param);
 

+ 18 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponCodeServiceImpl.java

@@ -65,7 +65,7 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
      * @param couponId:       优惠券编号
      * @param paymentOrderId: 订单编号
      * @param exchangeNum:    兑换数量
-     * @param type:          2有paymentOrderId属于订单送券,交易获取,0手动领取 1手动发放
+     * @param type:           2有paymentOrderId属于订单送券,交易获取,0手动领取 1手动发放
      */
     @Override
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
@@ -84,17 +84,26 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
     }
 
     private SysCouponCode checkParam(Integer userId, Integer couponId, Long paymentOrderId, Integer exchangeNum, int type, Integer issueId) {
+        if (type > 2 || type < 0) {
+            throw new BizException("优惠券获取途径的参数错误!");
+        }
         SysCouponCode sysCouponCode = new SysCouponCode();
-        if (type == 2 && WrapperUtil.checkObj(userId, couponId, paymentOrderId, exchangeNum)) {
-            StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.get(paymentOrderId);
-            if (Objects.isNull(studentPaymentOrder)) {
-                throw new BizException("无效订单");
+        //校验参数
+        if (WrapperUtil.checkObj(userId, couponId, exchangeNum)) {
+            //2 订单满减
+            if (type == 2 && Objects.nonNull(paymentOrderId)) {
+                StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.get(paymentOrderId);
+                if (Objects.isNull(studentPaymentOrder)) {
+                    throw new BizException("无效订单");
+                }
+                sysCouponCode.setPaymentOrderId(paymentOrderId);
+            } else if (type == 1 && Objects.nonNull(issueId)) {
+                //1 手动发券
+                sysCouponCode.setIssueId(issueId);
             }
-            sysCouponCode.setPaymentOrderId(paymentOrderId);
-        } else if ((type == 0 || type == 1) && WrapperUtil.checkObj(userId, couponId, issueId, exchangeNum)) {
-            sysCouponCode.setIssueId(issueId);
+            //0 手动领券
         } else {
-            throw new BizException("领取失败");
+            throw new BizException("领取失败,参数错误!");
         }
         sysCouponCode.setType(type);
         return sysCouponCode;

+ 48 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponIssueRecordServiceImpl.java

@@ -22,7 +22,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
 
 import java.util.Date;
 import java.util.List;
@@ -86,18 +85,56 @@ public class SysCouponIssueRecordServiceImpl extends ServiceImpl<SysCouponIssueR
 
     }
 
+    /**
+     * 手动领取优惠券
+     *
+     * @param userId   用户id
+     * @param couponId 优惠券id
+     */
     @Override
-    public int revokeCoupon(Integer id) {
-        List<SysCouponIssueRecord> issueRecords = this.list(new WrapperUtil<SysCouponIssueRecord>()
-                .hasEq("id_", id)
-                .hasEq("ops", 0)
-                .queryWrapper());
-        if (CollectionUtils.isEmpty(issueRecords)) {
-            throw new BizException("未查询到该优惠券的发放记录!");
-        }
+    @Transactional(rollbackFor = Exception.class)
+    public void manualIssueCoupon(Integer userId, Integer couponId) {
+        sysCouponCodeService.exchangeCoupon(userId, couponId,
+                null, 1, 1, null);
+    }
 
+    /**
+     * 撤回优惠券
+     *
+     * @param issueId 发放记录
+     */
+    @Override
+    public void revokeCoupon(Integer issueId) {
+        SysCouponIssueRecord issueRecord = Optional.ofNullable(issueId)
+                .map(this::getById)
+                .orElseThrow(() -> new BizException("未查询到该发放记录!"));
+
+        //修改未使用的优惠券为撤回状态
+        baseMapper.revoke(issueId);
+        //查询券的信息
+        SysCoupon sysCoupon = Optional.ofNullable(issueRecord.getCouponId())
+                .map(sysCouponService::get)
+                .orElseThrow(() -> new BizException("未查询到该优惠券!"));
+
+        //查询未使用的优惠券有多少
+        int useCount = baseMapper.queryCouponCode(issueId, 0);
+        if (useCount >= 0) {
+            //返还库存
+            baseMapper.opsConsume(sysCoupon.getId(), useCount);
+        }
+        //发放记录修改为撤回状态
+        issueRecord.setOps(1);
+        issueRecord.setUpdatedBy(getUserId());
+        issueRecord.setUpdatedTime(new Date());
+        this.updateById(issueRecord);
+    }
 
-        return 0;
+    /**
+     * 检查已使用的优惠券数量
+     */
+    @Override
+    public int checkRevoke(Integer issueId) {
+        return baseMapper.queryCouponCode(issueId, 1);//0 未使用 1已使用
     }
 
     /**
@@ -106,7 +143,7 @@ public class SysCouponIssueRecordServiceImpl extends ServiceImpl<SysCouponIssueR
     @Override
     public PageInfo<CouponIssueRecordVo> queryIssueRecord(Map<String, Object> param) {
         Page<CouponIssueRecordVo> pageInfo = PageUtil.getPageInfo(param);
-        pageInfo.setAsc("a.create_time_");
+        pageInfo.setAsc("a.created_time_");
         return PageUtil.pageInfo(baseMapper.queryIssueRecord(pageInfo, param));
     }
 

+ 2 - 0
mec-biz/src/main/resources/config/mybatis/SysCouponCodeMapper.xml

@@ -43,6 +43,7 @@
 		<result column="use_start_date_" property="useStartDate"/>
 		<result column="use_deadline_date_" property="useDeadlineDate"/>
 		<result column="issueType" property="issueType"/>
+		<result column="typeDetail" property="typeDetail"/>
 	</resultMap>
 
 	<!-- 根据主键查询一条记录 -->
@@ -196,6 +197,7 @@
 		    sc.face_value_,
 		    sc.full_amount_,
 			sc.description_ coupon_description_,
+            sc.type_detail_ as typeDetail,
 			scc.code_,
 			scc.payment_order_id_,
 			scc.use_start_date_,

+ 30 - 4
mec-biz/src/main/resources/config/mybatis/SysCouponIssueRecordMapper.xml

@@ -37,6 +37,7 @@
         , su.phone_ as phone
         , sb.name_ as subjectName
         , scc.usage_status_ as usageStatus
+        , scc.id_ as couponCodeId
         FROM student s
         LEFT JOIN sys_user su ON su.id_ = s.user_id_
         LEFT JOIN organization o ON o.id_ = su.organ_id_
@@ -58,7 +59,9 @@
     </select>
 
     <select id="queryIssueRecord" parameterType="map" resultType="com.ym.mec.biz.dal.vo.CouponIssueRecordVo">
-        select a.created_time_ as createdTime,
+        select
+        a.id_ as id,
+        a.created_time_ as createdTime,
         a.coupon_name_ as couponName,
         a.num_ as num,
         u.real_name_ as `name`,
@@ -66,11 +69,34 @@
         from sys_coupon_issue_record as a
         left join sys_user as u on a.created_by_ = u.id_
         where a.tenant_id_ = #{param.tenantId}
+        <if test="param.ops !=null">
+            and a.ops_ = #{param.ops}
+        </if>
         <if test="param.couponId !=null">
           and a.coupon_id_ =#{param.couponId}
         </if>
-        <if test="param.search !=null">
-            and a.coupon_name_ like concat('%',#{param.search},'%')
-        </if>
     </select>
+
+    <select id="queryCouponCode" resultType="integer">
+        select count(id_)
+        from sys_coupon_code
+        where issue_id_ = #{issueId}
+          and usage_status_ = #{state}
+    </select>
+
+    <update id="revoke">
+        UPDATE sys_coupon_code
+        SET usage_status_ = 2,
+            used_time_    = NOW(),
+            update_time_  = NOW()
+        WHERE issue_id_ = #{issueId}
+          and usage_status_ = 0
+    </update>
+
+    <update id="opsConsume" parameterType="object">
+        UPDATE sys_coupon
+        SET consume_num_ = consume_num_ - #{consumeNum}
+        WHERE id_ = #{id}
+    </update>
+
 </mapper>

+ 9 - 2
mec-web/src/main/java/com/ym/mec/web/controller/SysCouponIssueRecordController.java

@@ -38,10 +38,17 @@ public class SysCouponIssueRecordController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation("检查撤销的优惠券")
+    @PostMapping(value = "/checkRevoke")
+    public HttpResponseResult checkRevoke(Integer id) {
+        return succeed(couponIssueRecordService.checkRevoke(id));
+    }
+
     @ApiOperation("撤销发放优惠券")
     @PostMapping(value = "/revokeCoupon")
-    public HttpResponseResult revokeCoupon(Integer couponId) {
-        return succeed(couponIssueRecordService.revokeCoupon(couponId));
+    public HttpResponseResult revokeCoupon(Integer id) {
+        couponIssueRecordService.revokeCoupon(id);
+        return succeed();
     }
 
     @ApiOperation("查询优惠券发放名单")