From a54a84a2852133852bb8d384bf220dbf94fe5271 Mon Sep 17 00:00:00 2001 From: zhangchenbiao Date: Mon, 14 Aug 2023 10:51:30 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=9F=E8=BF=9B=E4=BB=BB=E5=8A=A1=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/constants/CommonConstants.java | 4 + .../com/cool/store/enums/ErrorCodeEnum.java | 2 + .../store/enums/FollowTaskStatusEnum.java | 34 ++++ .../store/enums/OperateLogFieldValueEnum.java | 2 + .../com/cool/store/enums/OperateTypeEnum.java | 2 + coolstore-partner-dao/pom.xml | 5 + .../com/cool/store/dao/HyFollowTaskDAO.java | 143 +++++++++++++++ .../cool/store/dao/HyPartnerLineInfoDAO.java | 19 ++ .../cool/store/mapper/HyFollowTaskMapper.java | 66 +++++++ .../store/mapper/HyPartnerLineInfoMapper.java | 8 + .../resources/mapper/HyFollowTaskMapper.xml | 168 ++++++++++++++++++ .../mapper/HyPartnerLineInfoMapper.xml | 14 ++ .../java/generator/GeneratorCodeMain.java | 2 +- .../MyIntrospectedTableMyBatis3Impl.java | 123 ++++++++----- .../test/resources/mybatis-generator-tk.xml | 34 ++++ .../resources/mybatis-generator.properties | 2 +- .../src/test/resources/mybatis-generator.xml | 4 +- coolstore-partner-model/pom.xml | 6 + .../dto/partner/PartnerSimpleInfoDTO.java | 33 ++++ .../com/cool/store/entity/HyFollowTaskDO.java | 53 ++++++ .../request/follow/AddFollowLogRequest.java | 28 +++ .../request/follow/AddFollowTaskRequest.java | 59 ++++++ .../request/follow/FollowTaskIdRequest.java | 22 +++ .../follow/UpdateFollowTaskRequest.java | 58 ++++++ .../cool/store/vo/follow/FollowTaskLogVO.java | 38 ++++ .../store/vo/follow/FollowTaskPageVO.java | 68 +++++++ .../cool/store/service/FollowTaskService.java | 78 ++++++++ .../service/impl/FollowTaskServiceImpl.java | 150 ++++++++++++++++ .../cool/store/PartnerBWebApplication.java | 2 +- .../controller/FollowTaskController.java | 79 ++++++++ .../cool/store/controller/TestController.java | 2 +- .../cool/store/PartnerCWebApplication.java | 2 +- 32 files changed, 1255 insertions(+), 55 deletions(-) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/FollowTaskStatusEnum.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/HyFollowTaskDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyFollowTaskMapper.java create mode 100644 coolstore-partner-dao/src/main/resources/mapper/HyFollowTaskMapper.xml create mode 100644 coolstore-partner-dao/src/test/resources/mybatis-generator-tk.xml create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerSimpleInfoDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/HyFollowTaskDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/follow/AddFollowLogRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/follow/AddFollowTaskRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/follow/FollowTaskIdRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/request/follow/UpdateFollowTaskRequest.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/follow/FollowTaskLogVO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/follow/FollowTaskPageVO.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/FollowTaskService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/impl/FollowTaskServiceImpl.java create mode 100644 coolstore-partner-webb/src/main/java/com/cool/store/controller/FollowTaskController.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java index 6f28eb1a4..a5fed5def 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java @@ -126,4 +126,8 @@ public class CommonConstants { // 短信模版-资质审核通过 public static final String SMS_TEMPLATE_CODE_VERIFY = "SMS_461980876"; + public static final String DAY_END_TIME_SUFFIX = " 23:59:59"; + + public static final String DAY_START_TIME_SUFFIX = " 00:00:00"; + } 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 a03c78579..d2665b51a 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 @@ -61,6 +61,8 @@ public enum ErrorCodeEnum { INTENT_AREA_NOT_BING_ZONE(500007, "意向区域没有绑定战区 分配招商经理失败!", null), PUBLIC_LINE_NOT_OPERATE(500008, "公海线索不允许操作!", null), PARTNER_BASE_INFO_NOT_EXIST(500009, "加盟商信息不存在!", null), + LINE_STATUS_NOT_ALLOW_OPERATE(500010, "当前线索状态不允许该操作!", null), + TASK_STATUS_NOT_ALLOW_OPERATE(500011, "当前任务状态不允许该操作!", 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/FollowTaskStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/FollowTaskStatusEnum.java new file mode 100644 index 000000000..073a41e49 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/FollowTaskStatusEnum.java @@ -0,0 +1,34 @@ +package com.cool.store.enums; + +/** + * @author zhangchenbiao + * @FileName: FollowTaskStatusEnum + * @Description: + * @date 2023-08-10 10:47 + */ +public enum FollowTaskStatusEnum { + + TODO(0, "待完成"), + FINISHED(1, "已完成"), + OVERDUE(2, "已逾期"), + CANCELLED(3, "作废"), + ; + //任务状态:0:待完成、1:已完成、2:已逾期、3:作废 + + private Integer code; + + private String remark; + + FollowTaskStatusEnum(Integer code, String remark) { + this.code = code; + this.remark = remark; + } + + public Integer getCode() { + return code; + } + + public String getRemark() { + return remark; + } +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateLogFieldValueEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateLogFieldValueEnum.java index 20ec8ddb4..185a03de8 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateLogFieldValueEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateLogFieldValueEnum.java @@ -46,6 +46,8 @@ public enum OperateLogFieldValueEnum { BEFORE_CLERK_INFO_UPDATE("beforeClerkUpdate", "修改前的意向书员工信息"), AFTER_CLERK_INFO_UPDATE("afterClerkUpdate", "修改后的意向书员工信息"), + FOLLOW_LOG("followLog", "跟进日志"), + FOLLOW_TASK_ID("followTaskId", "跟进任务id") ; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java index a127d6077..db75c1204 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java @@ -35,6 +35,8 @@ public enum OperateTypeEnum { INTENT_INFO_SUBMIT("intent_info_submit", "提交意向申请书", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, AFTER_BASE_INFO_UPDATE, AFTER_INTENT_INFO_UPDATE, AFTER_CLERK_INFO_UPDATE)), INTENT_INFO_UPDATE("intent_info_update", "修改意向申请书", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, BEFORE_BASE_INFO_UPDATE, AFTER_BASE_INFO_UPDATE, BEFORE_INTENT_INFO_UPDATE, AFTER_INTENT_INFO_UPDATE, BEFORE_CLERK_INFO_UPDATE, AFTER_CLERK_INFO_UPDATE)), ADD_TAGS("add_tags", "修改意向申请书", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME)), + ADD_FOLLOW_LOG("add_follow_log", "新增根据日志", Arrays.asList(FOLLOW_LOG)), + ADD_FOLLOW_TASK("add_follow_task", "新增跟进任务", Arrays.asList(FOLLOW_TASK_ID)) ; private String code; diff --git a/coolstore-partner-dao/pom.xml b/coolstore-partner-dao/pom.xml index 7eed26b88..d61f626c1 100644 --- a/coolstore-partner-dao/pom.xml +++ b/coolstore-partner-dao/pom.xml @@ -50,6 +50,11 @@ 1.3.7 test + + tk.mybatis + mapper + 4.1.4 + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyFollowTaskDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyFollowTaskDAO.java new file mode 100644 index 000000000..992638a93 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyFollowTaskDAO.java @@ -0,0 +1,143 @@ +package com.cool.store.dao; + +import com.cool.store.entity.HyFollowTaskDO; +import com.cool.store.enums.FollowTaskStatusEnum; +import com.cool.store.mapper.HyFollowTaskMapper; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.google.common.collect.Lists; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Repository; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: HyFollowTaskDAO + * @Description: + * @date 2023-08-10 10:35 + */ +@Repository +public class HyFollowTaskDAO { + + @Resource + private HyFollowTaskMapper hyFollowTaskMapper; + + /** + * 获取跟进任务想去 + * @param followTaskId + * @return + */ + public HyFollowTaskDO getFollowTask(Long followTaskId){ + if(Objects.isNull(followTaskId)){ + return null; + } + return hyFollowTaskMapper.getFollowTask(followTaskId); + } + + + /** + * 新增跟进任务 + * @param request + * @return + */ + public Long addFollowTask(HyFollowTaskDO request){ + if(StringUtils.isBlank(request.getFollowUserId()) || Objects.isNull(request.getPartnerLineId())){ + return null; + } + hyFollowTaskMapper.insertSelective(request); + return request.getId(); + } + + /** + * 更新跟进任务 + * @param request + * @return + */ + public Integer updateFollowTask(HyFollowTaskDO request){ + if(Objects.isNull(request.getId())){ + return null; + } + return hyFollowTaskMapper.updateByPrimaryKeySelective(request); + } + + /** + * 完成更近任务 + * @param followTaskId + * @return + */ + public Integer finishFollowTask(Long followTaskId){ + HyFollowTaskDO update = new HyFollowTaskDO(); + update.setId(followTaskId); + update.setTaskStatus(FollowTaskStatusEnum.FINISHED.getCode()); + return updateFollowTask(update); + } + + /** + * 取消跟进任务 + * @param followTaskId + * @return + */ + public Integer cancelFollowTask(Long followTaskId){ + HyFollowTaskDO update = new HyFollowTaskDO(); + update.setId(followTaskId); + update.setTaskStatus(FollowTaskStatusEnum.CANCELLED.getCode()); + return updateFollowTask(update); + } + + /** + * 获取线索的所有任务 + * @param partnerLineId + * @return + */ + public List getTaskListByLineId(Long partnerLineId){ + if(Objects.isNull(partnerLineId)){ + return Lists.newArrayList(); + } + return hyFollowTaskMapper.getTaskListByLineId(partnerLineId); + } + + /** + * 分页获取任务 + * @param followUserId + * @param taskStatus + * @param deadlineStartTIme + * @param deadlineEndTIme + * @param pageNum + * @param pageSize + * @return + */ + public Page getTaskPage(String followUserId, Integer taskStatus, String deadlineStartTIme, String deadlineEndTIme, Integer pageNum, Integer pageSize){ + if(StringUtils.isBlank(followUserId)){ + return new Page<>(); + } + PageHelper.startPage(pageNum, pageSize); + return hyFollowTaskMapper.getTaskPage(followUserId, taskStatus, deadlineStartTIme, deadlineEndTIme); + } + + /** + * 更新未完成的任务跟进人 + * @param partnerLineId + * @param userId + */ + public void updateUndoTaskFollowUserId(Long partnerLineId, String userId){ + if(Objects.isNull(partnerLineId) || StringUtils.isNotBlank(userId)){ + return; + } + hyFollowTaskMapper.updateUndoTaskFollowUserId(partnerLineId, userId); + } + + /** + * 作废待完成&已逾期的任务 + * @param partnerLineId + */ + public void cancelUndoFollowTask(Long partnerLineId){ + if(Objects.isNull(partnerLineId)){ + return; + } + hyFollowTaskMapper.cancelUndoFollowTask(partnerLineId); + } + +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerLineInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerLineInfoDAO.java index cfc0623a5..b80f041dc 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerLineInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerLineInfoDAO.java @@ -1,5 +1,6 @@ package com.cool.store.dao; +import cn.hutool.core.map.MapUtil; import com.cool.store.dto.partner.PartnerBlackListDTO; import com.cool.store.dto.partner.PartnerLineInfoAndBaseInfoDTO; import com.cool.store.dto.partner.StageCountDTO; @@ -8,6 +9,8 @@ import com.cool.store.entity.HyPartnerLineInfoDO; import com.cool.store.mapper.HyPartnerLineInfoMapper; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.ListUtils; +import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Repository; @@ -15,6 +18,9 @@ import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; /** * @Author suzhuhong @@ -180,4 +186,17 @@ public class HyPartnerLineInfoDAO { return hyPartnerLineInfoMapper.getLineFollowHistoryList(partnerId); } + /** + * 获取线索加盟商简要信息 + * @param partnerLineIds + * @return + */ + public Map getPartnerSimpleInfoByLineIds(List partnerLineIds){ + if(CollectionUtils.isEmpty(partnerLineIds)){ + return MapUtil.newHashMap(); + } + List partnerList = hyPartnerLineInfoMapper.getPartnerSimpleInfoByLineIds(partnerLineIds); + return ListUtils.emptyIfNull(partnerList).stream().collect(Collectors.toMap(k->k.getPartnerLineId(), Function.identity(), (k1, k2)->k1)); + } + } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyFollowTaskMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyFollowTaskMapper.java new file mode 100644 index 000000000..971990233 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyFollowTaskMapper.java @@ -0,0 +1,66 @@ +package com.cool.store.mapper; + +import com.cool.store.entity.HyFollowTaskDO; +import com.github.pagehelper.Page; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author zhangchenbiao + * @date 2023-08-10 10:10 + */ +public interface HyFollowTaskMapper { + /** + * + * 默认插入方法,只会给有值的字段赋值 + * 会对传进来的字段做判空处理,如果字段为空,则使用数据库默认字段或者null + * dateTime:2023-08-10 10:10 + */ + int insertSelective(@Param("record") HyFollowTaskDO record); + + /** + * + * 默认更新方法,根据主键更新,不会把null值更新到数据库,避免覆盖之前有值的 + * dateTime:2023-08-10 10:10 + */ + int updateByPrimaryKeySelective(@Param("record") HyFollowTaskDO record); + + /** + * 根据线索获取任务列表 + * @param partnerLineId + * @return + */ + List getTaskListByLineId(@Param("partnerLineId")Long partnerLineId); + + /** + * 获取任务列表 + * @param followUserId + * @param taskStatus + * @param deadlineStartTIme + * @param deadlineEndTIme + * @return + */ + Page getTaskPage(@Param("followUserId")String followUserId, @Param("taskStatus")Integer taskStatus, @Param("deadlineStartTIme")String deadlineStartTIme, @Param("deadlineEndTIme")String deadlineEndTIme); + + /** + * 获取跟进任务详情 + * @param followTaskId + * @return + */ + HyFollowTaskDO getFollowTask(@Param("followTaskId") Long followTaskId); + + /** + * 更新任务跟进人 + * @param partnerLineId + * @param followUserId + */ + Integer updateUndoTaskFollowUserId(@Param("partnerLineId") Long partnerLineId, @Param("followUserId") String followUserId); + + /** + * 作废未完成的跟进任务 + * @param partnerLineId + * @return + */ + Integer cancelUndoFollowTask(@Param("partnerLineId") Long partnerLineId); +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLineInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLineInfoMapper.java index bfcfab942..d55722ad1 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLineInfoMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLineInfoMapper.java @@ -225,4 +225,12 @@ public interface HyPartnerLineInfoMapper { @Param("endTime") Date endTime); void batchUpdateStatusByLineIds(@Param("lineIds") List lineIds, @Param("status")Integer status); + + /** + * 获取线索简要信息 + * @param partnerLineIds + * @return + */ + List getPartnerSimpleInfoByLineIds(@Param("partnerLineIds") List partnerLineIds); + } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyFollowTaskMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyFollowTaskMapper.xml new file mode 100644 index 000000000..22dd7b60b --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/HyFollowTaskMapper.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + id, partner_line_id, follow_user_id, task_title, communication_type, deadline, communication_content, + task_status, deleted, create_time, update_time + + + insert into hy_follow_task + + + partner_line_id, + + + follow_user_id, + + + task_title, + + + communication_type, + + + deadline, + + + communication_content, + + + task_status, + + + deleted, + + + create_time, + + + update_time, + + + + + #{record.partnerLineId}, + + + #{record.followUserId}, + + + #{record.taskTitle}, + + + #{record.communicationType}, + + + #{record.deadline}, + + + #{record.communicationContent}, + + + #{record.taskStatus}, + + + #{record.deleted}, + + + #{record.createTime}, + + + #{record.updateTime}, + + + + + update hy_follow_task + + + partner_line_id = #{record.partnerLineId}, + + + follow_user_id = #{record.followUserId}, + + + task_title = #{record.taskTitle}, + + + communication_type = #{record.communicationType}, + + + deadline = #{record.deadline}, + + + communication_content = #{record.communicationContent}, + + + task_status = #{record.taskStatus}, + + + deleted = #{record.deleted}, + + + create_time = #{record.createTime}, + + + update_time = #{record.updateTime}, + + + where id = #{record.id} + + + + + + + + + + update hy_follow_task set follow_user_id = #{followUserId} where partner_line_id = #{partnerLineId} + + + + update hy_follow_task set task_status = '3' where partner_line_id = #{partnerLineId} and task_status in ('0', '2') + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerLineInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerLineInfoMapper.xml index ac8633191..15ef3fbda 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerLineInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerLineInfoMapper.xml @@ -660,4 +660,18 @@ + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/test/java/generator/GeneratorCodeMain.java b/coolstore-partner-dao/src/test/java/generator/GeneratorCodeMain.java index b03b91133..cad5e60c3 100644 --- a/coolstore-partner-dao/src/test/java/generator/GeneratorCodeMain.java +++ b/coolstore-partner-dao/src/test/java/generator/GeneratorCodeMain.java @@ -15,7 +15,7 @@ public class GeneratorCodeMain { try { // 解析 ConfigurationParser cp = new ConfigurationParser(warnings); - Configuration config = cp.parseConfiguration(GeneratorCodeMain.class.getResourceAsStream("/mybatis-generator.xml")); + Configuration config = cp.parseConfiguration(GeneratorCodeMain.class.getResourceAsStream("/mybatis-generator-tk.xml")); // 是否覆盖 DefaultShellCallback dsc = new DefaultShellCallback(false); MyBatisGenerator mg = new MyBatisGenerator(config, dsc, warnings); diff --git a/coolstore-partner-dao/src/test/java/generator/defined/MyIntrospectedTableMyBatis3Impl.java b/coolstore-partner-dao/src/test/java/generator/defined/MyIntrospectedTableMyBatis3Impl.java index 95e53bd3c..41fdfad9b 100644 --- a/coolstore-partner-dao/src/test/java/generator/defined/MyIntrospectedTableMyBatis3Impl.java +++ b/coolstore-partner-dao/src/test/java/generator/defined/MyIntrospectedTableMyBatis3Impl.java @@ -14,16 +14,20 @@ import org.mybatis.generator.codegen.mybatis3.IntrospectedTableMyBatis3Impl; import org.mybatis.generator.codegen.mybatis3.ListUtilities; import org.mybatis.generator.codegen.mybatis3.MyBatis3FormattingUtilities; import org.mybatis.generator.codegen.mybatis3.javamapper.JavaMapperGenerator; +import org.mybatis.generator.codegen.mybatis3.javamapper.elements.SelectByExampleWithBLOBsMethodGenerator; import org.mybatis.generator.codegen.mybatis3.xmlmapper.XMLMapperGenerator; import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.AbstractXmlElementGenerator; import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.InsertSelectiveElementGenerator; import org.mybatis.generator.codegen.mybatis3.xmlmapper.elements.UpdateByPrimaryKeySelectiveElementGenerator; import org.mybatis.generator.config.GeneratedKey; import org.mybatis.generator.config.PropertyRegistry; +import org.mybatis.generator.internal.rules.Rules; import org.mybatis.generator.internal.util.JavaBeansUtil; import java.util.ArrayList; import java.util.List; +import java.util.Set; +import java.util.TreeSet; import static org.mybatis.generator.internal.util.StringUtility.stringHasValue; import static org.mybatis.generator.internal.util.messages.Messages.getString; @@ -204,12 +208,17 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im context.getCommentGenerator().addRootComment(answer); addResultMapWithoutBLOBsElement(answer); addResultMapWithBLOBsElement(answer); - addExampleWhereClauseElement(answer); - addMyBatis3UpdateByExampleWhereClauseElement(answer); addBaseColumnListElement(answer); addBlobColumnListElement(answer); addInsertSelectiveElement(answer); addUpdateByPrimaryKeySelectiveElement(answer); + addMyBatis3UpdateByExampleWhereClauseElement(answer); + addExampleWhereClauseElement(answer); + addSelectByExampleWithBLOBsElement(answer); + addSelectByExampleWithoutBLOBsElement(answer); + addUpdateByExampleWithBLOBsElement(answer); + addUpdateByExampleWithoutBLOBsElement(answer); + addUpdateByExampleSelectiveElement(answer); return answer; } @@ -244,7 +253,6 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im @Override public List getCompilationUnits() { - boolean isConfig = isConfigTable(); progressCallback.startTask(getString("Progress.17", //$NON-NLS-1$ introspectedTable.getFullyQualifiedTable().toString())); CommentGenerator commentGenerator = context.getCommentGenerator(); @@ -268,30 +276,23 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im interfaze.addSuperInterface(fqjt); interfaze.addImportedType(fqjt); } - if(!isConfig){ - interfaze.addImportedType(new FullyQualifiedJavaType("org.apache.ibatis.annotations.Param")); - } + interfaze.addImportedType(new FullyQualifiedJavaType("org.apache.ibatis.annotations.Param")); addInsertSelectiveMethod(interfaze); addUpdateByPrimaryKeySelectiveMethod(interfaze); List methods = interfaze.getMethods(); for (Method method : methods) { List parameters = method.getParameters(); for (Parameter parameter : parameters) { - if(!isConfig){ - String name = parameter.getName(); - parameter.addAnnotation("@Param(\""+ name+"\")"); - } - } - if(!isConfig){ - Parameter enterpriseId = new Parameter(FullyQualifiedJavaType.getStringInstance(), "enterpriseId"); - enterpriseId.addAnnotation("@Param(\"enterpriseId\")"); - method.addParameter(enterpriseId); + String name = parameter.getName(); + parameter.addAnnotation("@Param(\""+ name+"\")"); } } - + addSelectByExampleWithBLOBsMethod(interfaze); + addSelectByExampleWithoutBLOBsMethod(interfaze); + addUpdateByExampleSelectiveMethod(interfaze); + addUpdateByExampleWithoutBLOBsMethod(interfaze); List answer = new ArrayList(); - if (context.getPlugins().clientGenerated(interfaze, null, - introspectedTable)) { + if (context.getPlugins().clientGenerated(interfaze, null, introspectedTable)) { answer.add(interfaze); } @@ -312,7 +313,6 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im @Override public void addElements(XmlElement parentElement) { - boolean isConfig = isConfigTable(); XmlElement answer = new XmlElement("insert"); //$NON-NLS-1$ answer.addAttribute(new Attribute( @@ -383,9 +383,7 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im } sb.setLength(0); - if(!isConfig){ - sb.append("record."); - } + sb.append("record."); sb.append(introspectedColumn.getJavaProperty()); sb.append(" != null"); //$NON-NLS-1$ XmlElement insertNotNullElement = new XmlElement("if"); //$NON-NLS-1$ @@ -400,9 +398,7 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im insertTrimElement.addElement(insertNotNullElement); sb.setLength(0); - if(!isConfig){ - sb.append("record."); - } + sb.append("record."); sb.append(introspectedColumn.getJavaProperty()); sb.append(" != null"); //$NON-NLS-1$ XmlElement valuesNotNullElement = new XmlElement("if"); //$NON-NLS-1$ @@ -410,11 +406,7 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im "test", sb.toString())); //$NON-NLS-1$ sb.setLength(0); - if(isConfig){ - sb.append("#{"+introspectedColumn.getJavaProperty() + "}"); - }else{ - sb.append("#{record."+introspectedColumn.getJavaProperty() + "}"); - } + sb.append("#{record."+introspectedColumn.getJavaProperty() + "}"); sb.append(','); valuesNotNullElement.addElement(new TextElement(sb.toString())); valuesTrimElement.addElement(valuesNotNullElement); @@ -433,7 +425,6 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im @Override public void addElements(XmlElement parentElement) { - boolean isConfig = isConfigTable(); XmlElement answer = new XmlElement("update"); //$NON-NLS-1$ answer.addAttribute(new Attribute( @@ -446,10 +437,6 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im } else { parameterType = introspectedTable.getBaseRecordType(); } - - /*answer.addAttribute(new Attribute("parameterType", //$NON-NLS-1$ - parameterType));*/ - context.getCommentGenerator().addComment(answer); StringBuilder sb = new StringBuilder(); @@ -463,9 +450,7 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im for (IntrospectedColumn introspectedColumn : ListUtilities.removeGeneratedAlwaysColumns(introspectedTable.getNonPrimaryKeyColumns())) { sb.setLength(0); - if(!isConfig){ - sb.append("record."); - } + sb.append("record."); sb.append(introspectedColumn.getJavaProperty()); sb.append(" != null"); //$NON-NLS-1$ XmlElement isNotNullElement = new XmlElement("if"); //$NON-NLS-1$ @@ -476,11 +461,7 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im sb.append(MyBatis3FormattingUtilities .getEscapedColumnName(introspectedColumn)); sb.append(" = "); - if(!isConfig){ - sb.append("#{record."+introspectedColumn.getJavaProperty() + "}"); - }else{ - sb.append("#{"+introspectedColumn.getJavaProperty() + "}"); - } + sb.append("#{record."+introspectedColumn.getJavaProperty() + "}"); sb.append(','); isNotNullElement.addElement(new TextElement(sb.toString())); @@ -499,11 +480,7 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im sb.append(MyBatis3FormattingUtilities .getEscapedColumnName(introspectedColumn)); sb.append(" = "); - if(isConfig){ - sb.append("#{"+introspectedColumn.getJavaProperty() + "}"); - }else{ - sb.append("#{record."+introspectedColumn.getJavaProperty() + "}"); - } + sb.append("#{record."+introspectedColumn.getJavaProperty() + "}"); answer.addElement(new TextElement(sb.toString())); } @@ -514,4 +491,54 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im } } } + + public class MySelectByExampleWithBLOBsMethodGenerator extends SelectByExampleWithBLOBsMethodGenerator { + public MySelectByExampleWithBLOBsMethodGenerator() { + super(); + } + + @Override + public void addInterfaceElements(Interface interfaze) { + Set importedTypes = new TreeSet(); + FullyQualifiedJavaType type = new FullyQualifiedJavaType( + introspectedTable.getExampleType()); + importedTypes.add(type); + importedTypes.add(FullyQualifiedJavaType.getNewListInstance()); + + Method method = new Method(); + method.setVisibility(JavaVisibility.PUBLIC); + + FullyQualifiedJavaType returnType = FullyQualifiedJavaType + .getNewListInstance(); + FullyQualifiedJavaType listType; + if (introspectedTable.getRules().generateRecordWithBLOBsClass()) { + listType = new FullyQualifiedJavaType(introspectedTable + .getRecordWithBLOBsType()); + } else { + // the blob fields must be rolled up into the base class + listType = new FullyQualifiedJavaType(introspectedTable + .getBaseRecordType()); + } + + importedTypes.add(listType); + returnType.addTypeArgument(listType); + method.setReturnType(returnType); + method.setName(introspectedTable + .getSelectByExampleWithBLOBsStatementId()); + method.addParameter(new Parameter(type, "example")); //$NON-NLS-1$ + + context.getCommentGenerator().addGeneralMethodComment(method, + introspectedTable); + + addMapperAnnotations(interfaze, method); + + if (context.getPlugins() + .clientSelectByExampleWithBLOBsMethodGenerated(method, interfaze, + introspectedTable)) { + addExtraImports(interfaze); + interfaze.addImportedTypes(importedTypes); + interfaze.addMethod(method); + } + } + } } diff --git a/coolstore-partner-dao/src/test/resources/mybatis-generator-tk.xml b/coolstore-partner-dao/src/test/resources/mybatis-generator-tk.xml new file mode 100644 index 000000000..7bf6f3454 --- /dev/null +++ b/coolstore-partner-dao/src/test/resources/mybatis-generator-tk.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
\ 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 1811e5459..9ac8cda07 100644 --- a/coolstore-partner-dao/src/test/resources/mybatis-generator.properties +++ b/coolstore-partner-dao/src/test/resources/mybatis-generator.properties @@ -3,4 +3,4 @@ jdbc.url = jdbc:mysql://dingpushcoolcollege.mysql.rds.aliyuncs.com:3306/coolcoll jdbc.user= coolstore jdbc.password = CSCErYcXniNYm7bT -table.name = hy_inspection_setting_mapping \ No newline at end of file +table.name = sys_menu_copy1 \ No newline at end of file diff --git a/coolstore-partner-dao/src/test/resources/mybatis-generator.xml b/coolstore-partner-dao/src/test/resources/mybatis-generator.xml index 880e6e523..5e3644fee 100644 --- a/coolstore-partner-dao/src/test/resources/mybatis-generator.xml +++ b/coolstore-partner-dao/src/test/resources/mybatis-generator.xml @@ -29,8 +29,8 @@ - +
diff --git a/coolstore-partner-model/pom.xml b/coolstore-partner-model/pom.xml index 128d075e3..6630076d8 100644 --- a/coolstore-partner-model/pom.xml +++ b/coolstore-partner-model/pom.xml @@ -25,6 +25,12 @@ com.github.xiaoymin knife4j-spring-boot-starter + + javax.persistence + persistence-api + 1.0 + compile + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerSimpleInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerSimpleInfoDTO.java new file mode 100644 index 000000000..32c0d594f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerSimpleInfoDTO.java @@ -0,0 +1,33 @@ +package com.cool.store.dto.partner; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: PartnerSimpleInfoDTO + * @Description: + * @date 2023-08-10 14:04 + */ +@Data +public class PartnerSimpleInfoDTO { + + @ApiModelProperty("线索id") + private Long partnerLineId; + + @ApiModelProperty("加盟商姓名") + private String username; + + @ApiModelProperty("加盟商手机号") + private String mobile; + + @ApiModelProperty("加盟商id") + private String partnerId; + + @ApiModelProperty("线索阶段") + private String workflowStage; + + @ApiModelProperty("线索状态") + private Integer lineStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyFollowTaskDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyFollowTaskDO.java new file mode 100644 index 000000000..f8169f05b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyFollowTaskDO.java @@ -0,0 +1,53 @@ +package com.cool.store.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Date; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * + * @author zhangchenbiao + * @date 2023-08-10 10:10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class HyFollowTaskDO implements Serializable { + @ApiModelProperty("") + private Long id; + + @ApiModelProperty("hy_partner_line_info.id") + private Long partnerLineId; + + @ApiModelProperty("任务跟进人id") + private String followUserId; + + @ApiModelProperty("任务标题") + private String taskTitle; + + @ApiModelProperty("沟通方式: 0:电话、1:短信、2:微信、3:QQ、4:邮件、5:拜访、6:提醒") + private Integer communicationType; + + @ApiModelProperty("任务截止时间") + private Date deadline; + + @ApiModelProperty("计划沟通内容") + private String communicationContent; + + @ApiModelProperty("任务状态:0:待完成、1:已完成、2:已逾期、3:作废") + private Integer taskStatus; + + @ApiModelProperty("删除标识") + private Boolean deleted; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("更新时间") + private Date updateTime; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/follow/AddFollowLogRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/follow/AddFollowLogRequest.java new file mode 100644 index 000000000..60226cdb9 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/follow/AddFollowLogRequest.java @@ -0,0 +1,28 @@ +package com.cool.store.request.follow; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * @author zhangchenbiao + * @FileName: AddFollowLogRequest + * @Description:新增跟进日志 + * @date 2023-08-08 15:38 + */ +@Data +public class AddFollowLogRequest { + + @NotNull + @ApiModelProperty("线索id") + private Long partnerLineId; + + @NotBlank + @Length(max = 200) + @ApiModelProperty("跟进日志") + private String followLog; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/follow/AddFollowTaskRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/follow/AddFollowTaskRequest.java new file mode 100644 index 000000000..b822de2a5 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/follow/AddFollowTaskRequest.java @@ -0,0 +1,59 @@ +package com.cool.store.request.follow; + +import com.cool.store.entity.HyFollowTaskDO; +import com.cool.store.enums.FollowTaskStatusEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * @author zhangchenbiao + * @FileName: FollowTaskPageVO + * @Description:新增跟进任务 + * @date 2023-08-08 14:47 + */ +@Data +public class AddFollowTaskRequest { + + @NotNull + @ApiModelProperty("线索id") + private Long partnerLineId; + + @NotBlank + @Length(max = 50) + @ApiModelProperty("任务标题") + private String taskTitle; + + @NotNull + @Min(0) + @Max(6) + @ApiModelProperty("沟通方式: 0:电话、1:短信、2:微信、3:QQ、4:邮件、5:拜访、6:提醒") + private Integer communicationType; + + @NotBlank + @Length(max = 300) + @ApiModelProperty("计划沟通内容") + private String communicationContent; + + @NotNull + @ApiModelProperty("任务截止时间") + private Date deadline; + + public static HyFollowTaskDO convertDO(AddFollowTaskRequest request){ + HyFollowTaskDO result = new HyFollowTaskDO(); + result.setPartnerLineId(request.getPartnerLineId()); + result.setTaskTitle(request.getTaskTitle()); + result.setCommunicationType(request.getCommunicationType()); + result.setDeadline(request.getDeadline()); + result.setCommunicationContent(request.getCommunicationContent()); + result.setTaskStatus(FollowTaskStatusEnum.TODO.getCode()); + return result; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/follow/FollowTaskIdRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/follow/FollowTaskIdRequest.java new file mode 100644 index 000000000..52b5a0a12 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/follow/FollowTaskIdRequest.java @@ -0,0 +1,22 @@ +package com.cool.store.request.follow; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * @author zhangchenbiao + * @FileName: FollowTaskPageVO + * @Description:新增跟进任务 + * @date 2023-08-08 14:47 + */ +@Data +public class FollowTaskIdRequest { + + @NotNull + @ApiModelProperty("跟进任务Id") + private Long followTaskId; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/follow/UpdateFollowTaskRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/follow/UpdateFollowTaskRequest.java new file mode 100644 index 000000000..c1ca46308 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/follow/UpdateFollowTaskRequest.java @@ -0,0 +1,58 @@ +package com.cool.store.request.follow; + +import com.cool.store.entity.HyFollowTaskDO; +import com.cool.store.enums.FollowTaskStatusEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * @author zhangchenbiao + * @FileName: FollowTaskPageVO + * @Description:新增跟进任务 + * @date 2023-08-08 14:47 + */ +@Data +public class UpdateFollowTaskRequest { + + @NotNull + @ApiModelProperty("跟进任务Id") + private Long followTaskId; + + @NotBlank + @Length(max = 50) + @ApiModelProperty("任务标题") + private String taskTitle; + + @NotNull + @Min(0) + @Max(6) + @ApiModelProperty("沟通方式: 0:电话、1:短信、2:微信、3:QQ、4:邮件、5:拜访、6:提醒") + private Integer communicationType; + + @NotBlank + @Length(max = 300) + @ApiModelProperty("计划沟通内容") + private String communicationContent; + + @NotNull + @ApiModelProperty("任务截止时间") + private Date deadline; + + public static HyFollowTaskDO convertDO(UpdateFollowTaskRequest request){ + HyFollowTaskDO result = new HyFollowTaskDO(); + result.setId(request.getFollowTaskId()); + result.setTaskTitle(request.getTaskTitle()); + result.setCommunicationType(request.getCommunicationType()); + result.setDeadline(request.getDeadline()); + result.setCommunicationContent(request.getCommunicationContent()); + return result; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/follow/FollowTaskLogVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/follow/FollowTaskLogVO.java new file mode 100644 index 000000000..a515d046a --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/follow/FollowTaskLogVO.java @@ -0,0 +1,38 @@ +package com.cool.store.vo.follow; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @author zhangchenbiao + * @FileName: FollowTaskPageVO + * @Description:跟进任务分页 + * @date 2023-08-08 14:47 + */ +@Data +public class FollowTaskLogVO { + + @ApiModelProperty("日志id") + private Long followLogId; + + @ApiModelProperty("线索id") + private Long partnerLineId; + + @ApiModelProperty("操作时间") + private Date operateTime; + + @ApiModelProperty("操作人id") + private String operateUserId; + + @ApiModelProperty("操作人名称") + private String operateUsername; + + @ApiModelProperty("跟进操作类型") + private String operateType; + + @ApiModelProperty("操作内容") + private String operateContent; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/follow/FollowTaskPageVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/follow/FollowTaskPageVO.java new file mode 100644 index 000000000..3b4df4fef --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/follow/FollowTaskPageVO.java @@ -0,0 +1,68 @@ +package com.cool.store.vo.follow; + +import com.cool.store.dto.partner.PartnerSimpleInfoDTO; +import com.cool.store.entity.HyFollowTaskDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.*; + +/** + * @author zhangchenbiao + * @FileName: FollowTaskPageVO + * @Description:跟进任务分页 + * @date 2023-08-08 14:47 + */ +@Data +public class FollowTaskPageVO { + + @ApiModelProperty("线索id") + private Long partnerLineId; + + @ApiModelProperty("任务标题") + private String taskTitle; + + @ApiModelProperty("沟通方式: 0:电话、1:短信、2:微信、3:QQ、4:邮件、5:拜访、6:提醒") + private Integer communicationType; + + @ApiModelProperty("任务截止时间") + private Date deadline; + + @ApiModelProperty("任务状态:0:待完成、1:已完成、2:已逾期、3:作废") + private Integer taskStatus; + + @ApiModelProperty("跟进阶段") + private String workflowStage; + + @ApiModelProperty("线索用户名") + private String partnerUsername; + + @ApiModelProperty("线索手机号") + private String partnerMobile; + + + public static List convertVO(List taskList, Map partnerSimpleInfoMap){ + List resultList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(taskList)){ + for (HyFollowTaskDO task : taskList) { + PartnerSimpleInfoDTO partnerInfo = partnerSimpleInfoMap.get(task.getPartnerLineId()); + if(Objects.isNull(partnerInfo)){ + continue; + } + FollowTaskPageVO result = new FollowTaskPageVO(); + result.setPartnerLineId(task.getPartnerLineId()); + result.setTaskTitle(task.getTaskTitle()); + result.setCommunicationType(task.getCommunicationType()); + result.setDeadline(task.getDeadline()); + result.setTaskStatus(task.getTaskStatus()); + result.setWorkflowStage(partnerInfo.getWorkflowStage()); + result.setPartnerUsername(partnerInfo.getUsername()); + result.setPartnerMobile(partnerInfo.getMobile()); + resultList.add(result); + } + } + return resultList; + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/FollowTaskService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/FollowTaskService.java new file mode 100644 index 000000000..2aacc4ffb --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/FollowTaskService.java @@ -0,0 +1,78 @@ +package com.cool.store.service; + +import com.cool.store.request.follow.AddFollowLogRequest; +import com.cool.store.request.follow.AddFollowTaskRequest; +import com.cool.store.request.follow.FollowTaskIdRequest; +import com.cool.store.request.follow.UpdateFollowTaskRequest; +import com.cool.store.vo.follow.FollowTaskLogVO; +import com.cool.store.vo.follow.FollowTaskPageVO; +import com.github.pagehelper.PageInfo; + +/** + * @author zhangchenbiao + * @FileName: FollowTaskService + * @Description: + * @date 2023-08-10 11:10 + */ +public interface FollowTaskService { + + /** + * 工作台获取跟进任务 + * @param pageNum + * @param pageSize + * @param taskStatus + * @param queryDate + * @param followUserId + * @return + */ + PageInfo getFollowTaskPage(Integer pageNum, Integer pageSize, Integer taskStatus, String queryDate, String followUserId); + + /** + * 获取线索跟进日志 + * @param pageNum + * @param pageSize + * @param partnerLineId + * @return + */ + PageInfo getFollowLogPage(Integer pageNum, Integer pageSize, Long partnerLineId); + + /** + * 添加跟进日志 + * @param request + * @param userId + * @return + */ + Integer addFollowLog(AddFollowLogRequest request, String userId); + + /** + * 新增跟进任务 + * @param request + * @param userId + * @return + */ + Long addFollowTask(AddFollowTaskRequest request, String userId); + + /** + * 编辑跟进任务 + * @param request + * @param userId + * @return + */ + Integer updateFollowTask(UpdateFollowTaskRequest request, String userId); + + /** + * 完成跟进任务 + * @param request + * @param userId + * @return + */ + Integer finishFollowTask(FollowTaskIdRequest request, String userId); + + /** + * 作废跟进任务 + * @param request + * @param userId + * @return + */ + Integer cancelFollowTask(FollowTaskIdRequest request, String userId); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FollowTaskServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FollowTaskServiceImpl.java new file mode 100644 index 000000000..5d1efc47d --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FollowTaskServiceImpl.java @@ -0,0 +1,150 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; +import com.cool.store.dao.EnterpriseUserDAO; +import com.cool.store.dao.HyFollowTaskDAO; +import com.cool.store.dao.HyPartnerLineInfoDAO; +import com.cool.store.dao.HyPartnerTaskInfoLogDAO; +import com.cool.store.dto.log.LineLogInfo; +import com.cool.store.dto.partner.PartnerSimpleInfoDTO; +import com.cool.store.entity.HyFollowTaskDO; +import com.cool.store.entity.HyPartnerLineInfoDO; +import com.cool.store.enums.*; +import com.cool.store.exception.ServiceException; +import com.cool.store.request.follow.AddFollowLogRequest; +import com.cool.store.request.follow.AddFollowTaskRequest; +import com.cool.store.request.follow.FollowTaskIdRequest; +import com.cool.store.request.follow.UpdateFollowTaskRequest; +import com.cool.store.service.FollowTaskService; +import com.cool.store.vo.follow.FollowTaskLogVO; +import com.cool.store.vo.follow.FollowTaskPageVO; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageInfo; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: FollowTaskServiceImpl + * @Description: + * @date 2023-08-10 11:10 + */ +@Service +public class FollowTaskServiceImpl implements FollowTaskService { + + @Resource + private HyFollowTaskDAO hyFollowTaskDAO; + @Resource + private HyPartnerLineInfoDAO hyPartnerLineInfoDAO; + @Resource + private HyPartnerTaskInfoLogDAO hyPartnerTaskInfoLogDAO; + @Resource + private EnterpriseUserDAO enterpriseUserDAO; + + @Override + public PageInfo getFollowTaskPage(Integer pageNum, Integer pageSize, Integer taskStatus, String queryDate, String followUserId) { + String deadlineStartTIme = null, deadlineEndTIme = null; + if(StringUtils.isNotBlank(queryDate) && FollowTaskStatusEnum.TODO.getCode().equals(taskStatus)){ + //只有待完成的时候需要根据截止时间查询 + deadlineStartTIme = queryDate + CommonConstants.DAY_START_TIME_SUFFIX; + deadlineEndTIme = queryDate + CommonConstants.DAY_END_TIME_SUFFIX; + } + Page taskPage = hyFollowTaskDAO.getTaskPage(followUserId, taskStatus, deadlineStartTIme, deadlineEndTIme, pageNum, pageSize); + PageInfo resultPage = new PageInfo(taskPage); + if(CollectionUtils.isNotEmpty(taskPage)){ + List partnerLineIds = taskPage.stream().map(HyFollowTaskDO::getPartnerLineId).distinct().collect(Collectors.toList()); + Map partnerSimpleInfoMap = hyPartnerLineInfoDAO.getPartnerSimpleInfoByLineIds(partnerLineIds); + List resultList = FollowTaskPageVO.convertVO(taskPage, partnerSimpleInfoMap); + resultPage.setList(resultList); + } + return resultPage; + } + + @Override + public PageInfo getFollowLogPage(Integer pageNum, Integer pageSize, Long partnerLineId) { + return null; + } + + @Override + public Integer addFollowLog(AddFollowLogRequest request, String userId) { + HyPartnerLineInfoDO lineInfo = checkLine(request.getPartnerLineId()); + String userName = enterpriseUserDAO.getUserName(userId); + LineLogInfo lineLogInfo = new LineLogInfo(lineInfo.getPartnerId(), request.getPartnerLineId(), userId, userName, OperateTypeEnum.ADD_FOLLOW_LOG, WorkflowStageEnum.getWorkflowStageByCode(lineInfo.getWorkflowStage()), lineInfo.getWorkflowStatus(), null); + JSONObject jsonObject = new JSONObject(); + jsonObject.put(OperateLogFieldValueEnum.FOLLOW_LOG.getCode(), request.getFollowLog()); + lineLogInfo.setData(jsonObject); + hyPartnerTaskInfoLogDAO.addOperateLog(lineLogInfo); + return null; + } + + @Override + public Long addFollowTask(AddFollowTaskRequest request, String userId) { + HyPartnerLineInfoDO lineInfo = checkLine(request.getPartnerLineId()); + HyFollowTaskDO task = AddFollowTaskRequest.convertDO(request); + task.setFollowUserId(lineInfo.getInvestmentManager()); + Long followTaskId = hyFollowTaskDAO.addFollowTask(task); + String userName = enterpriseUserDAO.getUserName(userId); + LineLogInfo lineLogInfo = new LineLogInfo(lineInfo.getPartnerId(), request.getPartnerLineId(), userId, userName, OperateTypeEnum.ADD_FOLLOW_TASK, WorkflowStageEnum.getWorkflowStageByCode(lineInfo.getWorkflowStage()), lineInfo.getWorkflowStatus(), null); + JSONObject jsonObject = new JSONObject(); + jsonObject.put(OperateLogFieldValueEnum.FOLLOW_TASK_ID.getCode(), followTaskId); + lineLogInfo.setData(jsonObject); + hyPartnerTaskInfoLogDAO.addOperateLog(lineLogInfo); + return followTaskId; + } + + @Override + public Integer updateFollowTask(UpdateFollowTaskRequest request, String userId) { + HyFollowTaskDO followTask = hyFollowTaskDAO.getFollowTask(request.getFollowTaskId()); + if(!FollowTaskStatusEnum.TODO.getCode().equals(followTask.getTaskStatus())){ + throw new ServiceException(ErrorCodeEnum.TASK_STATUS_NOT_ALLOW_OPERATE); + } + checkLine(followTask.getPartnerLineId()); + HyFollowTaskDO task = UpdateFollowTaskRequest.convertDO(request); + return hyFollowTaskDAO.updateFollowTask(task); + } + + @Override + public Integer finishFollowTask(FollowTaskIdRequest request, String userId) { + HyFollowTaskDO followTask = hyFollowTaskDAO.getFollowTask(request.getFollowTaskId()); + if(!FollowTaskStatusEnum.TODO.getCode().equals(followTask.getTaskStatus()) && !FollowTaskStatusEnum.OVERDUE.getCode().equals(followTask.getTaskStatus())){ + throw new ServiceException(ErrorCodeEnum.TASK_STATUS_NOT_ALLOW_OPERATE); + } + checkLine(followTask.getPartnerLineId()); + return hyFollowTaskDAO.finishFollowTask(request.getFollowTaskId()); + } + + @Override + public Integer cancelFollowTask(FollowTaskIdRequest request, String userId) { + HyFollowTaskDO followTask = hyFollowTaskDAO.getFollowTask(request.getFollowTaskId()); + if(!FollowTaskStatusEnum.TODO.getCode().equals(followTask.getTaskStatus())){ + throw new ServiceException(ErrorCodeEnum.TASK_STATUS_NOT_ALLOW_OPERATE); + } + checkLine(followTask.getPartnerLineId()); + return hyFollowTaskDAO.cancelFollowTask(request.getFollowTaskId()); + } + + /** + * 线索校验 + * @param partnerLineId + * @return + */ + public HyPartnerLineInfoDO checkLine(Long partnerLineId){ + HyPartnerLineInfoDO lineInfo = hyPartnerLineInfoDAO.selectByPrimaryKeySelective(partnerLineId); + if(Objects.isNull(lineInfo) || lineInfo.getDeleted()){ + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + if(!LineStatusEnum.PRIVATE_SEAS.getCode().equals(lineInfo.getLineStatus())){ + //线索只有私海的时候才能操作 + throw new ServiceException(ErrorCodeEnum.LINE_STATUS_NOT_ALLOW_OPERATE); + } + return lineInfo; + } +} diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/PartnerBWebApplication.java b/coolstore-partner-webb/src/main/java/com/cool/store/PartnerBWebApplication.java index 840bbb1a3..c081e830f 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/PartnerBWebApplication.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/PartnerBWebApplication.java @@ -1,7 +1,6 @@ package com.cool.store; import com.zaxxer.hikari.HikariDataSource; -import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; @@ -10,6 +9,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; import org.springframework.scheduling.annotation.EnableAsync; +import tk.mybatis.spring.annotation.MapperScan; import javax.sql.DataSource; diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/FollowTaskController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/FollowTaskController.java new file mode 100644 index 000000000..b46bc33fb --- /dev/null +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/FollowTaskController.java @@ -0,0 +1,79 @@ +package com.cool.store.controller; + +import com.cool.store.context.CurrentUserHolder; +import com.cool.store.request.follow.AddFollowLogRequest; +import com.cool.store.request.follow.AddFollowTaskRequest; +import com.cool.store.request.follow.FollowTaskIdRequest; +import com.cool.store.request.follow.UpdateFollowTaskRequest; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.FollowTaskService; +import com.cool.store.vo.follow.FollowTaskLogVO; +import com.cool.store.vo.follow.FollowTaskPageVO; +import com.github.pagehelper.PageInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Date; + +/** + * @author zhangchenbiao + * @FileName: FollowTaskController + * @Description: + * @date 2023-08-08 14:35 + */ +@RestController +@Slf4j +@Api(tags = "跟进任务") +public class FollowTaskController { + + @Resource + private FollowTaskService followTaskService; + + @ApiOperation("工作台获取跟进任务") + @GetMapping("/follow/task/page") + public ResponseResult> getFollowTaskPage(@RequestParam("pageNum")Integer pageNum, @RequestParam("pageSize")Integer pageSize, + @RequestParam("taskStatus")Integer taskStatus, @RequestParam(value = "queryDate", required = false) String queryDate){ + return ResponseResult.success(followTaskService.getFollowTaskPage(pageNum, pageSize, taskStatus, queryDate, CurrentUserHolder.getUserId())); + } + + @ApiOperation("获取线索跟进日志") + @GetMapping("/follow/log/page") + public ResponseResult> getFollowLogPage(@RequestParam("pageNum")Integer pageNum, @RequestParam("pageSize")Integer pageSize, @RequestParam("partnerLineId")Long partnerLineId){ + return ResponseResult.success(followTaskService.getFollowLogPage(pageNum, pageSize, partnerLineId)); + } + + @ApiOperation("添加跟进日志") + @PostMapping("/follow/log/add") + public ResponseResult addFollowLog(@RequestBody @Validated AddFollowLogRequest request){ + return ResponseResult.success(followTaskService.addFollowLog(request, CurrentUserHolder.getUserId())); + } + + @ApiOperation("新增跟进任务") + @PostMapping("/follow/task/add") + public ResponseResult addFollowTask(@RequestBody @Validated AddFollowTaskRequest request){ + return ResponseResult.success(followTaskService.addFollowTask(request, CurrentUserHolder.getUserId())); + } + + @ApiOperation("编辑跟进任务") + @PostMapping("/follow/task/update") + public ResponseResult updateFollowTask(@RequestBody @Validated UpdateFollowTaskRequest request){ + return ResponseResult.success(followTaskService.updateFollowTask(request, CurrentUserHolder.getUserId())); + } + + @ApiOperation("完成跟进任务") + @PostMapping("/follow/task/finish") + public ResponseResult finishFollowTask(@RequestBody @Validated FollowTaskIdRequest request){ + return ResponseResult.success(followTaskService.finishFollowTask(request, CurrentUserHolder.getUserId())); + } + + @ApiOperation("作废跟进任务") + @PostMapping("/follow/task/cancel") + public ResponseResult cancelFollowTask(@RequestBody @Validated FollowTaskIdRequest request){ + return ResponseResult.success(followTaskService.cancelFollowTask(request, CurrentUserHolder.getUserId())); + } + +} diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/TestController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/TestController.java index 860ccd0c1..299a69b2e 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/TestController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/TestController.java @@ -258,7 +258,7 @@ public class TestController { } @GetMapping("/getWechatAccessToken") - public ResponseResult getWechatAccessToken(@RequestParam(value = "appId")String appId, @RequestParam("appSecret")String appSecret){ + public ResponseResult getWechatAccessToken(@RequestParam(value = "appId")String appId, @RequestParam("appSecret")String appSecret) { try { return ResponseResult.success(isvHttpRequest.getWechatAccessToken(appId, appSecret)); } catch (ApiException e) { diff --git a/coolstore-partner-webc/src/main/java/com/cool/store/PartnerCWebApplication.java b/coolstore-partner-webc/src/main/java/com/cool/store/PartnerCWebApplication.java index 8aded9388..da9cac5f8 100644 --- a/coolstore-partner-webc/src/main/java/com/cool/store/PartnerCWebApplication.java +++ b/coolstore-partner-webc/src/main/java/com/cool/store/PartnerCWebApplication.java @@ -1,7 +1,6 @@ package com.cool.store; import com.zaxxer.hikari.HikariDataSource; -import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; @@ -12,6 +11,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; import org.springframework.scheduling.annotation.EnableAsync; +import tk.mybatis.spring.annotation.MapperScan; import javax.sql.DataSource;