fix:十二分制-申请单

This commit is contained in:
wangff
2025-11-10 14:20:44 +08:00
parent a3d0f9572c
commit bd64b33ebb
19 changed files with 496 additions and 199 deletions

View File

@@ -1,12 +1,10 @@
package com.cool.store.service.tp;
import com.cool.store.request.tp.TpAppealApplyRequest;
import com.cool.store.request.tp.TpApplyAuditRequest;
import com.cool.store.request.tp.TpApplyQueryRequest;
import com.cool.store.request.tp.TpApplyRequest;
import com.cool.store.vo.tp.TpPenaltyApplyDetailVO;
import com.cool.store.vo.tp.TpPenaltyApplyListVO;
import com.cool.store.vo.tp.TpRewardApplyDetailVO;
import com.cool.store.vo.tp.TpRewardApplyListVO;
import com.cool.store.vo.tp.*;
import com.github.pagehelper.PageInfo;
/**
@@ -74,4 +72,32 @@ public interface TpApplyService {
* @return 是否成功
*/
Boolean penaltyAudit(TpApplyAuditRequest request);
/**
* 复议申请提交
* @param request 复议申请Request
* @return 是否成功
*/
Boolean appealApplySubmit(TpAppealApplyRequest request);
/**
* 复议申请单详情
* @param applyId 复议申请单id
* @return 复议申请单详情VO
*/
TpAppealFormDetailVO appealDetail(Long applyId);
/**
* 复议申请单分页查询
* @param request 申请单查询Request
* @return 复审列表VO列表
*/
PageInfo<TpAppealListVO> appealPage(TpApplyQueryRequest request);
/**
* 复议申请审批
* @param request 申请单审批Request
* @return 是否成功
*/
Boolean appealAudit(TpApplyAuditRequest request);
}

View File

