From a54a84a2852133852bb8d384bf220dbf94fe5271 Mon Sep 17 00:00:00 2001 From: zhangchenbiao Date: Mon, 14 Aug 2023 10:51:30 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E8=B7=9F=E8=BF=9B=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=88=9D=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; From f7c446ba8d8ce210f0be97541d2a00e201c86791 Mon Sep 17 00:00:00 2001 From: zhangchenbiao Date: Mon, 14 Aug 2023 11:34:26 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E9=80=86=E5=90=91=E5=B7=A5=E7=A8=8B?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/generator/GeneratorCodeMain.java | 2 +- .../generator/defined/MyCommentGenerator.java | 3 + .../MyIntrospectedTableMyBatis3Impl.java | 78 +++---------------- .../generator/defined/MyPluginAdapter.java | 1 + .../src/test/resources/mybatis-generator.xml | 4 +- 5 files changed, 16 insertions(+), 72 deletions(-) diff --git a/coolstore-partner-dao/src/test/java/generator/GeneratorCodeMain.java b/coolstore-partner-dao/src/test/java/generator/GeneratorCodeMain.java index cad5e60c3..b03b91133 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-tk.xml")); + Configuration config = cp.parseConfiguration(GeneratorCodeMain.class.getResourceAsStream("/mybatis-generator.xml")); // 是否覆盖 DefaultShellCallback dsc = new DefaultShellCallback(false); MyBatisGenerator mg = new MyBatisGenerator(config, dsc, warnings); diff --git a/coolstore-partner-dao/src/test/java/generator/defined/MyCommentGenerator.java b/coolstore-partner-dao/src/test/java/generator/defined/MyCommentGenerator.java index 5e50368c6..35668e9aa 100644 --- a/coolstore-partner-dao/src/test/java/generator/defined/MyCommentGenerator.java +++ b/coolstore-partner-dao/src/test/java/generator/defined/MyCommentGenerator.java @@ -1,5 +1,6 @@ package generator.defined; +import org.apache.commons.lang3.StringUtils; import org.mybatis.generator.api.CommentGenerator; import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; @@ -63,6 +64,8 @@ public class MyCommentGenerator extends DefaultCommentGenerator implements Comme topLevelClass.addJavaDocLine(" * @author " + author); topLevelClass.addJavaDocLine(" * @date " + currentDateStr); topLevelClass.addJavaDocLine(" */"); + String tableName = "\"" +introspectedTable.getFullyQualifiedTableNameAtRuntime()+"\""; + topLevelClass.addAnnotation("@Table(name = "+tableName+")"); } @Override 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 41fdfad9b..56b016ba0 100644 --- a/coolstore-partner-dao/src/test/java/generator/defined/MyIntrospectedTableMyBatis3Impl.java +++ b/coolstore-partner-dao/src/test/java/generator/defined/MyIntrospectedTableMyBatis3Impl.java @@ -14,7 +14,6 @@ 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; @@ -71,17 +70,6 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im return JavaBeansUtil.getCamelCaseString(tableName,true); } - private boolean isConfigTable() { - String tableName = this.getTableConfiguration().getTableName(); - String tableSuffix = tableName.substring(tableName.lastIndexOf("_") + 1); - if(StringUtils.isNotBlank(tableSuffix) && tableSuffix.length() == 32){ - //企业库 - return false; - } - //平台库 - return true; - } - @Override protected String calculateMyBatis3XmlMapperFileName() { StringBuilder sb = new StringBuilder(); @@ -210,7 +198,7 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im addResultMapWithBLOBsElement(answer); addBaseColumnListElement(answer); addBlobColumnListElement(answer); - addInsertSelectiveElement(answer); + /*addInsertSelectiveElement(answer); addUpdateByPrimaryKeySelectiveElement(answer); addMyBatis3UpdateByExampleWhereClauseElement(answer); addExampleWhereClauseElement(answer); @@ -218,7 +206,7 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im addSelectByExampleWithoutBLOBsElement(answer); addUpdateByExampleWithBLOBsElement(answer); addUpdateByExampleWithoutBLOBsElement(answer); - addUpdateByExampleSelectiveElement(answer); + addUpdateByExampleSelectiveElement(answer);*/ return answer; } @@ -276,9 +264,11 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im interfaze.addSuperInterface(fqjt); interfaze.addImportedType(fqjt); } - interfaze.addImportedType(new FullyQualifiedJavaType("org.apache.ibatis.annotations.Param")); - addInsertSelectiveMethod(interfaze); - addUpdateByPrimaryKeySelectiveMethod(interfaze); + interfaze.addSuperInterface(new FullyQualifiedJavaType("tk.mybatis.mapper.common.Mapper<"+getTableNameFromConfigFile()+"DO>")); + interfaze.addImportedType(new FullyQualifiedJavaType("tk.mybatis.mapper.common.Mapper")); + interfaze.addImportedType(new FullyQualifiedJavaType(calculateJavaModelPackage() + "."+getTableNameFromConfigFile()+"DO")); + //addInsertSelectiveMethod(interfaze); + //addUpdateByPrimaryKeySelectiveMethod(interfaze); List methods = interfaze.getMethods(); for (Method method : methods) { List parameters = method.getParameters(); @@ -287,10 +277,10 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im parameter.addAnnotation("@Param(\""+ name+"\")"); } } - addSelectByExampleWithBLOBsMethod(interfaze); + /*addSelectByExampleWithBLOBsMethod(interfaze); addSelectByExampleWithoutBLOBsMethod(interfaze); addUpdateByExampleSelectiveMethod(interfaze); - addUpdateByExampleWithoutBLOBsMethod(interfaze); + addUpdateByExampleWithoutBLOBsMethod(interfaze);*/ List answer = new ArrayList(); if (context.getPlugins().clientGenerated(interfaze, null, introspectedTable)) { answer.add(interfaze); @@ -491,54 +481,4 @@ 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/java/generator/defined/MyPluginAdapter.java b/coolstore-partner-dao/src/test/java/generator/defined/MyPluginAdapter.java index 50d30d5f5..aeefdf566 100644 --- a/coolstore-partner-dao/src/test/java/generator/defined/MyPluginAdapter.java +++ b/coolstore-partner-dao/src/test/java/generator/defined/MyPluginAdapter.java @@ -42,6 +42,7 @@ public class MyPluginAdapter extends PluginAdapter { topLevelClass.addImportedType("lombok.NoArgsConstructor"); topLevelClass.addImportedType("lombok.AllArgsConstructor"); topLevelClass.addImportedType("io.swagger.annotations.ApiModelProperty"); + topLevelClass.addImportedType("javax.persistence.Table"); topLevelClass.addAnnotation("@Data"); topLevelClass.addAnnotation("@Builder"); topLevelClass.addAnnotation("@NoArgsConstructor"); diff --git a/coolstore-partner-dao/src/test/resources/mybatis-generator.xml b/coolstore-partner-dao/src/test/resources/mybatis-generator.xml index 5e3644fee..880e6e523 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 @@ - +
From 634d6ec24edc356f0cff59a1faf465276d3a8758 Mon Sep 17 00:00:00 2001 From: zhangchenbiao Date: Mon, 14 Aug 2023 15:03:27 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E8=B7=9F=E8=BF=9B=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/constants/CommonConstants.java | 3 ++ .../store/constants/MessageConstants.java | 17 ++++++ .../com/cool/store/enums/ErrorCodeEnum.java | 1 + .../com/cool/store/utils/CoolDateUtils.java | 3 -- .../cool/store/dao/HyPartnerLineInfoDAO.java | 14 +++-- .../MyIntrospectedTableMyBatis3Impl.java | 6 --- .../follow/UpdateFollowTaskRequest.java | 3 +- .../service/impl/FollowTaskServiceImpl.java | 54 ++++++++++++++++++- 8 files changed, 85 insertions(+), 16 deletions(-) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/constants/MessageConstants.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 a5fed5def..fb7c92c84 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 @@ -26,6 +26,8 @@ public class CommonConstants { public static final int NORMAL_LOCK_TIMES = 60 * 1000; + public static final int AN_HOUR_SECONDS = 3600; + /** * 企业开通锁存活时间 */ @@ -101,6 +103,7 @@ public class CommonConstants { public static final int EIGHTY = 80; public static final int NINETY = 90; public static final int HUNDRED = 100; + public static final int ONE_THOUSAND = 1000; public static final String ONE_STR = "1"; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/MessageConstants.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/MessageConstants.java new file mode 100644 index 000000000..6e01878be --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/MessageConstants.java @@ -0,0 +1,17 @@ +package com.cool.store.constants; + +/** + * @author zhangchenbiao + * @FileName: MessageConstants + * @Description:通知消息常量 + * @date 2023-08-14 14:41 + */ +public class MessageConstants { + + public static final String FOLLOW_TASK_MESSAGE_TITLE = "线索跟进任务"; + public static final String FOLLOW_TASK_MESSAGE_CONTENT = "您有一个线索跟进任务将于{0}截止 ,线索信息{1}手机号{2},请及时跟进"; + public static final String FOLLOW_TASK_MESSAGE_CONTENT_1 = "您有{0}个线索跟进任务将于今日截止,及{1}个跟进任务已逾期,请及时跟进"; + public static final String FOLLOW_TASK_MESSAGE_CONTENT_2 = "您有{0}个跟进任务已逾期,请及时跟进"; + public static final String FOLLOW_TASK_MESSAGE_CONTENT_3 = "您有{1}个线索跟进任务将于今日截止,请及时跟进"; + +} 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 35097472e..f392f0ebd 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 @@ -63,6 +63,7 @@ public enum ErrorCodeEnum { PARTNER_BASE_INFO_NOT_EXIST(500009, "加盟商信息不存在!", null), LINE_STATUS_NOT_ALLOW_OPERATE(500010, "当前线索状态不允许该操作!", null), TASK_STATUS_NOT_ALLOW_OPERATE(500011, "当前任务状态不允许该操作!", null), + DATELINE_BEFORE_NOW(500012, "截止时间不能早于当前时间!", null), INTERVIEW_ENTER_FAIL(1021101, "进入面试间失败", null), DINGDING_USER_NOT_EXIST(1021102, "用户钉钉信息不存在,无法发起资质审核!", null), diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/CoolDateUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/CoolDateUtils.java index 06d0446a3..40329511e 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/CoolDateUtils.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/CoolDateUtils.java @@ -1,12 +1,9 @@ package com.cool.store.utils; -import cn.hutool.core.date.DateUtil; - import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.*; -import java.time.format.DateTimeFormatter; import java.util.Calendar; import java.util.Date; 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 b80f041dc..262448e81 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,6 +1,7 @@ package com.cool.store.dao; import cn.hutool.core.map.MapUtil; +import com.cool.store.constants.CommonConstants; import com.cool.store.dto.partner.PartnerBlackListDTO; import com.cool.store.dto.partner.PartnerLineInfoAndBaseInfoDTO; import com.cool.store.dto.partner.StageCountDTO; @@ -15,10 +16,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Repository; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -199,4 +197,12 @@ public class HyPartnerLineInfoDAO { return ListUtils.emptyIfNull(partnerList).stream().collect(Collectors.toMap(k->k.getPartnerLineId(), Function.identity(), (k1, k2)->k1)); } + public PartnerSimpleInfoDTO getPartnerSimpleInfoByLineId(Long partnerLineId){ + if(Objects.isNull(partnerLineId)){ + return null; + } + List partnerList = hyPartnerLineInfoMapper.getPartnerSimpleInfoByLineIds(Arrays.asList(partnerLineId)); + return CollectionUtils.isEmpty(partnerList) ? null : partnerList.get(CommonConstants.ZERO); + } + } 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 56b016ba0..3b759f68a 100644 --- a/coolstore-partner-dao/src/test/java/generator/defined/MyIntrospectedTableMyBatis3Impl.java +++ b/coolstore-partner-dao/src/test/java/generator/defined/MyIntrospectedTableMyBatis3Impl.java @@ -85,12 +85,6 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im } StringBuilder sb = new StringBuilder(); - sb.append(calculateJavaClientImplementationPackage()); - sb.append('.'); - sb.append(getTableNameFromConfigFile()); - sb.append("DAOImpl"); //$NON-NLS-1$ - setDAOImplementationType(sb.toString()); - sb.setLength(0); sb.append(calculateJavaClientInterfacePackage()); sb.append('.'); 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 index c1ca46308..b19484cf3 100644 --- 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 @@ -45,9 +45,10 @@ public class UpdateFollowTaskRequest { @ApiModelProperty("任务截止时间") private Date deadline; - public static HyFollowTaskDO convertDO(UpdateFollowTaskRequest request){ + public static HyFollowTaskDO convertDO(Long partnerLineId, UpdateFollowTaskRequest request){ HyFollowTaskDO result = new HyFollowTaskDO(); result.setId(request.getFollowTaskId()); + result.setPartnerLineId(partnerLineId); result.setTaskTitle(request.getTaskTitle()); result.setCommunicationType(request.getCommunicationType()); result.setDeadline(request.getDeadline()); 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 index 5d1efc47d..d5035177f 100644 --- 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 @@ -1,31 +1,42 @@ package com.cool.store.service.impl; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; +import com.cool.store.constants.MessageConstants; 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.message.SendCardMessageDTO; 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.ApiException; import com.cool.store.exception.ServiceException; +import com.cool.store.http.ISVHttpRequest; 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.utils.CoolDateUtils; 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 lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.text.MessageFormat; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Objects; @@ -37,6 +48,7 @@ import java.util.stream.Collectors; * @Description: * @date 2023-08-10 11:10 */ +@Slf4j @Service public class FollowTaskServiceImpl implements FollowTaskService { @@ -48,6 +60,10 @@ public class FollowTaskServiceImpl implements FollowTaskService { private HyPartnerTaskInfoLogDAO hyPartnerTaskInfoLogDAO; @Resource private EnterpriseUserDAO enterpriseUserDAO; + @Resource + private ISVHttpRequest isvHttpRequest; + @Value("${feishu.notice.link.url:null}") + private String linkUrl; @Override public PageInfo getFollowTaskPage(Integer pageNum, Integer pageSize, Integer taskStatus, String queryDate, String followUserId) { @@ -87,6 +103,9 @@ public class FollowTaskServiceImpl implements FollowTaskService { @Override public Long addFollowTask(AddFollowTaskRequest request, String userId) { + if(request.getDeadline().getTime() < System.currentTimeMillis()){ + throw new ServiceException(ErrorCodeEnum.DATELINE_BEFORE_NOW); + } HyPartnerLineInfoDO lineInfo = checkLine(request.getPartnerLineId()); HyFollowTaskDO task = AddFollowTaskRequest.convertDO(request); task.setFollowUserId(lineInfo.getInvestmentManager()); @@ -97,6 +116,10 @@ public class FollowTaskServiceImpl implements FollowTaskService { jsonObject.put(OperateLogFieldValueEnum.FOLLOW_TASK_ID.getCode(), followTaskId); lineLogInfo.setData(jsonObject); hyPartnerTaskInfoLogDAO.addOperateLog(lineLogInfo); + if((request.getDeadline().getTime() - System.currentTimeMillis()) /CommonConstants.ONE_THOUSAND < CommonConstants.AN_HOUR_SECONDS){ + //一小时内的任务立即发送通知 + sendMessage(task); + } return followTaskId; } @@ -106,8 +129,15 @@ public class FollowTaskServiceImpl implements FollowTaskService { if(!FollowTaskStatusEnum.TODO.getCode().equals(followTask.getTaskStatus())){ throw new ServiceException(ErrorCodeEnum.TASK_STATUS_NOT_ALLOW_OPERATE); } + if(Objects.nonNull(request.getDeadline()) && request.getDeadline().getTime() < System.currentTimeMillis()){ + throw new ServiceException(ErrorCodeEnum.DATELINE_BEFORE_NOW); + } checkLine(followTask.getPartnerLineId()); - HyFollowTaskDO task = UpdateFollowTaskRequest.convertDO(request); + HyFollowTaskDO task = UpdateFollowTaskRequest.convertDO(followTask.getPartnerLineId(), request); + if(!request.getDeadline().equals(followTask.getDeadline()) && (request.getDeadline().getTime() - System.currentTimeMillis()) / CommonConstants.ONE_THOUSAND < CommonConstants.AN_HOUR_SECONDS){ + //一小时内的任务立即发送通知 + sendMessage(task); + } return hyFollowTaskDAO.updateFollowTask(task); } @@ -136,7 +166,7 @@ public class FollowTaskServiceImpl implements FollowTaskService { * @param partnerLineId * @return */ - public HyPartnerLineInfoDO checkLine(Long partnerLineId){ + private HyPartnerLineInfoDO checkLine(Long partnerLineId){ HyPartnerLineInfoDO lineInfo = hyPartnerLineInfoDAO.selectByPrimaryKeySelective(partnerLineId); if(Objects.isNull(lineInfo) || lineInfo.getDeleted()){ throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); @@ -147,4 +177,24 @@ public class FollowTaskServiceImpl implements FollowTaskService { } return lineInfo; } + + private void sendMessage(HyFollowTaskDO task){ + PartnerSimpleInfoDTO partnerInfo = hyPartnerLineInfoDAO.getPartnerSimpleInfoByLineId(task.getPartnerLineId()); + if(Objects.isNull(partnerInfo)){ + return; + } + String dateline = DateUtil.format(task.getDeadline(), CoolDateUtils.DATE_FORMAT_SEC_2); + String content = MessageFormat.format(MessageConstants.FOLLOW_TASK_MESSAGE_CONTENT, dateline, partnerInfo.getUsername(), partnerInfo.getMobile()); + SendCardMessageDTO sendCardMessage = new SendCardMessageDTO(); + sendCardMessage.setMessageUrl(linkUrl); + sendCardMessage.setMessageType(MessageTypeEnum.SCHEDULE_REMINDER); + sendCardMessage.setContent(content); + sendCardMessage.setTitle(MessageConstants.FOLLOW_TASK_MESSAGE_TITLE); + sendCardMessage.setUserIds(Arrays.asList(task.getFollowUserId())); + try { + isvHttpRequest.sendFeiShuCardMessage(sendCardMessage); + } catch (ApiException e) { + log.error("跟进任务发送通知失败, {}", JSONObject.toJSONString(task)); + } + } } From 106975a3e6e938d1a459fa2063fc7b06a7a21b31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BF=9E=E6=89=AC?= Date: Mon, 14 Aug 2023 16:06:56 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=91=BC=E5=87=BA?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/cool/store/service/CallService.java | 2 +- .../java/com/cool/store/service/impl/CallServiceImpl.java | 3 ++- .../main/java/com/cool/store/controller/CallController.java | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/CallService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/CallService.java index 6099fe925..820b498ed 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/CallService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/CallService.java @@ -11,7 +11,7 @@ import com.cool.store.request.CallUpReq; * @Description: */ public interface CallService { - void callUp(CallUpReq request) throws ApiException; + String callUp(CallUpReq request) throws ApiException; void callFinishBack(CallFinishBackReq request) throws ApiException; void callRecordBack(CallRecordBackReq request) throws ApiException; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CallServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CallServiceImpl.java index cf4602aa4..388021117 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CallServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CallServiceImpl.java @@ -37,7 +37,7 @@ public class CallServiceImpl implements CallService { @Autowired private HyOutboundMobileMapper hyOutboundMobileMapper; @Override - public void callUp(CallUpReq request) throws ApiException { + public String callUp(CallUpReq request) throws ApiException { try { //校验拨出手机号APP是否在线 boolean isOnline = WebSocketServer.isOnline(request.getOutgoingMobile()); @@ -70,6 +70,7 @@ public class CallServiceImpl implements CallService { //保存通话记录 callRecordMapper.insertSelective(callRecordDO); + return transNo; } catch (Exception e) { log.error("callUp error, request:{}", JSON.toJSONString(request), e); throw new ApiException(ErrorCodeEnum.CALL_UP_ERROR); diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/CallController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/CallController.java index 3d4b72fd2..50e2b9975 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/CallController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/CallController.java @@ -33,8 +33,8 @@ public class CallController { @PostMapping("/callUp") @ApiOperation("呼出电话") public ResponseResult callUp(@RequestBody CallUpReq request) throws ApiException { - callService.callUp(request); - return ResponseResult.success(); + String res = callService.callUp(request); + return ResponseResult.success(res); } @PostMapping("/finish/callback")