This commit is contained in:
zhangchenbiao
2024-04-07 15:41:12 +08:00
parent bb1ef733c6
commit ca87658f5e
38 changed files with 1664 additions and 74 deletions

View File

@@ -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<String> userIds;
public AuditNodeDTO(Integer nodeNo, List<String> userIds) {
this.nodeNo = nodeNo;
this.userIds = userIds;
}
public AuditNodeDTO(Integer nodeNo, String actionRemark, Boolean isToDo, List<String> userIds) {
this.nodeNo = nodeNo;
this.actionRemark = actionRemark;
this.isToDo = isToDo;
this.userIds = userIds;
}
public static List<PointAuditRecordDO> convertDO(Long pointId, Integer cycleCount, List<AuditNodeDTO> nodeList){
if(CollectionUtils.isEmpty(nodeList)){
return Lists.newArrayList();
}
List<PointAuditRecordDO> 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<PointTodoInfoDO> convertTODO(Long pointId, Integer cycleCount, List<AuditNodeDTO> nodeList){
if(CollectionUtils.isEmpty(nodeList)){
return Lists.newArrayList();
}
List<PointTodoInfoDO> 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;
}
}

View File

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

View File

@@ -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<PointTodoInfoDO> convertTODO(PointAuditRecordDO nextAuditRecord){
List<PointTodoInfoDO> resultList = new ArrayList<>();
List<String> 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;
}
}

View File

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

View File

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

View File

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

View File

@@ -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<UserAndPositionRequest> firstApproval;
@ApiModelProperty("第二级审批")
private List<UserAndPositionRequest> secondApproval;
@ApiModelProperty("第三级审批")
private List<UserAndPositionRequest> thirdApproval;
@ApiModelProperty("第四级审批")
private List<UserAndPositionRequest> fourthApproval;
@ApiModelProperty("第五级审批")
private List<UserAndPositionRequest> fifthApproval;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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<UserAndPositionRequest> firstApproval;
@ApiModelProperty("第二级审批")
private List<UserAndPositionRequest> secondApproval;
@ApiModelProperty("第三级审批")
private List<UserAndPositionRequest> thirdApproval;
@ApiModelProperty("第四级审批")
private List<UserAndPositionRequest> fourthApproval;
@ApiModelProperty("第五级审批")
private List<UserAndPositionRequest> fifthApproval;
}

View File

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