@@ -6,10 +6,7 @@ import com.cool.store.context.CurrentUserHolder;
import com.cool.store.context.LoginUserInfo;
import com.cool.store.dao.EnterpriseUserDAO;
import com.cool.store.dao.StoreDao;
import com.cool.store.dao.tp.TpApplyFormDAO;
import com.cool.store.dao.tp.TpAuditRecordDAO;
import com.cool.store.dao.tp.TpRuleDAO;
import com.cool.store.dao.tp.TpScoreJournalDAO;
import com.cool.store.dao.tp.*;
import com.cool.store.entity.StoreDO;
import com.cool.store.entity.tp.TpApplyFormDO;
import com.cool.store.entity.tp.TpRuleDO;
@@ -19,6 +16,7 @@ import com.cool.store.enums.tp.TpFormStatusEnum;
import com.cool.store.enums.tp.TpFormTypeEnum;
import com.cool.store.enums.tp.TpPayStatusEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.request.tp.TpAppealApplyRequest;
import com.cool.store.request.tp.TpApplyAuditRequest;
import com.cool.store.request.tp.TpApplyQueryRequest;
import com.cool.store.request.tp.TpApplyRequest;
@@ -82,7 +80,6 @@ public class TpApplyServiceImpl implements TpApplyService {
if (isInsert) {
formDO.setApplyNo(TpHelper.generateApplyNo(TpFormTypeEnum.REWARD.getType()));
formDO.setType(TpFormTypeEnum.REWARD.getType());
formDO.setStatus(TpFormStatusEnum.PENDING.getStatus());
formDO.setPayStatus(TpPayStatusEnum.NO_NEED_PAY.getStatus());
}
fillRuleFields(formDO);
@@ -96,7 +93,7 @@ public class TpApplyServiceImpl implements TpApplyService {
@Override
public TpRewardApplyDetailVO rewardDetail(Long applyId) {
TpApplyFormDO formDO = tpApplyFormDAO.getById(applyId);
TpApplyFormDO formDO = tpApplyFormDAO.getEffectiveById(applyId);
if (Objects.nonNull(formDO)) {
TpRewardApplyDetailVO vo = BeanUtil.toBean(formDO, TpRewardApplyDetailVO.class);
dictService.fillDictField(vo);
@@ -130,11 +127,8 @@ public class TpApplyServiceImpl implements TpApplyService {
throw new ServiceException(ErrorCodeEnum.TP_EXISTS_PENDING_APPLY);
}
boolean isInsert = Objects.isNull(request.getId());
formDO.setApplyNo(isInsert ? TpHelper.generateApplyNo(formDO.getType()) : null);
fillRuleFields(formDO);
if (isInsert) {
formDO.setApplyNo(TpHelper.generateApplyNo(formDO.getType()));
formDO.setStatus(TpFormStatusEnum.PENDING.getStatus());
}
tpApplyFormDAO.insertOrUpdate(formDO);
// 第一次提交后添加审批记录
if (isInsert && !isDraft) {
@@ -145,7 +139,7 @@ public class TpApplyServiceImpl implements TpApplyService {
@Override
public TpPenaltyApplyDetailVO penaltyDetail(Long applyId) {
TpApplyFormDO formDO = tpApplyFormDAO.getById(applyId);
TpApplyFormDO formDO = tpApplyFormDAO.getEffectiveById(applyId);
if (Objects.nonNull(formDO)) {
TpPenaltyApplyDetailVO vo = BeanUtil.toBean(formDO, TpPenaltyApplyDetailVO.class);
dictService.fillDictField(vo);
@@ -161,7 +155,6 @@ public class TpApplyServiceImpl implements TpApplyService {
@Override
public PageInfo<TpPenaltyApplyListVO> penaltyPage(TpApplyQueryRequest request) {
request.setIsPenalty(true);
PageHelper.startPage(request.getPageNum(), request.getPageSize());
List<TpApplyFormDO> list = tpApplyFormDAO.getEffectiveList(request);
PageInfo<TpApplyFormDO> page = new PageInfo<>(list);
@@ -173,8 +166,8 @@ public class TpApplyServiceImpl implements TpApplyService {
@Override
@Transactional
public Boolean rewardAudit(TpApplyAuditRequest request) {
TpApplyFormDO formDO = tpApplyFormDAO.getById(request.getApplyId());
if (Objects.isNull(formDO)) {
TpApplyFormDO formDO = tpApplyFormDAO.getEffectiveById(request.getApplyId());
if (Objects.isNull(formDO) || !TpFormTypeEnum.REWARD.getType().equals(formDO.getType())) {
throw new ServiceException(ErrorCodeEnum.TP_NOT_EXIST_APPLY_FORM);
}
if (!TpFormStatusEnum.PENDING.getStatus().equals(formDO.getStatus())) {
@@ -183,6 +176,100 @@ public class TpApplyServiceImpl implements TpApplyService {
if (tpApplyFormDAO.existPassRewardForm(formDO.getStoreId(), formDO.getRuleId())) {
throw new ServiceException(ErrorCodeEnum.TP_MONTH_EXIST_APPLY);
}
auditCommon(request, formDO);
return true;
}
@Override
@Transactional
public Boolean penaltyAudit(TpApplyAuditRequest request) {
TpApplyFormDO formDO = tpApplyFormDAO.getEffectiveById(request.getApplyId());
if (Objects.isNull(formDO) || !TpFormTypeEnum.isPenalty(formDO.getType())) {
throw new ServiceException(ErrorCodeEnum.TP_NOT_EXIST_APPLY_FORM);
}
if (!TpFormStatusEnum.PENDING.getStatus().equals(formDO.getStatus())) {
throw new ServiceException(ErrorCodeEnum.TP_APPLY_AUDIT_COMPLETED);
}
auditCommon(request, formDO);
return true;
}
@Override
public Boolean appealApplySubmit(TpAppealApplyRequest request) {
TpApplyFormDO formDO = BeanUtil.toBean(request, TpApplyFormDO.class);
boolean isDraft = CommonConstants.INDEX_ONE.equals(request.getIsDraft());
TpApplyFormDO punishFormDO = tpApplyFormDAO.getByPenaltyId(request.getPenaltyId());
if (Objects.nonNull(punishFormDO) && !isDraft) {
if (TpFormStatusEnum.PENDING.getStatus().equals(punishFormDO.getStatus())) {
throw new ServiceException(ErrorCodeEnum.TP_EXISTS_PENDING_APPLY);
}
if (TpFormStatusEnum.PASS.getStatus().equals(punishFormDO.getStatus())) {
throw new ServiceException(ErrorCodeEnum.TP_PENALTY_APPLY_APPEAL_COMPLETED);
}
}
boolean isInsert = Objects.isNull(request.getId());
formDO.setApplyNo(isInsert ? TpHelper.generateAppealNo() : null);
formDO.setRuleId(punishFormDO.getRuleId());
formDO.setType(TpFormTypeEnum.APPEAL.getType());
fillRuleFields(formDO);
tpApplyFormDAO.insertOrUpdate(formDO);
// 第一次提交后添加审批记录
if (isInsert && !isDraft) {
tpAuditRecordDAO.addRecord(formDO.getId(), TpFormTypeEnum.APPEAL.getType(), request.getApplyUserId(), request.getApplyUserName());
}
return true;
}
@Override
public TpAppealFormDetailVO appealDetail(Long applyId) {
TpApplyFormDO formDO = tpApplyFormDAO.getEffectiveById(applyId);
if (Objects.nonNull(formDO)) {
TpAppealFormDetailVO vo = BeanUtil.toBean(formDO, TpAppealFormDetailVO.class);
dictService.fillDictField(vo);
StoreDO storeDO = storeDao.getByStoreId(vo.getStoreId());
if (Objects.nonNull(storeDO)) {
vo.setStoreNum(storeDO.getStoreNum());
vo.setStoreName(storeDO.getStoreName());
}
vo.setPenaltyDetail(penaltyDetail(vo.getPenaltyId()));
return vo;
}
return null;
}
@Override
public PageInfo<TpAppealListVO> appealPage(TpApplyQueryRequest request) {
PageHelper.startPage(request.getPageNum(), request.getPageSize());
List<TpApplyFormDO> list = tpApplyFormDAO.getEffectiveList(request);
PageInfo<TpApplyFormDO> page = new PageInfo<>(list);
PageInfo<TpAppealListVO> newPage = BeanUtil.toPage(page, TpAppealListVO.class);
List<Long> penaltyIds = CollStreamUtil.toList(newPage.getList(), TpAppealListVO::getPenaltyId);
List<TpApplyFormDO> penaltyList = tpApplyFormDAO.getByIds(penaltyIds);
Map<Long, String> penaltyNoMap = CollStreamUtil.toMap(penaltyList, TpApplyFormDO::getId, TpApplyFormDO::getApplyNo);
newPage.getList().forEach(vo -> {
vo.setPenaltyNo(penaltyNoMap.get(vo.getPenaltyId()));
});
fillListFields(newPage.getList());
return newPage;
}
@Override
public Boolean appealAudit(TpApplyAuditRequest request) {
TpApplyFormDO formDO = tpApplyFormDAO.getEffectiveById(request.getApplyId());
if (Objects.isNull(formDO) || !TpFormTypeEnum.APPEAL.getType().equals(formDO.getType())) {
throw new ServiceException(ErrorCodeEnum.TP_NOT_EXIST_APPLY_FORM);
}
if (!TpFormStatusEnum.PENDING.getStatus().equals(formDO.getStatus())) {
throw new ServiceException(ErrorCodeEnum.TP_APPLY_AUDIT_COMPLETED);
}
auditCommon(request, formDO);
return true;
}
/**
* 审批通用方法
*/
private void auditCommon(TpApplyAuditRequest request, TpApplyFormDO formDO) {
Date now = new Date();
// 修改申请单审批数据
formDO.setStatus(CommonConstants.INDEX_ONE.equals(request.getAuditStatus()) ? TpFormStatusEnum.PASS.getStatus() : TpFormStatusEnum.REJECT.getStatus());
@@ -190,15 +277,23 @@ public class TpApplyServiceImpl implements TpApplyService {
tpApplyFormDAO.updateSelective(formDO);
LoginUserInfo user = CurrentUserHolder.getUser();
// 处理审批记录
tpAuditRecordDAO.auditPendingRecordByApplyId(request.getApplyId(), request.getApplyType(), user.getUserId(), user.getName(), request.getAuditStatus(), request.getRemark(), now);
// 审批通过后门店积分变动
scoreChange(formDO);
return null;
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 {
// 审批通过后门店积分变动
scoreChange(formDO);
}
}
@Override
public Boolean penaltyAudit(TpApplyAuditRequest request) {
return null;
/**
* 复议申请通过时处罚单作废
*/
private void appealPassResolve(TpApplyFormDO formDO) {
if (TpFormStatusEnum.PASS.getStatus().equals(formDO.getStatus())) {
// 申诉通过后,处罚单失效
tpApplyFormDAO.cancelApply(formDO.getPenaltyId());
}
}
/**
@@ -248,11 +343,18 @@ public class TpApplyServiceImpl implements TpApplyService {
formDO.setProjectCategory(ruleDO.getProjectCategory());
formDO.setProjectName(ruleDO.getProjectName());
formDO.setIsFull(ruleDO.getIsFull());
formDO.setScore(ruleDO.getScore());
formDO.setAmount(ruleDO.getAmount());
formDO.setAppealEndDate(LocalDate.now().plusDays(ruleDO.getAppealDeadline()));
if (Objects.isNull(formDO.getScore())) {
formDO.setScore(ruleDO.getScore());
}
if (Objects.isNull(formDO.getAmount())) {
formDO.setAmount(ruleDO.getAmount());
}
// 扣分
if (CommonConstants.INDEX_ZERO.equals(ruleDO.getType())) {
// 如果是扣分规则,判断警告次数
if (Objects.isNull(formDO.getAppealEndDate())) {
formDO.setAppealEndDate(LocalDate.now().plusDays(ruleDO.getAppealDeadline()));
}
// 超过警告次数的为处罚单,否则警告单
int penaltyCount = tpApplyFormDAO.getPenaltyCount(formDO.getStoreId(), formDO.getRuleId());
formDO.setType(ruleDO.getWarningLimit().compareTo(penaltyCount) <= 0 ? TpFormTypeEnum.PENALTY.getType() : TpFormTypeEnum.WARNING.getType());
// 是否缴费