diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/tp/TpApplyFormDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/tp/TpApplyFormDAO.java index eb44a0f5e..dc3a459e1 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/tp/TpApplyFormDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/tp/TpApplyFormDAO.java @@ -1,7 +1,6 @@ package com.cool.store.dao.tp; import cn.hutool.core.collection.CollStreamUtil; -import com.alibaba.excel.util.CollectionUtils; import com.cool.store.entity.tp.TpApplyFormDO; import com.cool.store.enums.tp.TpFormStatusEnum; import com.cool.store.enums.tp.TpFormTypeEnum; @@ -9,6 +8,7 @@ import com.cool.store.enums.tp.TpPayStatusEnum; import com.cool.store.mapper.tp.TpApplyFormMapper; import com.cool.store.request.tp.TpApplyQueryRequest; import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Repository; import tk.mybatis.mapper.entity.Example; @@ -111,10 +111,10 @@ public class TpApplyFormDAO { * 是否存在待审批的申请单 * @param storeId 门店id * @param ruleId 规则id - * @param isReward 是否是加分申请 + * @param types 单据类型 * @return 是否存在 */ - public boolean existsPendingApply(String storeId, Long ruleId, boolean isReward) { + public boolean existsPendingApply(String storeId, Long ruleId, List types) { Example example = new Example(TpApplyFormDO.class); Example.Criteria criteria = example.createCriteria() .andEqualTo("storeId", storeId) @@ -122,10 +122,8 @@ public class TpApplyFormDAO { .andEqualTo("status", TpFormStatusEnum.PENDING.getStatus()) .andEqualTo("isDraft", 0) .andEqualTo("deleted", 0); - if (isReward) { - criteria.andEqualTo("type", TpFormTypeEnum.REWARD.getType()); - } else { - criteria.andNotEqualTo("type", TpFormTypeEnum.REWARD.getType()); + if (CollectionUtils.isNotEmpty(types)) { + criteria.andIn("type", types); } return tpApplyFormMapper.selectCountByExample(example) > 0; } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/tp/TpAuditRecordDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/tp/TpAuditRecordDAO.java index 0fd9c3464..8299713ce 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/tp/TpAuditRecordDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/tp/TpAuditRecordDAO.java @@ -141,8 +141,9 @@ public class TpAuditRecordDAO { Example example = new Example(TpAuditRecordDO.class); example.createCriteria() .andEqualTo("applyId", applyId) + .andNotEqualTo("auditStatus", 0) .andEqualTo("deleted", 0); - example.setOrderByClause("createTime ASC"); + example.setOrderByClause("create_time ASC"); List recordList = tpAuditRecordMapper.selectByExample(example); List result = new ArrayList<>(); for (TpAuditRecordDO auditRecordDO : recordList) { diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/tp/TpScoreJournalDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/tp/TpScoreJournalDAO.java index 762b54193..0d2951956 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/tp/TpScoreJournalDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/tp/TpScoreJournalDAO.java @@ -61,7 +61,7 @@ public class TpScoreJournalDAO { if (StringUtils.isNotBlank(request.getApplyNo())) { criteria.andLike("applyNo", "%" + request.getApplyNo() + "%"); } - example.setOrderByClause("createTime DESC"); + example.setOrderByClause("create_time DESC"); return tpScoreJournalMapper.selectByExample(example); } } diff --git a/coolstore-partner-dao/src/main/resources/mapper/tp/TpApplyFormMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/tp/TpApplyFormMapper.xml index 30da056b3..441492861 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/tp/TpApplyFormMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/tp/TpApplyFormMapper.xml @@ -78,17 +78,20 @@ AND a.score = #{score} - AND a.type != 0 + AND (a.type = 1 OR a.type = 2) AND (b.store_name LIKE CONCAT('%', #{storeNameOrNum}, '%') OR b.store_num LIKE CONCAT('%', #{storeNameOrNum}, '%') - AND b.appeal_reason LIKE CONCAT('%', #{appealReason}, '%') + AND a.appeal_reason LIKE CONCAT('%', #{appealReason}, '%') - AND b.is_draft = #{isDraft} + AND a.is_draft = #{isDraft} + + + AND a.appeal_end_date < CURRENT_DATE ORDER BY a.create_time DESC diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/tp/TpApplyQueryRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/tp/TpApplyQueryRequest.java index 77b2062e0..e9d11ad19 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/tp/TpApplyQueryRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/tp/TpApplyQueryRequest.java @@ -33,10 +33,7 @@ public class TpApplyQueryRequest extends PageBasicInfo { @ApiModelProperty("规则id") private String ruleId; - @ApiModelProperty("状态,可多选逗号隔开") - private String status; - - @ApiModelProperty(value = "状态列表", hidden = true) + @ApiModelProperty(value = "状态列表") private List statusList; @ApiModelProperty(value = "单据类型,0加分单 1警告书 2处罚书") @@ -51,18 +48,12 @@ public class TpApplyQueryRequest extends PageBasicInfo { @ApiModelProperty(value = "是惩处单", hidden = true) private Boolean isPenalty; - @ApiModelProperty("复议理由") + @ApiModelProperty("复议理由,字典表") private String appealReason; @ApiModelProperty("是否为草稿") private Integer isDraft; - public List getStatusList() { - if (StringUtils.isBlank(this.status)) { - return null; - } - return Arrays.stream(this.status.split(CommonConstants.COMMA)) - .filter(StringUtils::isNotBlank) - .collect(Collectors.toList()); - } + @ApiModelProperty(value = "是否已逾期", hidden = true) + private Boolean overdue; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/tp/TpApplyService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/tp/TpApplyService.java index dcb1709cf..0dfd11fd3 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/tp/TpApplyService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/tp/TpApplyService.java @@ -1,5 +1,6 @@ package com.cool.store.service.tp; +import com.cool.store.entity.tp.TpApplyFormDO; import com.cool.store.request.tp.*; import com.cool.store.response.AuditInfoResponse; import com.cool.store.vo.tp.*; @@ -160,4 +161,10 @@ public interface TpApplyService { * @return 是否成功 */ Boolean completePayment(Long applyId); + + /** + * 积分变动 + * @param formDO 申请单DO + */ + void scoreChange(TpApplyFormDO formDO); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/tp/impl/TpApplyServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/tp/impl/TpApplyServiceImpl.java index 872a8c1f6..b2a1e0232 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/tp/impl/TpApplyServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/tp/impl/TpApplyServiceImpl.java @@ -68,7 +68,7 @@ public class TpApplyServiceImpl implements TpApplyService { if (!isDraft && tpApplyFormDAO.existPassRewardForm(request.getStoreId(), request.getRuleId())) { throw new ServiceException(ErrorCodeEnum.TP_MONTH_EXIST_APPLY); } - if (!isDraft && tpApplyFormDAO.existsPendingApply(request.getStoreId(), request.getRuleId(), true)) { + if (!isDraft && tpApplyFormDAO.existsPendingApply(request.getStoreId(), request.getRuleId(), Collections.singletonList(TpFormTypeEnum.REWARD.getType()))) { throw new ServiceException(ErrorCodeEnum.TP_EXISTS_PENDING_APPLY); } BigDecimal score = storeDao.getStoreScore(request.getStoreId()); @@ -122,13 +122,11 @@ public class TpApplyServiceImpl implements TpApplyService { TpApplyFormDO formDO = BeanUtil.toBean(request, TpApplyFormDO.class); // 如果存在审批中的申请,则不允许再次提交 boolean isDraft = CommonConstants.INDEX_ONE.equals(request.getIsDraft()); - if (!isDraft && tpApplyFormDAO.existsPendingApply(request.getStoreId(), request.getRuleId(), false)) { + if (!isDraft && tpApplyFormDAO.existsPendingApply(request.getStoreId(), request.getRuleId(), Arrays.asList(TpFormTypeEnum.PENALTY.getType(), TpFormTypeEnum.WARNING.getType()))) { throw new ServiceException(ErrorCodeEnum.TP_EXISTS_PENDING_APPLY); } - boolean isInsert = Objects.isNull(request.getId()); - formDO.setType(isInsert ? TpFormTypeEnum.PENALTY.getType() : null); - formDO.setApplyNo(isInsert ? TpHelper.generateApplyNo(formDO.getType()) : null); fillRuleFields(formDO); + formDO.setApplyNo(Objects.isNull(request.getId()) ? TpHelper.generateApplyNo(formDO.getType()) : null); tpApplyFormDAO.insertOrUpdate(formDO); // 第一次提交后添加审批记录 if (!isDraft) { @@ -218,8 +216,7 @@ public class TpApplyServiceImpl implements TpApplyService { throw new ServiceException(ErrorCodeEnum.TP_PENALTY_APPLY_EFFECTIVE); } } - boolean isInsert = Objects.isNull(request.getId()); - formDO.setApplyNo(isInsert ? TpHelper.generateAppealNo() : null); + formDO.setApplyNo(Objects.isNull(request.getId()) ? TpHelper.generateAppealNo() : null); formDO.setRuleId(penaltyFormDO.getRuleId()); formDO.setType(TpFormTypeEnum.APPEAL.getType()); formDO.setStoreId(penaltyFormDO.getStoreId()); @@ -337,6 +334,7 @@ public class TpApplyServiceImpl implements TpApplyService { } @Override + @Transactional public Boolean acceptPenalty(Long applyId) { // 校验申请单状态是否为审批通过 TpApplyFormDO formDO = tpApplyFormDAO.getEffectiveById(applyId); @@ -348,6 +346,7 @@ public class TpApplyServiceImpl implements TpApplyService { throw new ServiceException(ErrorCodeEnum.TP_PENALTY_APPLY_UNABLE_ACCEPT); } tpApplyFormDAO.updateStatus(applyId, TpFormStatusEnum.EFFECTIVE); + scoreChange(formDO); return true; } @@ -381,8 +380,8 @@ public class TpApplyServiceImpl implements TpApplyService { tpAuditRecordDAO.auditPendingRecordByApplyId(request.getApplyId(), formDO.getType(), user.getUserId(), user.getName(), request.getAuditStatus(), request.getRemark(), now); if (TpFormTypeEnum.APPEAL.getType().equals(formDO.getType())) { appealPassResolve(formDO); - } else { - // 审批通过后门店积分变动 + } else if (TpFormTypeEnum.REWARD.getType().equals(formDO.getType())) { + // 加分审批通过后门店积分变动 scoreChange(formDO); } } @@ -400,7 +399,8 @@ public class TpApplyServiceImpl implements TpApplyService { /** * 门店积分变动 */ - private void scoreChange(TpApplyFormDO formDO) { + @Override + public void scoreChange(TpApplyFormDO formDO) { if (TpFormStatusEnum.PASS.getStatus().equals(formDO.getStatus())) { BigDecimal occurBeforeScore = storeDao.getStoreScore(formDO.getStoreId()); BigDecimal occurAfterScore = null; @@ -421,13 +421,13 @@ public class TpApplyServiceImpl implements TpApplyService { // 修改门店积分 if (Objects.nonNull(occurAfterScore)) { storeDao.updateStoreScore(formDO.getStoreId(), occurAfterScore); + StoreDO storeDO = storeDao.getEffectiveByStoreId(formDO.getStoreId()); + if (Objects.isNull(storeDO)) { + throw new ServiceException(ErrorCodeEnum.STORE_NOT_FIND); + } + // 添加积分流水 + tpScoreJournalDAO.insertSelective(new TpScoreJournalDO(storeDO, formDO, occurScore, occurBeforeScore, occurAfterScore)); } - StoreDO storeDO = storeDao.getEffectiveByStoreId(formDO.getStoreId()); - if (Objects.isNull(storeDO)) { - throw new ServiceException(ErrorCodeEnum.STORE_NOT_FIND); - } - // 添加积分流水 - tpScoreJournalDAO.insertSelective(new TpScoreJournalDO(storeDO, formDO, occurScore, occurBeforeScore, occurAfterScore)); } } @@ -455,17 +455,19 @@ public class TpApplyServiceImpl implements TpApplyService { if (Objects.isNull(formDO.getAppealEndDate())) { formDO.setAppealEndDate(CoolDateUtils.localDate2Date(LocalDate.now().plusDays(ruleDO.getAppealDeadline()))); } - // 超过警告次数的为处罚单,否则警告单 - int penaltyCount = tpApplyFormDAO.getPenaltyCount(formDO.getStoreId(), formDO.getRuleId()); - Integer type = ruleDO.getWarningLimit().compareTo(penaltyCount) <= 0 ? TpFormTypeEnum.PENALTY.getType() : TpFormTypeEnum.WARNING.getType(); - formDO.setType(type); - if (TpFormTypeEnum.WARNING.getType().equals(type)) { - formDO.setAmount(null); - formDO.setScore(null); + if (Objects.isNull(formDO.getType())) { + // 超过警告次数的为处罚单,否则警告单 + int penaltyCount = tpApplyFormDAO.getPenaltyCount(formDO.getStoreId(), formDO.getRuleId()); + Integer type = ruleDO.getWarningLimit().compareTo(penaltyCount) <= 0 ? TpFormTypeEnum.PENALTY.getType() : TpFormTypeEnum.WARNING.getType(); + formDO.setType(type); + if (TpFormTypeEnum.WARNING.getType().equals(type)) { + formDO.setAmount(null); + formDO.setScore(null); + } } - // 是否缴费 - formDO.setPayStatus(Objects.nonNull(ruleDO.getAmount()) && BigDecimal.ZERO.compareTo(ruleDO.getAmount()) < 0 ? TpPayStatusEnum.UNPAID.getStatus() : TpPayStatusEnum.NO_NEED_PAY.getStatus()); } + // 是否缴费 + formDO.setPayStatus(Objects.nonNull(ruleDO.getAmount()) && BigDecimal.ZERO.compareTo(ruleDO.getAmount()) < 0 ? TpPayStatusEnum.UNPAID.getStatus() : TpPayStatusEnum.NO_NEED_PAY.getStatus()); } /** diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/TpApplyController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/TpApplyController.java index e5c5e295f..be06ab8c6 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/TpApplyController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/TpApplyController.java @@ -55,8 +55,8 @@ public class TpApplyController { } @ApiOperation("加分申请单分页查询") - @GetMapping("/rewardPage") - public ResponseResult > rewardPage(TpApplyQueryRequest request) { + @PostMapping("/rewardPage") + public ResponseResult > rewardPage(@RequestBody TpApplyQueryRequest request) { request.setType(TpFormTypeEnum.REWARD.getType()); return ResponseResult.success(tpApplyService.rewardPage(request)); } @@ -85,8 +85,8 @@ public class TpApplyController { } @ApiOperation("惩处申请单分页查询") - @GetMapping("/penaltyPage") - public ResponseResult > penaltyPage(TpApplyQueryRequest request) { + @PostMapping("/penaltyPage") + public ResponseResult > penaltyPage(@RequestBody TpApplyQueryRequest request) { request.setIsPenalty(true); return ResponseResult.success(tpApplyService.penaltyPage(request)); } @@ -115,8 +115,8 @@ public class TpApplyController { } @ApiOperation("复议申请单分页查询") - @GetMapping("/appealPage") - public ResponseResult > appealPage(TpApplyQueryRequest request) { + @PostMapping("/appealPage") + public ResponseResult > appealPage(@RequestBody TpApplyQueryRequest request) { request.setType(TpFormTypeEnum.APPEAL.getType()); return ResponseResult.success(tpApplyService.appealPage(request)); } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/TpRuleController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/TpRuleController.java index 5137f8596..2cd12bb3b 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/TpRuleController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/TpRuleController.java @@ -56,8 +56,8 @@ public class TpRuleController { } @ApiOperation("惩处规则分页查询") - @GetMapping("/penaltyPage") - public ResponseResult> penaltyRulePage(TpRuleQueryRequest request) { + @PostMapping("/penaltyPage") + public ResponseResult> penaltyRulePage(@RequestBody TpRuleQueryRequest request) { request.setType(0); return ResponseResult.success(tpRuleService.penaltyRulePage(request)); } @@ -82,8 +82,8 @@ public class TpRuleController { } @ApiOperation("加分规则分页查询") - @GetMapping("/rewardPage") - public ResponseResult> rewardRulePage(TpRuleQueryRequest request) { + @PostMapping("/rewardPage") + public ResponseResult> rewardRulePage(@RequestBody TpRuleQueryRequest request) { request.setType(1); return ResponseResult.success(tpRuleService.rewardRulePage(request)); } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/TpScoreJournalController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/TpScoreJournalController.java index 213c18d8f..f1eaa73cb 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/TpScoreJournalController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/TpScoreJournalController.java @@ -8,9 +8,7 @@ import com.github.pagehelper.PageInfo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** *

@@ -28,8 +26,8 @@ public class TpScoreJournalController { private final TpScoreJournalService tpScoreJournalService; @ApiOperation("积分流水分页查询") - @GetMapping("/page") - public ResponseResult> getPage(TpScoreJournalQueryRequest request) { + @PostMapping("/page") + public ResponseResult> getPage(@RequestBody TpScoreJournalQueryRequest request) { return ResponseResult.success(tpScoreJournalService.getPage(request)); } } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniTpApplyController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniTpApplyController.java index 9a4534ae0..8f83e8c51 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniTpApplyController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniTpApplyController.java @@ -58,8 +58,8 @@ public class MiniTpApplyController { } @ApiOperation("加分申请单分页查询") - @GetMapping("/rewardPage") - public ResponseResult> rewardPage(TpApplyQueryRequest request) { + @PostMapping("/rewardPage") + public ResponseResult> rewardPage(@RequestBody TpApplyQueryRequest request) { request.setType(TpFormTypeEnum.REWARD.getType()); return ResponseResult.success(tpApplyService.getMiniApplyList(request)); } @@ -72,8 +72,8 @@ public class MiniTpApplyController { } @ApiOperation("惩处申请单分页查询") - @GetMapping("/penaltyPage") - public ResponseResult> penaltyPage(TpApplyQueryRequest request) { + @PostMapping("/penaltyPage") + public ResponseResult> penaltyPage(@RequestBody TpApplyQueryRequest request) { request.setIsPenalty(true); request.setIsDraft(0); return ResponseResult.success(tpApplyService.getMiniApplyList(request)); diff --git a/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java b/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java index b71f54cd3..0fe2fe07b 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java @@ -458,9 +458,10 @@ public class XxlJobHandler { int pageNum = 1; int pageSize = CommonConstants.BATCH_SIZE; TpApplyQueryRequest request = new TpApplyQueryRequest(); - request.setStatus(TpFormStatusEnum.PASS.getStatus()); + request.setStatusList(Collections.singletonList(TpFormStatusEnum.PASS.getStatus())); request.setIsPenalty(true); request.setIsDraft(0); + request.setOverdue(true); while (hasNext) { PageHelper.startPage(pageNum, pageSize); List list = tpApplyFormDAO.getEffectiveList(request); @@ -471,6 +472,14 @@ public class XxlJobHandler { List applyIds = CollStreamUtil.toList(list, TpApplyFormDO::getId); try { tpApplyFormDAO.updateStatusBatch(applyIds, TpFormStatusEnum.EFFECTIVE); + list.forEach(form -> { + try { + tpApplyService.scoreChange(form); + } catch (Exception e) { + log.info("积分变动失败,formId:{}, storeId:{}", form.getId(), form.getStoreId()); + log.info("积分变动失败", e); + } + }); } catch (Exception e) { log.error("超过申诉期,更新申请单状态失败", e); }