fix:十二分接口逻辑完善

This commit is contained in:
wangff
2025-11-20 14:31:12 +08:00
parent 13c44053c2
commit 4e5c228974
12 changed files with 79 additions and 70 deletions

View File

@@ -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<Integer> 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;
}

View File

@@ -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<TpAuditRecordDO> recordList = tpAuditRecordMapper.selectByExample(example);
List<AuditInfoResponse> result = new ArrayList<>();
for (TpAuditRecordDO auditRecordDO : recordList) {

View File

@@ -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);
}
}

View File

@@ -78,17 +78,20 @@
AND a.score = #{score}
</if>
<if test="isPenalty != null and isPenalty">
AND a.type != 0
AND (a.type = 1 OR a.type = 2)
</if>
<if test="storeNameOrNum != null and storeNameOrNum != ''">
AND (b.store_name LIKE CONCAT('%', #{storeNameOrNum}, '%')
OR b.store_num LIKE CONCAT('%', #{storeNameOrNum}, '%')
</if>
<if test="appealReason != null and appealReason != ''">
AND b.appeal_reason LIKE CONCAT('%', #{appealReason}, '%')
AND a.appeal_reason LIKE CONCAT('%', #{appealReason}, '%')
</if>
<if test="isDraft != null">
AND b.is_draft = #{isDraft}
AND a.is_draft = #{isDraft}
</if>
<if test="overdue != null and overdue">
AND a.appeal_end_date &lt; CURRENT_DATE
</if>
</where>
ORDER BY a.create_time DESC

View File

@@ -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<String> 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<String> 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;
}

View File

@@ -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);
}

View File

@@ -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());
}
/**

View File

@@ -55,8 +55,8 @@ public class TpApplyController {
}
@ApiOperation("加分申请单分页查询")
@GetMapping("/rewardPage")
public ResponseResult<PageInfo<TpRewardApplyListVO> > rewardPage(TpApplyQueryRequest request) {
@PostMapping("/rewardPage")
public ResponseResult<PageInfo<TpRewardApplyListVO> > 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<PageInfo<TpPenaltyApplyListVO> > penaltyPage(TpApplyQueryRequest request) {
@PostMapping("/penaltyPage")
public ResponseResult<PageInfo<TpPenaltyApplyListVO> > 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<PageInfo<TpAppealListVO> > appealPage(TpApplyQueryRequest request) {
@PostMapping("/appealPage")
public ResponseResult<PageInfo<TpAppealListVO> > appealPage(@RequestBody TpApplyQueryRequest request) {
request.setType(TpFormTypeEnum.APPEAL.getType());
return ResponseResult.success(tpApplyService.appealPage(request));
}

View File

@@ -56,8 +56,8 @@ public class TpRuleController {
}
@ApiOperation("惩处规则分页查询")
@GetMapping("/penaltyPage")
public ResponseResult<PageInfo<TpPenaltyRuleListVO>> penaltyRulePage(TpRuleQueryRequest request) {
@PostMapping("/penaltyPage")
public ResponseResult<PageInfo<TpPenaltyRuleListVO>> 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<PageInfo<TpRewardRuleDetailVO>> rewardRulePage(TpRuleQueryRequest request) {
@PostMapping("/rewardPage")
public ResponseResult<PageInfo<TpRewardRuleDetailVO>> rewardRulePage(@RequestBody TpRuleQueryRequest request) {
request.setType(1);
return ResponseResult.success(tpRuleService.rewardRulePage(request));
}

View File

@@ -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.*;
/**
* <p>
@@ -28,8 +26,8 @@ public class TpScoreJournalController {
private final TpScoreJournalService tpScoreJournalService;
@ApiOperation("积分流水分页查询")
@GetMapping("/page")
public ResponseResult<PageInfo<TpScoreJournalVO>> getPage(TpScoreJournalQueryRequest request) {
@PostMapping("/page")
public ResponseResult<PageInfo<TpScoreJournalVO>> getPage(@RequestBody TpScoreJournalQueryRequest request) {
return ResponseResult.success(tpScoreJournalService.getPage(request));
}
}

View File

@@ -58,8 +58,8 @@ public class MiniTpApplyController {
}
@ApiOperation("加分申请单分页查询")
@GetMapping("/rewardPage")
public ResponseResult<PageInfo<MiniTpApplyListVO>> rewardPage(TpApplyQueryRequest request) {
@PostMapping("/rewardPage")
public ResponseResult<PageInfo<MiniTpApplyListVO>> 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<PageInfo<MiniTpApplyListVO>> penaltyPage(TpApplyQueryRequest request) {
@PostMapping("/penaltyPage")
public ResponseResult<PageInfo<MiniTpApplyListVO>> penaltyPage(@RequestBody TpApplyQueryRequest request) {
request.setIsPenalty(true);
request.setIsDraft(0);
return ResponseResult.success(tpApplyService.getMiniApplyList(request));

View File

@@ -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<TpApplyFormDO> list = tpApplyFormDAO.getEffectiveList(request);
@@ -471,6 +472,14 @@ public class XxlJobHandler {
List<Long> 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);
}