diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditStatusEnum.java new file mode 100644 index 000000000..430b6db24 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/AuditStatusEnum.java @@ -0,0 +1,40 @@ +package com.cool.store.enums; + +/** + * @author zhangchenbiao + * @FileName: AuditStatusEnum + * @Description: + * @date 2024-03-20 14:55 + */ +public enum AuditStatusEnum { + + TODO(0, "待处理"), + PASS(1, "通过"), + REJECT(2, "拒绝"); + + private Integer code; + + private String name; + + private AuditStatusEnum(Integer code, String name) { + this.code = code; + this.name = name; + } + + public Integer getCode() { + return code; + } + + public String getName() { + return name; + } + + public static AuditStatusEnum getByCode(Integer code) { + for (AuditStatusEnum auditStatusEnum : AuditStatusEnum.values()) { + if (auditStatusEnum.getCode().equals(code)) { + return auditStatusEnum; + } + } + return null; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index 9226b87ca..f07bb9b12 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -83,6 +83,10 @@ public enum ErrorCodeEnum { POINT_NOT_EXIST(600001, "铺位信息不存在", null), POINT_SIGNED(600002, "操作失败,铺位已签约", null), NOT_ALLOW_OPERATE(600003, "当前状态不允许该操作", null), + POINT_AUDIT_NOT_SETTING(600004, "选址审批未设置", null), + NO_PERMISSION(600004, "暂无处理审批任务权限", null), + POINT_AUDIT_NODE_ERROR(600005, "当前审批任务异常", null), + USER_NOT_TODO_AUDIT(600005, "当前用户没有待审批的任务", null), INTERVIEW_ENTER_FAIL(1021101, "进入面审间失败", null), DINGDING_USER_NOT_EXIST(1021102, "用户钉钉信息不存在,无法发起资质审核!", null), diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/NodeNoEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/NodeNoEnum.java new file mode 100644 index 000000000..0a2e7aa81 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/NodeNoEnum.java @@ -0,0 +1,70 @@ +package com.cool.store.enums; + +import com.google.common.collect.Lists; + +import java.util.List; + +public enum NodeNoEnum { + NODE_NO_0(0,"提交任务"), + NODE_NO_1(1,"第一级审批"), + NODE_NO_2(2,"第二级审批"), + NODE_NO_3(3,"第三级审批"), + NODE_NO_4(4,"第四级审批"), + NODE_NO_5(5,"第五级审批"), + NODE_NO_100(100,"结束"), + + ; + + private Integer code; + + private String typeName; + + NodeNoEnum(Integer code, String typeName) { + this.code = code; + this.typeName = typeName; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + /** + * 获取之后的审批节点集合 + * @param nodeNo + * @return + */ + public static List getNextNodeNoList(Integer nodeNo){ + if(nodeNo == NodeNoEnum.NODE_NO_1.getCode()){ + return Lists.newArrayList(NodeNoEnum.NODE_NO_2, NodeNoEnum.NODE_NO_3, NodeNoEnum.NODE_NO_4, NodeNoEnum.NODE_NO_5); + }else if(nodeNo == NodeNoEnum.NODE_NO_2.getCode()){ + return Lists.newArrayList(NodeNoEnum.NODE_NO_3, NodeNoEnum.NODE_NO_4, NodeNoEnum.NODE_NO_5); + }else if(nodeNo == NodeNoEnum.NODE_NO_3.getCode()){ + return Lists.newArrayList(NodeNoEnum.NODE_NO_4, NodeNoEnum.NODE_NO_5); + }else if(nodeNo == NodeNoEnum.NODE_NO_4.getCode()){ + return Lists.newArrayList(NodeNoEnum.NODE_NO_5); + }else { + return Lists.newArrayList(); + } + } + + public static NodeNoEnum getByCode(Integer code){ + for(NodeNoEnum nodeNoEnum : NodeNoEnum.values()){ + if(nodeNoEnum.getCode().equals(code)){ + return nodeNoEnum; + } + } + return null; + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInfoDAO.java index 9f53e3cb1..5dbf479d2 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInfoDAO.java @@ -11,7 +11,9 @@ import com.cool.store.request.LineListRequest; import com.cool.store.request.PartnerRequest; import com.cool.store.request.PublicLineListRequest; import com.cool.store.vo.PublicLineListVO; +import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -64,6 +66,15 @@ public class LineInfoDAO { return lineInfoMapper.updateByPrimaryKeySelective(lineInfo); } + + public Integer batchUpdateInterviewWorkflowStage(List lineIds, WorkflowSubStageEnum workflowSubStage, WorkflowSubStageStatusEnum workflowSubStageStatus) { + if(Objects.isNull(workflowSubStageStatus) || CollectionUtils.isEmpty(lineIds)){ + log.info("更新线索阶段,子阶段 和 子阶段状态不能同时为空"); + throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); + } + return lineInfoMapper.batchUpdateInterviewWorkflowStage(lineIds, workflowSubStage.getCode(), workflowSubStageStatus.getCode()); + } + public Integer updateWorkflowStageAndInterviewer(Long lineId, WorkflowSubStageStatusEnum workflowSubStageStatus, String firstInterviewer, String secondInterviewer) { LineInfoDO lineInfo = new LineInfoDO(); lineInfo.setId(lineId); @@ -115,4 +126,8 @@ public class LineInfoDAO { public void insertOrUpdate(LineInfoDO lineInfoParam){ lineInfoMapper.insertOrUpdate(lineInfoParam); } + + public List getLineListByDevelopmentManager(String developmentManager) { + return Lists.newArrayList(); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInterviewDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInterviewDAO.java index a76616c6f..ec2913d83 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInterviewDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInterviewDAO.java @@ -2,6 +2,7 @@ package com.cool.store.dao; import com.cool.store.dto.interview.LineInterviewPageDTO; import com.cool.store.entity.LineInterviewDO; +import com.cool.store.enums.InterviewStatusEnum; import com.cool.store.enums.InterviewTypeEnum; import com.cool.store.mapper.LineInterviewMapper; import com.cool.store.request.LineInterviewPageRequest; @@ -82,4 +83,15 @@ public class LineInterviewDAO { public List getInterviewByLineId(Long lineId){ return lineInterviewMapper.getInterviewByLineId(lineId); } + + public List getWaitAuditInterview(){ + return lineInterviewMapper.getWaitAuditInterview(); + } + + public Integer batchUpdateInterviewStatus(List interviewIds, InterviewStatusEnum interviewStatus) { + if(CollectionUtils.isEmpty(interviewIds) || Objects.isNull(interviewIds)){ + return null; + } + return lineInterviewMapper.batchUpdateInterviewStatus(interviewIds, interviewStatus.getCode()); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointAuditRecordDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointAuditRecordDAO.java new file mode 100644 index 000000000..96b220001 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointAuditRecordDAO.java @@ -0,0 +1,60 @@ +package com.cool.store.dao; + +import com.cool.store.entity.PointAuditRecordDO; +import com.cool.store.enums.AuditStatusEnum; +import com.cool.store.enums.NodeNoEnum; +import com.cool.store.mapper.PointAuditRecordMapper; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +@Repository +public class PointAuditRecordDAO { + + @Resource + private PointAuditRecordMapper pointAuditRecordMapper; + + /** + * 新增审批记录 + * @param historyList + */ + public void addPointAuditRecord(List recordList) { + pointAuditRecordMapper.batchInsertSelective(recordList); + } + + public List getPointAuditRecord(Long pointId, Integer cycleCount) { + if(Objects.isNull(pointId)){ + return Lists.newArrayList(); + } + return pointAuditRecordMapper.getPointAuditRecord(pointId, cycleCount); + } + + public Map getPointAuditRecordMap(Long pointId, Integer cycleCount) { + if(Objects.isNull(pointId) || Objects.isNull(cycleCount)){ + return Maps.newHashMap(); + } + List pointAuditRecord = pointAuditRecordMapper.getPointAuditRecord(pointId, cycleCount); + return pointAuditRecord.stream().collect(Collectors.toMap(k->k.getNodeNo(), v->v)); + } + + public Integer updatePointAuditRecord(PointAuditRecordDO param) { + if(Objects.isNull(param) || Objects.isNull(param.getId())){ + return null; + } + return pointAuditRecordMapper.updateByPrimaryKeySelective(param); + } + + public Integer deletePointAuditRecord(Long pointId, Integer cycleCount) { + if(Objects.isNull(pointId) || Objects.isNull(cycleCount)){ + return null; + } + return pointAuditRecordMapper.deletePointAuditRecord(pointId, cycleCount); + } +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointTodoInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointTodoInfoDAO.java new file mode 100644 index 000000000..bd399527a --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointTodoInfoDAO.java @@ -0,0 +1,45 @@ +package com.cool.store.dao; + +import com.cool.store.entity.PointTodoInfoDO; +import com.cool.store.enums.NodeNoEnum; +import com.cool.store.mapper.PointTodoInfoMapper; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Objects; + +@Repository +public class PointTodoInfoDAO { + + @Resource + private PointTodoInfoMapper pointTodoInfoMapper; + + public Integer addPointTodoInfo(List todoList) { + if(CollectionUtils.isEmpty(todoList)){ + return null; + } + return pointTodoInfoMapper.batchInsertSelective(todoList); + } + + public List getTodoUserList(Long pointId) { + return pointTodoInfoMapper.getTodoUserList(pointId); + } + + public List getTodoList(Long pointId) { + return pointTodoInfoMapper.getTodoList(pointId); + } + + public Integer updatePointTodoInfo(Long pointId, Integer nodeNo, Integer cycleCount, String handlerUserId) { + return pointTodoInfoMapper.updatePointTodoInfo(pointId, nodeNo, cycleCount, handlerUserId); + } + + public PointTodoInfoDO getPointToDoByUserIdAndPointId(String userId, Long pointId){ + if(StringUtils.isBlank(userId) || Objects.isNull(pointId)){ + return null; + } + return pointTodoInfoMapper.getPointToDoByUserIdAndPointId(userId, pointId); + } +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInfoMapper.java index ca95ad682..b07bf3652 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInfoMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInfoMapper.java @@ -62,4 +62,6 @@ public interface LineInfoMapper extends Mapper { void toExperiencing(@Param("lineIds") List lineIds, @Param("code") Integer code); + + Integer batchUpdateInterviewWorkflowStage(@Param("lineIds") List lineIds, @Param("workflowSubStage")Integer workflowSubStage, @Param("workflowSubStageStatus")Integer workflowSubStageStatus); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInterviewMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInterviewMapper.java index 867d93611..2e12c02e8 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInterviewMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInterviewMapper.java @@ -48,5 +48,24 @@ public interface LineInterviewMapper extends Mapper { */ Integer deleteInterviewInfo(@Param("interviewId")Long interviewId); + /** + * 获取面试信息 + * @param lineId + * @return + */ List getInterviewByLineId(@Param("lineId") Long lineId); + + /** + * 获取待审核面试信息 + * @return + */ + List getWaitAuditInterview(); + + /** + * 批量更新面试状态 + * @param interviewIds + * @param interviewStatus + * @return + */ + Integer batchUpdateInterviewStatus(@Param("interviewIds") List interviewIds, @Param("interviewStatus") Integer interviewStatus); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointAuditRecordMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointAuditRecordMapper.java new file mode 100644 index 000000000..44476a9e6 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointAuditRecordMapper.java @@ -0,0 +1,34 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.PointAuditRecordDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.Date; +import java.util.List; + +public interface PointAuditRecordMapper extends Mapper { + + /** + * 批量插入 + * @param addList + * @return + */ + Integer batchInsertSelective(@Param("addList") List addList); + + /** + * 获取处理记录 + * @param pointId + * @param cycleCount + * @return + */ + List getPointAuditRecord(@Param("pointId") Long pointId, @Param("cycleCount")Integer cycleCount); + + /** + * 删除未完成的处理记录 + * @param pointId + * @param cycleCount + * @return + */ + Integer deletePointAuditRecord(@Param("pointId") Long pointId, @Param("cycleCount") Integer cycleCount); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointTodoInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointTodoInfoMapper.java new file mode 100644 index 000000000..7ebaca2e6 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointTodoInfoMapper.java @@ -0,0 +1,49 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.PointTodoInfoDO; +import org.apache.ibatis.annotations.Param; +import tk.mybatis.mapper.common.Mapper; + +import java.util.List; + +public interface PointTodoInfoMapper extends Mapper { + + /** + * 批量插入 + * @param addList + * @return + */ + Integer batchInsertSelective(@Param("addList") List addList); + + /** + * 获取待办用户列表 + * @param pointId + * @return + */ + List getTodoUserList(@Param("pointId") Long pointId); + + /** + * 获取待办列表 + * @param pointId + * @return + */ + List getTodoList(@Param("pointId") Long pointId); + + /** + * 更新待办 + * @param pointId + * @param code + * @param cycleCount + * @param handlerUserId + * @return + */ + Integer updatePointTodoInfo(@Param("pointId") Long pointId, @Param("nodeNo") Integer nodeNo, @Param("cycleCount") Integer cycleCount, @Param("handlerUserId") String handlerUserId); + + /** + * 获取用户关于某个铺位的待办 + * @param userId + * @param pointId + * @return + */ + PointTodoInfoDO getPointToDoByUserIdAndPointId(String userId, Long pointId); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/LineInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/LineInfoMapper.xml index 4b182ef9d..9f4ff2ca7 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/LineInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/LineInfoMapper.xml @@ -427,5 +427,13 @@ and investment_manager = #{request.lastInvestmentManagerUserId} + + + update xfsg_line_info set workflow_sub_stage = #{workflowSubStage}, workflow_sub_stage_status = #{workflowSubStageStatus} where id in + + #{lineId} + + and workflow_sub_stage_status = 15 and workflow_sub_stage = 5 + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/LineInterviewMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/LineInterviewMapper.xml index 29d254788..705a95ab1 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/LineInterviewMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/LineInterviewMapper.xml @@ -112,4 +112,15 @@ and deleted = '0' + + + + update xfsg_line_interview set interview_status = #{interviewStatus} where id in + + #{item} + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/PointAuditRecordMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/PointAuditRecordMapper.xml new file mode 100644 index 000000000..1e31a435e --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/PointAuditRecordMapper.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + insert into xfsg_point_audit_record + + + point_id, + + + node_no, + + + cycle_count, + + + action_remark, + + + handler_user_id, + + + handler_user_ids, + + + receive_task_time, + + + finish_task_time, + + + audit_status, + + + sign_time, + + + sign_address, + + + picture_url, + + + reason, + + + + + #{item.pointId}, + + + #{item.nodeNo}, + + + #{item.cycleCount}, + + + #{item.actionRemark}, + + + #{item.handlerUserId}, + + + #{item.handlerUserIds}, + + + #{item.receiveTaskTime}, + + + #{item.finishTaskTime}, + + + #{item.auditStatus}, + + + #{item.signTime}, + + + #{item.signAddress}, + + + #{item.pictureUrl}, + + + #{item.reason}, + + + + + + + + + update xfsg_point_audit_record set deleted = 1 where point_id = #{pointId} and cycle_count = #{cycleCount} and audit_status = 0 + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/PointDetailInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/PointDetailInfoMapper.xml index f8aeb2b72..7a2792312 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/PointDetailInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/PointDetailInfoMapper.xml @@ -44,10 +44,10 @@ - - - - + + + + diff --git a/coolstore-partner-dao/src/main/resources/mapper/PointTodoInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/PointTodoInfoMapper.xml new file mode 100644 index 000000000..ce7a45627 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/PointTodoInfoMapper.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + insert into xfsg_point_todo_info + + + point_id, + + + node_no, + + + handler_user_id, + + + status, + + + cycle_count, + + + + + #{item.pointId}, + + + #{item.nodeNo}, + + + #{item.handlerUserId}, + + + #{item.status}, + + + #{item.cycleCount}, + + + + + + + + + + + + + update xfsg_point_todo_info set status = if(handler_user_id = #{handlerUserId}, 1, 2), update_time = now() where point_id = #{pointId} and node_no = #{nodeNo} and cycle_count = #{cycleCount} and deleted = 0 + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/test/resources/mybatis-generator.properties b/coolstore-partner-dao/src/test/resources/mybatis-generator.properties index 3d004f357..c3dc842c5 100644 --- a/coolstore-partner-dao/src/test/resources/mybatis-generator.properties +++ b/coolstore-partner-dao/src/test/resources/mybatis-generator.properties @@ -3,6 +3,6 @@ jdbc.url = jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcoll jdbc.user= coolstore jdbc.password = CSCErYcXniNYm7bT -table.name = xfsg_shop_point_recommend -table.object.class = ShopPointRecommendDO -table.mapper = ShopPointRecommendMapper \ No newline at end of file +table.name = xfsg_point_deal_record +table.object.class = PointDealRecordDO +table.mapper = PointDealRecordMapper \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/point/AuditNodeDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/point/AuditNodeDTO.java new file mode 100644 index 000000000..8c489ee12 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/point/AuditNodeDTO.java @@ -0,0 +1,96 @@ +package com.cool.store.dto.point; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.entity.PointAuditRecordDO; +import com.cool.store.entity.PointTodoInfoDO; +import com.cool.store.enums.AuditStatusEnum; +import com.cool.store.enums.NodeNoEnum; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: AuditNodeDTO + * @Description: + * @date 2024-04-02 15:10 + */ +@Data +public class AuditNodeDTO { + + @ApiModelProperty("流程号") + private Integer nodeNo; + + @ApiModelProperty("是否待处理") + private Boolean isToDo; + + @ApiModelProperty("动作") + private String actionRemark; + + @ApiModelProperty("用户id") + private List userIds; + + public AuditNodeDTO(Integer nodeNo, List userIds) { + this.nodeNo = nodeNo; + this.userIds = userIds; + } + + public AuditNodeDTO(Integer nodeNo, String actionRemark, Boolean isToDo, List userIds) { + this.nodeNo = nodeNo; + this.actionRemark = actionRemark; + this.isToDo = isToDo; + this.userIds = userIds; + } + + public static List convertDO(Long pointId, Integer cycleCount, List nodeList){ + if(CollectionUtils.isEmpty(nodeList)){ + return Lists.newArrayList(); + } + List resultList = new ArrayList<>(); + for (AuditNodeDTO auditNode : nodeList) { + PointAuditRecordDO node = new PointAuditRecordDO(); + node.setPointId(pointId); + node.setNodeNo(auditNode.getNodeNo()); + node.setCycleCount(cycleCount); + node.setActionRemark(auditNode.getActionRemark()); + node.setHandlerUserIds(JSONObject.toJSONString(auditNode.getUserIds())); + if(Objects.nonNull(auditNode.isToDo) && auditNode.isToDo){ + node.setReceiveTaskTime(new Date()); + } + if(NodeNoEnum.NODE_NO_0.getCode().equals(auditNode.getNodeNo())){ + node.setHandlerUserId(auditNode.getUserIds().get(0)); + node.setReceiveTaskTime(new Date()); + node.setFinishTaskTime(new Date()); + node.setAuditStatus(AuditStatusEnum.PASS.getCode()); + } + resultList.add(node); + } + return resultList; + } + + public static List convertTODO(Long pointId, Integer cycleCount, List nodeList){ + if(CollectionUtils.isEmpty(nodeList)){ + return Lists.newArrayList(); + } + List resultList = new ArrayList<>(); + for (AuditNodeDTO auditNode : nodeList) { + if(Objects.nonNull(auditNode.isToDo) && auditNode.isToDo){ + for (String userId : auditNode.getUserIds()) { + PointTodoInfoDO todo = new PointTodoInfoDO(); + todo.setPointId(pointId); + todo.setNodeNo(auditNode.getNodeNo()); + todo.setHandlerUserId(userId); + todo.setCycleCount(cycleCount); + resultList.add(todo); + } + } + } + return resultList; + } +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/LineInterviewDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/LineInterviewDO.java index edea7ffe2..fcdffb1f5 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/LineInterviewDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/LineInterviewDO.java @@ -1,5 +1,6 @@ package com.cool.store.entity; +import com.cool.store.enums.InterviewStatusEnum; import com.cool.store.utils.UUIDUtils; import lombok.Data; @@ -150,6 +151,7 @@ public class LineInterviewDO { addInterview.setInterviewerUserId(interviewer); addInterview.setInterviewType(interviewType); addInterview.setCalendarsEventId(calendarsEventId); + addInterview.setInterviewStatus(InterviewStatusEnum.WAIT_INTERVIEW.getCode()); return addInterview; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/PointAuditRecordDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointAuditRecordDO.java new file mode 100644 index 000000000..3377f9226 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointAuditRecordDO.java @@ -0,0 +1,169 @@ +package com.cool.store.entity; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.dto.point.AuditNodeDTO; +import com.cool.store.enums.AuditStatusEnum; +import com.cool.store.enums.NodeNoEnum; +import com.cool.store.request.PointAuditRequest; +import lombok.Data; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import javax.persistence.*; + +@Data +@Table(name = "xfsg_point_audit_record") +public class PointAuditRecordDO { + + public final static String SUBMIT_TASK = "提交审批任务"; + public final static String RECEIVE_TASK = "收到任务"; + public final static String AUDIT_PASS = "审批通过"; + public final static String AUDIT_REJECT = "审批拒绝"; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 点位id + */ + @Column(name = "point_id") + private Long pointId; + + /** + * 当前节点 0提交审批任务 1-5级审批, 100完成 + */ + @Column(name = "node_no") + private Integer nodeNo; + + /** + * 轮次 + */ + @Column(name = "cycle_count") + private Integer cycleCount; + + /** + * 动作备注 + */ + @Column(name = "action_remark") + private String actionRemark; + + /** + * 实际处理人 + */ + @Column(name = "handler_user_id") + private String handlerUserId; + + /** + * 处理人集合 + */ + @Column(name = "handler_user_ids") + private String handlerUserIds; + + /** + * 收到任务时间 + */ + @Column(name = "receive_task_time") + private Date receiveTaskTime; + + /** + * 完成任务时间 + */ + @Column(name = "finish_task_time") + private Date finishTaskTime; + + /** + * 审核状态0待处理,1通过,2拒绝 + */ + @Column(name = "audit_status") + private Integer auditStatus; + + /** + * 签到时间 + */ + @Column(name = "sign_time") + private Date signTime; + + /** + * 签到位置 + */ + @Column(name = "sign_address") + private String signAddress; + + /** + * 图片 + */ + @Column(name = "picture_url") + private String pictureUrl; + + /** + * 原因 + */ + private String reason; + + /** + * 删除标识 + */ + private Boolean deleted; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + + public static List convertTODO(PointAuditRecordDO nextAuditRecord){ + List resultList = new ArrayList<>(); + List handlerUserIds = JSONObject.parseArray(nextAuditRecord.getHandlerUserIds(), String.class); + for (String userId : handlerUserIds) { + PointTodoInfoDO todo = new PointTodoInfoDO(); + todo.setPointId(nextAuditRecord.getPointId()); + todo.setNodeNo(nextAuditRecord.getNodeNo()); + todo.setHandlerUserId(userId); + todo.setCycleCount(nextAuditRecord.getCycleCount()); + resultList.add(todo); + } + return resultList; + } + + public static PointAuditRecordDO convert(Long auditRecordId, String handlerUserId, AuditStatusEnum auditStatus, String reason, NodeNoEnum nodeNoEnum){ + PointAuditRecordDO updateAuditRecord = new PointAuditRecordDO(); + updateAuditRecord.setId(auditRecordId); + updateAuditRecord.setHandlerUserId(handlerUserId); + updateAuditRecord.setAuditStatus(auditStatus.getCode()); + updateAuditRecord.setReason(reason); + updateAuditRecord.setActionRemark(nodeNoEnum.getTypeName() + " " +auditStatus.getName()); + updateAuditRecord.setFinishTaskTime(new Date()); + return updateAuditRecord; + } + + public static PointAuditRecordDO convert(Long auditRecordId, Date receiveTaskTime){ + PointAuditRecordDO updateAuditRecord = new PointAuditRecordDO(); + updateAuditRecord.setId(auditRecordId); + updateAuditRecord.setReceiveTaskTime(receiveTaskTime); + return updateAuditRecord; + } + + public static PointAuditRecordDO convert(Long auditRecordId, String handlerUserId, AuditStatusEnum auditStatus, String reason, NodeNoEnum nodeNoEnum, Date signTime, String signAddress, String pictureUrl){ + PointAuditRecordDO updateAuditRecord = new PointAuditRecordDO(); + updateAuditRecord.setId(auditRecordId); + updateAuditRecord.setHandlerUserId(handlerUserId); + updateAuditRecord.setAuditStatus(auditStatus.getCode()); + updateAuditRecord.setReason(reason); + updateAuditRecord.setActionRemark(nodeNoEnum.getTypeName() + " " +auditStatus.getName()); + updateAuditRecord.setSignTime(signTime); + updateAuditRecord.setSignAddress(signAddress); + updateAuditRecord.setPictureUrl(pictureUrl); + updateAuditRecord.setFinishTaskTime(new Date()); + return updateAuditRecord; + } + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/PointDetailInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointDetailInfoDO.java index e636613ac..b990139a7 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/PointDetailInfoDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointDetailInfoDO.java @@ -265,25 +265,25 @@ public class PointDetailInfoDO { * 店长数量 */ @Column(name = "shop_manager_num") - private String shopManagerNum; + private Integer shopManagerNum; /** - * 店长费用 + * 店长基本工资 */ @Column(name = "shop_manager_fee") - private String shopManagerFee; + private Integer shopManagerFee; /** * 店员数量 */ @Column(name = "clerk_num") - private String clerkNum; + private Integer clerkNum; /** - * 店员费用 + * 店员基本工资 */ @Column(name = "clerk_fee") - private String clerkFee; + private Integer clerkFee; /** * 奖金分红 @@ -587,12 +587,6 @@ public class PointDetailInfoDO { if(Objects.isNull(this.staffFee)){ return false; } - if(Objects.isNull(this.shopManagerFee) || Objects.isNull(this.shopManagerNum)){ - return false; - } - if(Objects.isNull(this.clerkFee) || Objects.isNull(this.clerkNum)){ - return false; - } if(Objects.isNull(this.bonus) || Objects.isNull(this.monthRent) ||Objects.isNull(this.otherFee)){ return false; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/PointTodoInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointTodoInfoDO.java new file mode 100644 index 000000000..9e9b6eaca --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/PointTodoInfoDO.java @@ -0,0 +1,61 @@ +package com.cool.store.entity; + +import lombok.Data; + +import java.util.Date; +import javax.persistence.*; + +@Data +@Table(name = "xfsg_point_todo_info") +public class PointTodoInfoDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 铺位id + */ + @Column(name = "point_id") + private Long pointId; + + /** + * 当前节点 0提交审批 1-5级审批, 100完成 + */ + @Column(name = "node_no") + private Integer nodeNo; + + /** + * 处理人 + */ + @Column(name = "handler_user_id") + private String handlerUserId; + + /** + * 0待完成,1已完成 + */ + private Integer status; + + /** + * 轮次 + */ + @Column(name = "cycle_count") + private Integer cycleCount; + + /** + * 删除标识 + */ + private Boolean deleted; + + /** + * 创建时间 + */ + @Column(name = "create_time") + private Date createTime; + + /** + * 更新时间 + */ + @Column(name = "update_time") + private Date updateTime; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AddPointDetailRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AddPointDetailRequest.java index 089848e87..a51eb0875 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/AddPointDetailRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AddPointDetailRequest.java @@ -188,18 +188,6 @@ public class AddPointDetailRequest { @ApiModelProperty("基本人工费用") private String staffFee; - @ApiModelProperty("店长数量") - private String shopManagerNum; - - @ApiModelProperty("店长费用") - private String shopManagerFee; - - @ApiModelProperty("店员数量") - private String clerkNum; - - @ApiModelProperty("店员费用") - private String clerkFee; - @ApiModelProperty("奖金分红") private String bonus; @@ -263,10 +251,6 @@ public class AddPointDetailRequest { result.setBrandUseRate(request.getBrandUseRate()); result.setBrandUseFee(request.getBrandUseFee()); result.setStaffFee(request.getStaffFee()); - result.setShopManagerNum(request.getShopManagerNum()); - result.setShopManagerFee(request.getShopManagerFee()); - result.setClerkNum(request.getClerkNum()); - result.setClerkFee(request.getClerkFee()); result.setBonus(request.getBonus()); result.setMonthRent(request.getMonthRent()); result.setOtherFee(request.getOtherFee()); diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AuditSettingRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditSettingRequest.java new file mode 100644 index 000000000..9ab7a5a51 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AuditSettingRequest.java @@ -0,0 +1,32 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: AuditSettingRequest + * @Description: + * @date 2024-04-02 14:11 + */ +@Data +public class AuditSettingRequest { + + @ApiModelProperty("第一级审批") + private List firstApproval; + + @ApiModelProperty("第二级审批") + private List secondApproval; + + @ApiModelProperty("第三级审批") + private List thirdApproval; + + @ApiModelProperty("第四级审批") + private List fourthApproval; + + @ApiModelProperty("第五级审批") + private List fifthApproval; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/OperationAuditRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/OperationAuditRequest.java new file mode 100644 index 000000000..94bb6f4d5 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/OperationAuditRequest.java @@ -0,0 +1,96 @@ +package com.cool.store.request; + +import com.cool.store.entity.PointDetailInfoDO; +import com.cool.store.enums.AuditResultTypeEnum; +import com.cool.store.enums.AuditStatusEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.Date; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: PointAuditRequest + * @Description: + * @date 2024-04-03 14:13 + */ +@Data +public class OperationAuditRequest { + + @NotNull + @ApiModelProperty("铺位id") + private Long pointId; + + @NotNull + @Min(1) + @Max(2) + @ApiModelProperty("1通过,2拒绝") + private Integer auditStatus; + + @NotNull + @ApiModelProperty("签到时间") + private Date signTime; + + @NotNull + @NotBlank + @ApiModelProperty("签到位置") + private String signAddress; + + @NotNull + @NotBlank + @ApiModelProperty("图片") + private String pictureUrl; + + @ApiModelProperty("原因") + private String reason; + + @ApiModelProperty("店长数量") + private Integer shopManagerNum; + + @ApiModelProperty("店长基本工资") + private Integer shopManagerFee; + + @ApiModelProperty("店员数量") + private Integer clerkNum; + + @ApiModelProperty("店员基本工资") + private Integer clerkFee; + + @ApiModelProperty("营运人员签字") + private String operationUserSign; + + public boolean check() { + if(AuditStatusEnum.PASS.getCode().equals(this.auditStatus)){ + if(Objects.isNull(this.shopManagerNum) || Objects.isNull(this.shopManagerFee) || Objects.isNull(this.clerkNum) || Objects.isNull(this.clerkFee)){ + return false; + } + if(StringUtils.isBlank(this.operationUserSign)){ + return false; + } + }else{ + if(StringUtils.isBlank(this.reason)){ + return false; + } + } + return true; + } + + public static PointDetailInfoDO convertDO(Long pointDetailId, OperationAuditRequest request){ + PointDetailInfoDO pointDetailInfo = new PointDetailInfoDO(); + pointDetailInfo.setId(pointDetailId); + pointDetailInfo.setPointId(request.getPointId()); + pointDetailInfo.setShopManagerNum(request.getShopManagerNum()); + pointDetailInfo.setShopManagerFee(request.getShopManagerFee()); + pointDetailInfo.setClerkNum(request.getClerkNum()); + pointDetailInfo.setClerkFee(request.getClerkFee()); + pointDetailInfo.setOperationUserSign(request.getOperationUserSign()); + return pointDetailInfo; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/PointAuditRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/PointAuditRequest.java new file mode 100644 index 000000000..d5a1e9c75 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/PointAuditRequest.java @@ -0,0 +1,27 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @author zhangchenbiao + * @FileName: PointAuditRequest + * @Description: + * @date 2024-04-03 14:13 + */ +@Data +public class PointAuditRequest { + + @ApiModelProperty("铺位id") + private Long pointId; + + @ApiModelProperty("1通过,2拒绝") + private Integer auditStatus; + + @ApiModelProperty("原因") + private String reason; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/PointIdRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/PointIdRequest.java new file mode 100644 index 000000000..93f46c530 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/PointIdRequest.java @@ -0,0 +1,18 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: PointIdRequest + * @Description: + * @date 2024-04-02 17:19 + */ +@Data +public class PointIdRequest { + + @ApiModelProperty("点位id") + private Long pointId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/SubmitPointAuditRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/SubmitPointAuditRequest.java new file mode 100644 index 000000000..e50acd3d1 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/SubmitPointAuditRequest.java @@ -0,0 +1,32 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * @author zhangchenbiao + * @FileName: SubmitPointAuditRequest + * @Description: + * @date 2024-04-03 14:03 + */ +@Data +public class SubmitPointAuditRequest { + + @NotNull + @ApiModelProperty("点位id") + private Long pointId; + + @NotNull + @NotBlank + @ApiModelProperty("营运人员") + private String operateUserId; + + @NotNull + @NotBlank + @ApiModelProperty("拓展专员签名") + private String developmentManagerSign; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/TurnDevelopmentManagerRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/TurnDevelopmentManagerRequest.java new file mode 100644 index 000000000..84d2749eb --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/TurnDevelopmentManagerRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: TurnDevelopmentManagerRequest + * @Description:转让招商经理 + * @date 2024-04-07 14:34 + */ +@Data +public class TurnDevelopmentManagerRequest { + + @ApiModelProperty("铺位id") + private Long pointId; + + @ApiModelProperty("拓展经理") + private String developmentManager; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/UpdatePointDetailRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/UpdatePointDetailRequest.java index 42441ef06..ec9d55418 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/UpdatePointDetailRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/UpdatePointDetailRequest.java @@ -58,10 +58,6 @@ public class UpdatePointDetailRequest extends AddPointDetailRequest { result.setBrandUseRate(request.getBrandUseRate()); result.setBrandUseFee(request.getBrandUseFee()); result.setStaffFee(request.getStaffFee()); - result.setShopManagerNum(request.getShopManagerNum()); - result.setShopManagerFee(request.getShopManagerFee()); - result.setClerkNum(request.getClerkNum()); - result.setClerkFee(request.getClerkFee()); result.setBonus(request.getBonus()); result.setMonthRent(request.getMonthRent()); result.setOtherFee(request.getOtherFee()); diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/UserAndPositionRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/UserAndPositionRequest.java new file mode 100644 index 000000000..bba68c9ed --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/UserAndPositionRequest.java @@ -0,0 +1,27 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserAndPositionRequest { + + @ApiModelProperty("类型 职位:position 人员:person") + private String type; + + @ApiModelProperty("type对应的值") + private String value; + + @ApiModelProperty("名称") + private String name; + + + public static UserAndPositionRequest convert(String type, String value, String name) { + UserAndPositionRequest userAndPositionRequest = new UserAndPositionRequest(); + userAndPositionRequest.setType(type); + userAndPositionRequest.setValue(value); + userAndPositionRequest.setName(name); + return userAndPositionRequest; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/LineUsernameAndMobileVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/LineUsernameAndMobileVO.java new file mode 100644 index 000000000..15d4457be --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/LineUsernameAndMobileVO.java @@ -0,0 +1,24 @@ +package com.cool.store.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: LineUsernameAndMobileVO + * @Description: + * @date 2024-04-07 14:39 + */ +@Data +public class LineUsernameAndMobileVO { + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("用户名") + private String username; + + @ApiModelProperty("手机号") + private String mobile; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/AuditSettingVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/AuditSettingVO.java new file mode 100644 index 000000000..bafce2764 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/AuditSettingVO.java @@ -0,0 +1,33 @@ +package com.cool.store.vo.point; + +import com.cool.store.request.UserAndPositionRequest; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author zhangchenbiao + * @FileName: AuditSettingRequest + * @Description: + * @date 2024-04-02 14:11 + */ +@Data +public class AuditSettingVO { + + @ApiModelProperty("第一级审批") + private List firstApproval; + + @ApiModelProperty("第二级审批") + private List secondApproval; + + @ApiModelProperty("第三级审批") + private List thirdApproval; + + @ApiModelProperty("第四级审批") + private List fourthApproval; + + @ApiModelProperty("第五级审批") + private List fifthApproval; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointDetailVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointDetailVO.java index a1096e877..e493c0cd6 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointDetailVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointDetailVO.java @@ -161,16 +161,16 @@ public class PointDetailVO { private String staffFee; @ApiModelProperty("店长数量") - private String shopManagerNum; + private Integer shopManagerNum; - @ApiModelProperty("店长费用") - private String shopManagerFee; + @ApiModelProperty("店长基本工资") + private Integer shopManagerFee; @ApiModelProperty("店员数量") - private String clerkNum; + private Integer clerkNum; - @ApiModelProperty("店员费用") - private String clerkFee; + @ApiModelProperty("店员基本工资") + private Integer clerkFee; @ApiModelProperty("奖金分红") private String bonus; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/ShopPointService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/ShopPointService.java index cbb284268..ced9396ec 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/ShopPointService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/ShopPointService.java @@ -1,10 +1,12 @@ package com.cool.store.service; -import com.cool.store.request.AddMapEvaluationReportRequest; -import com.cool.store.request.AddPointDetailRequest; -import com.cool.store.request.UpdatePointDetailRequest; +import com.cool.store.request.*; +import com.cool.store.vo.LineUsernameAndMobileVO; +import com.cool.store.vo.point.AuditSettingVO; import com.cool.store.vo.point.PointDetailVO; +import java.util.List; + /** * @author zhangchenbiao * @FileName: ShopPointService @@ -69,5 +71,55 @@ public interface ShopPointService { * @param pointId * @return */ - Integer submitAudit(Long pointId); + Integer submitAudit(SubmitPointAuditRequest request); + + /** + * 审批设置 + * @param request + * @return + */ + Integer auditSetting(AuditSettingRequest request); + + /** + * 获取审批设置 + * @return + */ + AuditSettingVO getAuditSetting(); + + /** + * 获取点位待办用户列表 + * @param pointId + * @return + */ + List getTodoUserList(Long pointId); + + /** + * 营运人员审批 + * @param userId + * @param request + * @return + */ + Integer operationUserAudit(String userId, OperationAuditRequest request); + + /** + * 审批 + * @param userId + * @param request + * @return + */ + Integer audit(String userId, PointAuditRequest request); + + /** + * 转让招商经理 + * @param request + * @return + */ + Integer turnDevelopmentManager(TurnDevelopmentManagerRequest request); + + /** + * 获取我负责的线索列表 + * @param developmentManager + * @return + */ + List getLineList(String developmentManager); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopPointServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopPointServiceImpl.java index cb7af1fca..8f9bc2d1d 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopPointServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopPointServiceImpl.java @@ -1,27 +1,37 @@ package com.cool.store.service.impl; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; import com.cool.store.dao.*; -import com.cool.store.entity.PointDetailInfoDO; -import com.cool.store.entity.PointInfoDO; +import com.cool.store.dto.point.AuditNodeDTO; +import com.cool.store.entity.*; +import com.cool.store.enums.AuditStatusEnum; import com.cool.store.enums.ErrorCodeEnum; +import com.cool.store.enums.NodeNoEnum; import com.cool.store.enums.point.PointRecommendStatus; import com.cool.store.enums.point.PointStatusEnum; import com.cool.store.enums.point.SelectStatusEnum; import com.cool.store.exception.ServiceException; -import com.cool.store.request.AddMapEvaluationReportRequest; -import com.cool.store.request.AddPointDetailRequest; -import com.cool.store.request.UpdatePointDetailRequest; +import com.cool.store.request.*; import com.cool.store.service.ShopPointService; +import com.cool.store.service.UserAuthMappingService; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.poi.StringUtils; +import com.cool.store.vo.LineUsernameAndMobileVO; +import com.cool.store.vo.point.AuditSettingVO; import com.cool.store.vo.point.PointDetailVO; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.ListUtils; +import org.apache.commons.lang3.tuple.Pair; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.Arrays; -import java.util.Date; -import java.util.Objects; +import java.util.*; +import java.util.stream.Collectors; /** * @author zhangchenbiao @@ -43,6 +53,16 @@ public class ShopPointServiceImpl implements ShopPointService { private LineInfoDAO lineInfoDAO; @Resource private PointRecommendDAO pointRecommendDAO; + @Resource + private RedisUtilPool redisUtilPool; + @Resource + private UserAuthMappingService userAuthMappingService; + @Resource + private PointAuditRecordDAO pointAuditRecordDAO; + @Resource + private PointTodoInfoDAO pointTodoInfoDAO; + + private static final String AUDIT_SETTING_KEY = "audit_setting_key"; @Override public Long addPointDetailInfo(AddPointDetailRequest shopPointDetailRequest, String userId) { @@ -148,7 +168,9 @@ public class ShopPointServiceImpl implements ShopPointService { } @Override - public Integer submitAudit(Long pointId) { + @Transactional(rollbackFor = Exception.class) + public Integer submitAudit(SubmitPointAuditRequest request) { + Long pointId = request.getPointId(); PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(pointId); if(Objects.isNull(pointInfo)){ log.error("铺位基本信息不存在"); @@ -157,14 +179,281 @@ public class ShopPointServiceImpl implements ShopPointService { if(!PointStatusEnum.POINT_STATUS_2.getCode().equals(pointInfo.getPointStatus())){ throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); } + PointDetailInfoDO pointDetailInfo = pointDetailInfoDAO.getPointDetailInfoByPointId(pointId); + if(Objects.isNull(pointDetailInfo)){ + log.error("铺位详细信息不存在"); + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + int submitAuditCount = pointInfo.getSubmitAuditCount() + 1; PointInfoDO updatePoint = new PointInfoDO(); updatePoint.setId(pointId); updatePoint.setPointStatus(PointStatusEnum.POINT_STATUS_3.getCode()); - updatePoint.setSubmitAuditCount(pointInfo.getSubmitAuditCount() + 1); + updatePoint.setSubmitAuditCount(submitAuditCount); + PointDetailInfoDO updatePointDetail = new PointDetailInfoDO(); + updatePointDetail.setId(pointDetailInfo.getId()); + updatePointDetail.setDevelopmentManagerSign(request.getDevelopmentManagerSign()); + updatePointDetail.setDevelopmentManagerSignTime(new Date()); + pointDetailInfoDAO.updatePointDetailInfo(updatePointDetail); //处理子任务审核记录表 + AuditSettingVO auditSetting = getAuditSetting(); + if(Objects.isNull(auditSetting)){ + throw new ServiceException(ErrorCodeEnum.POINT_AUDIT_NOT_SETTING); + } + List auditNode = dealAuditNode(auditSetting, pointInfo); + //获取审批节点上的数据 + List recordList = AuditNodeDTO.convertDO(pointId, submitAuditCount, auditNode); + pointAuditRecordDAO.addPointAuditRecord(recordList); + //获取待办数据 + List todoList = AuditNodeDTO.convertTODO(pointId, submitAuditCount, auditNode); + pointTodoInfoDAO.addPointTodoInfo(todoList); return pointInfoDAO.updatePointInfo(updatePoint); } + @Override + public Integer auditSetting(AuditSettingRequest request) { + request.setSecondApproval(Arrays.asList(UserAndPositionRequest.convert("position", null, "战区营运"))); + redisUtilPool.setString(AUDIT_SETTING_KEY, JSONObject.toJSONString(request)); + return null; + } + + @Override + public AuditSettingVO getAuditSetting() { + String auditSetting = redisUtilPool.getString(AUDIT_SETTING_KEY); + if(StringUtils.isBlank(auditSetting)){ + return null; + } + return JSONObject.parseObject(auditSetting, AuditSettingVO.class); + } + + @Override + public List getTodoUserList(Long pointId) { + return pointTodoInfoDAO.getTodoUserList(pointId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer operationUserAudit(String userId, OperationAuditRequest request) { + if(!request.check()){ + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } + Long pointId = request.getPointId(); + PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(pointId); + PointDetailInfoDO pointDetailInfo = pointDetailInfoDAO.getPointDetailInfoByPointId(pointId); + if(Objects.isNull(pointInfo) || Objects.isNull(pointDetailInfo)){ + log.info("铺位基本信息不存在"); + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + if(!PointStatusEnum.POINT_STATUS_3.getCode().equals(pointInfo.getPointStatus())){ + log.info("铺位状态不允许该操作"); + throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_OPERATE); + } + if(!userId.equals(pointInfo.getOperateUserId())){ + log.info("运营人员不对"); + throw new ServiceException(ErrorCodeEnum.NO_PERMISSION); + } + PointTodoInfoDO pointTodo = pointTodoInfoDAO.getPointToDoByUserIdAndPointId(userId, pointId); + if(Objects.isNull(pointTodo)){ + log.info("该用户没有待办数据"); + throw new ServiceException(ErrorCodeEnum.USER_NOT_TODO_AUDIT); + } + if(!NodeNoEnum.NODE_NO_2.getCode().equals(pointTodo.getNodeNo())){ + log.info("获取铺位待办数据不对"); + throw new ServiceException(ErrorCodeEnum.POINT_AUDIT_NODE_ERROR); + } + Map pointAuditRecordMap = pointAuditRecordDAO.getPointAuditRecordMap(pointId, pointInfo.getSubmitAuditCount()); + PointAuditRecordDO pointAuditRecord = pointAuditRecordMap.get(NodeNoEnum.NODE_NO_2.getCode()); + if(Objects.isNull(pointAuditRecord) || !AuditStatusEnum.TODO.getCode().equals(pointAuditRecord.getAuditStatus())){ + log.info("铺位处理记录中的数据不对或者状态不对"); + throw new ServiceException(ErrorCodeEnum.POINT_AUDIT_NODE_ERROR); + } + AuditStatusEnum auditStatus = AuditStatusEnum.getByCode(request.getAuditStatus()); + PointInfoDO updatePoint = new PointInfoDO(); + updatePoint.setId(pointId); + PointDetailInfoDO updatePointDetailInfo = OperationAuditRequest.convertDO(pointDetailInfo.getId(), request); + pointDetailInfoDAO.updatePointDetailInfo(updatePointDetailInfo); + pointTodoInfoDAO.updatePointTodoInfo(pointId, NodeNoEnum.NODE_NO_2.getCode(), pointInfo.getSubmitAuditCount(), userId); + PointAuditRecordDO updateAuditRecord = PointAuditRecordDO.convert(pointAuditRecord.getId(), userId, auditStatus, request.getReason(), NodeNoEnum.NODE_NO_2, request.getSignTime(), request.getSignAddress(), request.getPictureUrl()); + pointAuditRecordDAO.updatePointAuditRecord(updateAuditRecord); + if(AuditStatusEnum.REJECT.equals(auditStatus)){ + //删除剩余未完成的审核记录 + pointAuditRecordDAO.deletePointAuditRecord(pointId, pointInfo.getSubmitAuditCount()); + updatePoint.setPointStatus(PointStatusEnum.POINT_STATUS_2.getCode()); + return pointInfoDAO.updatePointInfo(updatePoint); + } + PointAuditRecordDO nextAuditRecord = getNextAuditRecord(NodeNoEnum.NODE_NO_2.getCode(), pointAuditRecordMap); + if(Objects.nonNull(nextAuditRecord)){ + pointAuditRecordDAO.updatePointAuditRecord(PointAuditRecordDO.convert(nextAuditRecord.getId(), new Date())); + //审批通过的情况下 生成下一个节点的待办数据 + pointTodoInfoDAO.addPointTodoInfo(PointAuditRecordDO.convertTODO(nextAuditRecord)); + updatePoint.setPointStatus(PointStatusEnum.POINT_STATUS_4.getCode()); + }else{ + //没有下一节点 审批通过 + Integer pointStatus = SelectStatusEnum.SELECT_STATUS_1.getCode().equals(pointInfo.getSelectStatus()) ? PointStatusEnum.POINT_STATUS_6.getCode() : PointStatusEnum.POINT_STATUS_5.getCode(); + updatePoint.setPointStatus(pointStatus); + } + return pointInfoDAO.updatePointInfo(updatePoint); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer audit(String userId, PointAuditRequest request) { + Long pointId = request.getPointId(); + PointTodoInfoDO pointTodo = pointTodoInfoDAO.getPointToDoByUserIdAndPointId(userId, pointId); + if(Objects.isNull(pointTodo)){ + log.info("该用户没有待办数据"); + throw new ServiceException(ErrorCodeEnum.USER_NOT_TODO_AUDIT); + } + if(NodeNoEnum.NODE_NO_2.getCode().equals(pointTodo.getNodeNo())){ + log.info("获取铺位待办数据不对"); + throw new ServiceException(ErrorCodeEnum.POINT_AUDIT_NODE_ERROR); + } + PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(pointId); + if(Objects.isNull(pointInfo)){ + log.info("铺位不存在"); + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + AuditStatusEnum auditStatus = AuditStatusEnum.getByCode(request.getAuditStatus()); + //更新当前待办 + pointTodoInfoDAO.updatePointTodoInfo(pointId, pointTodo.getNodeNo(), pointInfo.getSubmitAuditCount(), userId); + Map pointAuditRecordMap = pointAuditRecordDAO.getPointAuditRecordMap(pointId, pointInfo.getSubmitAuditCount()); + PointAuditRecordDO pointAuditRecord = pointAuditRecordMap.get(pointTodo.getNodeNo()); + if(Objects.isNull(pointAuditRecord)){ + log.info("铺位处理记录中的数据不对"); + throw new ServiceException(ErrorCodeEnum.POINT_AUDIT_NODE_ERROR); + } + NodeNoEnum nodeNoEnum = NodeNoEnum.getByCode(pointTodo.getNodeNo()); + PointAuditRecordDO auditRecord = PointAuditRecordDO.convert(pointAuditRecord.getId(), userId, auditStatus, request.getReason(), nodeNoEnum); + pointAuditRecordDAO.updatePointAuditRecord(auditRecord); + if(AuditStatusEnum.REJECT.equals(auditStatus)){ + PointInfoDO pointInfoUpdate = new PointInfoDO(); + pointInfoUpdate.setId(pointId); + pointInfoUpdate.setPointStatus(PointStatusEnum.POINT_STATUS_2.getCode()); + //删除剩余未完成的审核记录 + pointAuditRecordDAO.deletePointAuditRecord(pointId, pointInfo.getSubmitAuditCount()); + return pointInfoDAO.updatePointInfo(pointInfoUpdate); + } + PointAuditRecordDO nextAuditRecord = getNextAuditRecord(pointTodo.getNodeNo(), pointAuditRecordMap); + if(Objects.nonNull(nextAuditRecord)){ + //更新下一阶段任务的收到任务时间 + pointAuditRecordDAO.updatePointAuditRecord(PointAuditRecordDO.convert(nextAuditRecord.getId(), new Date())); + //审批通过的情况下 生成下一个节点的待办数据 + return pointTodoInfoDAO.addPointTodoInfo(PointAuditRecordDO.convertTODO(nextAuditRecord)); + } + PointInfoDO pointInfoUpdate = new PointInfoDO(); + pointInfoUpdate.setId(pointId); + Integer pointStatus = SelectStatusEnum.SELECT_STATUS_1.getCode().equals(pointInfo.getSelectStatus()) ? PointStatusEnum.POINT_STATUS_6.getCode() : PointStatusEnum.POINT_STATUS_5.getCode(); + pointInfoUpdate.setPointStatus(pointStatus); + return pointInfoDAO.updatePointInfo(pointInfoUpdate); + } + + @Override + public Integer turnDevelopmentManager(TurnDevelopmentManagerRequest request) { + PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(request.getPointId()); + if(Objects.isNull(pointInfo)){ + throw new ServiceException(ErrorCodeEnum.POINT_NOT_EXIST); + } + pointInfo.setDevelopmentManager(request.getDevelopmentManager()); + return pointInfoDAO.updatePointInfo(pointInfo); + } + + @Override + public List getLineList(String developmentManager) { + lineInfoDAO.getLineListByDevelopmentManager(developmentManager); + return null; + } + + public List dealAuditNode(AuditSettingVO auditSetting, PointInfoDO pointInfo) { + List roleIds = new ArrayList<>(); + //审核人 + Pair, List> firstApproval = getUserIdsAndPositionIds(auditSetting.getFirstApproval()); + Pair, List> thirdApproval = getUserIdsAndPositionIds(auditSetting.getThirdApproval()); + Pair, List> fourthApproval = getUserIdsAndPositionIds(auditSetting.getFourthApproval()); + Pair, List> fifthApproval = getUserIdsAndPositionIds(auditSetting.getFifthApproval()); + if(CollectionUtils.isNotEmpty(firstApproval.getValue())){ + roleIds.addAll(firstApproval.getValue()); + } + if(CollectionUtils.isNotEmpty(thirdApproval.getValue())){ + roleIds.addAll(thirdApproval.getValue()); + } + if(CollectionUtils.isNotEmpty(fourthApproval.getValue())){ + roleIds.addAll(fourthApproval.getValue()); + } + if(CollectionUtils.isNotEmpty(fifthApproval.getValue())){ + roleIds.addAll(fifthApproval.getValue()); + } + List resultList = new ArrayList<>(); + Map> userIdsMap = userAuthMappingService.getUserIdByRoleIdAndRegionId(roleIds, pointInfo.getRegionId()); + List firstApprovalUserIds = getUserIdsByPositionIds(firstApproval, userIdsMap); + List thirdApprovalUserIds = getUserIdsByPositionIds(thirdApproval, userIdsMap); + List fourthApprovalUserIds = getUserIdsByPositionIds(fourthApproval, userIdsMap); + List fifthApprovalUserIds = getUserIdsByPositionIds(fifthApproval, userIdsMap); + resultList.add(new AuditNodeDTO(NodeNoEnum.NODE_NO_0.getCode(), PointAuditRecordDO.SUBMIT_TASK, Boolean.FALSE, Arrays.asList(pointInfo.getDevelopmentManager()))); + if(CollectionUtils.isNotEmpty(firstApprovalUserIds)){ + resultList.add(new AuditNodeDTO(NodeNoEnum.NODE_NO_1.getCode(), PointAuditRecordDO.RECEIVE_TASK, Boolean.TRUE, firstApprovalUserIds)); + resultList.add(new AuditNodeDTO(NodeNoEnum.NODE_NO_2.getCode(), Arrays.asList(pointInfo.getOperateUserId()))); + }else{ + resultList.add(new AuditNodeDTO(NodeNoEnum.NODE_NO_2.getCode(), PointAuditRecordDO.RECEIVE_TASK, Boolean.TRUE, Arrays.asList(pointInfo.getOperateUserId()))); + } + + if(CollectionUtils.isNotEmpty(thirdApprovalUserIds)){ + resultList.add(new AuditNodeDTO(NodeNoEnum.NODE_NO_3.getCode(), thirdApprovalUserIds)); + } + if(CollectionUtils.isNotEmpty(fourthApprovalUserIds)){ + resultList.add(new AuditNodeDTO(NodeNoEnum.NODE_NO_4.getCode(), fourthApprovalUserIds)); + } + if(CollectionUtils.isNotEmpty(fifthApprovalUserIds)){ + resultList.add(new AuditNodeDTO(NodeNoEnum.NODE_NO_5.getCode(), fifthApprovalUserIds)); + } + return resultList; + } + + /** + * 获取配置的userId 和 角色id + * @param requests + * @return + */ + private Pair, List> getUserIdsAndPositionIds(List requests){ + List positionIds = ListUtils.emptyIfNull(requests).stream().filter(o -> "position".equals(o.getType())).map(UserAndPositionRequest::getValue).collect(Collectors.toList()); + List userIds = ListUtils.emptyIfNull(requests).stream().filter(o -> "person".equals(o.getType())).map(UserAndPositionRequest::getValue).collect(Collectors.toList()); + return Pair.of(userIds, positionIds); + } + + /** + * 获取userId + * @param userIdsAndPositionIds + * @param userIdsMap + * @return + */ + private List getUserIdsByPositionIds(Pair, List> userIdsAndPositionIds, Map> userIdsMap) { + List userIds = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(userIdsAndPositionIds.getKey())){ + userIds.addAll(userIdsAndPositionIds.getKey()); + } + if(CollectionUtils.isNotEmpty(userIdsAndPositionIds.getValue())){ + userIdsAndPositionIds.getValue().forEach(positionId -> { + List userIdList = userIdsMap.get(positionId); + if(CollectionUtils.isNotEmpty(userIdList)){ + userIds.addAll(userIdList); + } + }); + } + return userIds; + } + + private PointAuditRecordDO getNextAuditRecord(Integer currentNodeNo, Map auditRecordMap){ + List nextNodeNoList = NodeNoEnum.getNextNodeNoList(currentNodeNo); + if(CollectionUtils.isEmpty(nextNodeNoList)){ + return null; + } + for (NodeNoEnum nodeNoEnum : nextNodeNoList) { + PointAuditRecordDO pointAuditRecord = auditRecordMap.get(nodeNoEnum.getCode()); + if(Objects.nonNull(pointAuditRecord)){ + return pointAuditRecord; + } + } + return null; + } + /** * 生成code * @return diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ShopPointController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ShopPointController.java index 7650fc4de..aefaf7b3c 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ShopPointController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ShopPointController.java @@ -1,11 +1,11 @@ package com.cool.store.controller.webb; import com.cool.store.context.CurrentUserHolder; -import com.cool.store.request.AddMapEvaluationReportRequest; -import com.cool.store.request.AddPointDetailRequest; -import com.cool.store.request.UpdatePointDetailRequest; +import com.cool.store.request.*; import com.cool.store.response.ResponseResult; import com.cool.store.service.ShopPointService; +import com.cool.store.vo.LineUsernameAndMobileVO; +import com.cool.store.vo.point.AuditSettingVO; import com.cool.store.vo.point.PointDetailVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -13,6 +13,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.List; /** * @author zhangchenbiao @@ -48,20 +49,20 @@ public class ShopPointController { @ApiOperation("生成评估报告") @GetMapping("/generateEvaluationReport") - public ResponseResult generateEvaluationReport(@RequestParam("pointId")Long pointId) { - return ResponseResult.success(shopPointService.generateEvaluationReport(pointId)); + public ResponseResult generateEvaluationReport(@RequestBody PointIdRequest request) { + return ResponseResult.success(shopPointService.generateEvaluationReport(request.getPointId())); } @ApiOperation("铺位失效") - @GetMapping("/invalid") - public ResponseResult pointInvalid(@RequestParam("pointId")Long pointId) { - return ResponseResult.success(shopPointService.pointInvalid(pointId)); + @PostMapping("/invalid") + public ResponseResult pointInvalid(@RequestBody PointIdRequest request) { + return ResponseResult.success(shopPointService.pointInvalid(request.getPointId())); } @ApiOperation("铺位解绑") - @GetMapping("/unbind") - public ResponseResult pointUnbind(@RequestParam("pointId")Long pointId) { - return ResponseResult.success(shopPointService.pointUnbind(pointId)); + @PostMapping("/unbind") + public ResponseResult pointUnbind(@RequestBody PointIdRequest request) { + return ResponseResult.success(shopPointService.pointUnbind(request.getPointId())); } @ApiOperation("配置评估报告") @@ -71,11 +72,52 @@ public class ShopPointController { } @ApiOperation("提交审批") - @GetMapping("/submitAudit") - public ResponseResult submitAudit(@RequestParam("pointId")Long pointId) { - return ResponseResult.success(shopPointService.submitAudit(pointId)); + @PostMapping("/submitAudit") + public ResponseResult submitAudit(@RequestBody @Validated SubmitPointAuditRequest request) { + return ResponseResult.success(shopPointService.submitAudit(request)); + } + + @ApiOperation("选址审批设置") + @PostMapping("/auditSetting") + public ResponseResult auditSetting(@RequestBody AuditSettingRequest request) { + return ResponseResult.success(shopPointService.auditSetting(request)); + } + + @ApiOperation("获取选址审批设置") + @GetMapping("/getAuditSetting") + public ResponseResult getAuditSetting() { + return ResponseResult.success(shopPointService.getAuditSetting()); + } + + @ApiOperation("获取催办用户列表") + @GetMapping("/getTodoUserList") + public ResponseResult> getTodoUserList(@RequestParam("pointId")Long pointId) { + return ResponseResult.success(shopPointService.getTodoUserList(pointId)); + } + + @ApiOperation("营运人员审批") + @PostMapping("/operationUserAudit") + public ResponseResult operationUserAudit(@RequestBody @Validated OperationAuditRequest request) { + return ResponseResult.success(shopPointService.operationUserAudit(CurrentUserHolder.getUserId(), request)); + } + + @ApiOperation("审批") + @PostMapping("/audit") + public ResponseResult audit(@RequestBody PointAuditRequest request) { + return ResponseResult.success(shopPointService.audit(CurrentUserHolder.getUserId(), request)); + } + + @ApiOperation("铺位转让") + @PostMapping("/turnDevelopmentManager") + public ResponseResult turnDevelopmentManager(@RequestBody TurnDevelopmentManagerRequest request) { + return ResponseResult.success(shopPointService.turnDevelopmentManager(request)); + } + + @ApiOperation("获取我负责的加盟商列表") + @GetMapping("/getLineList") + public ResponseResult> getLineList() { + return ResponseResult.success(shopPointService.getLineList(CurrentUserHolder.getUserId())); } - } 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 c079b9d2b..2585c5210 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 @@ -1,6 +1,12 @@ package com.cool.store.job; +import com.cool.store.dao.LineInfoDAO; +import com.cool.store.dao.LineInterviewDAO; import com.cool.store.entity.LeaseBaseInfoDO; +import com.cool.store.entity.LineInterviewDO; +import com.cool.store.enums.InterviewStatusEnum; +import com.cool.store.enums.WorkflowStageEnum; +import com.cool.store.enums.WorkflowSubStageEnum; import com.cool.store.enums.WorkflowSubStageStatusEnum; import com.cool.store.mapper.LineInfoMapper; import com.cool.store.mapper.TrainingExperienceMapper; @@ -25,6 +31,11 @@ public class XxlJobHandler { @Resource LineInfoMapper lineInfoMapper; + @Resource + private LineInterviewDAO lineInterviewDAO; + @Resource + private LineInfoDAO lineInfoDAO; + /** * 每天都将待体验门店信息变更到体验中 */ @@ -46,4 +57,19 @@ public class XxlJobHandler { log.info("------实训体验状态变更结束------"); XxlJobHelper.handleSuccess(); } + + @XxlJob("batchUpdateInterviewWorkflowStage") + public void batchUpdateInterviewWorkflowStage() { + log.info("------面谈待审核状态变更------"); + List interviewList = lineInterviewDAO.getWaitAuditInterview(); + if (CollectionUtils.isEmpty(interviewList)) { + log.info("------今日没有待更新数据------"); + return; + } + List lineIds = interviewList.stream().map(LineInterviewDO::getLineId).collect(Collectors.toList()); + List interviewIds = interviewList.stream().map(LineInterviewDO::getId).collect(Collectors.toList()); + lineInfoDAO.batchUpdateInterviewWorkflowStage(lineIds, WorkflowSubStageEnum.INVITING_INTERVIEWS, WorkflowSubStageStatusEnum.INVITING_INTERVIEWS_20); + lineInterviewDAO.batchUpdateInterviewStatus(interviewIds, InterviewStatusEnum.WAIT_AUDIT); + XxlJobHelper.handleSuccess(); + } }