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 f07bb9b12..5e44ab792 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 @@ -87,6 +87,7 @@ public enum ErrorCodeEnum { NO_PERMISSION(600004, "暂无处理审批任务权限", null), POINT_AUDIT_NODE_ERROR(600005, "当前审批任务异常", null), USER_NOT_TODO_AUDIT(600005, "当前用户没有待审批的任务", null), + NOT_ALLOW_MODIFY_WANT_SHOP_NUM(600006, "当前阶段不允许直接修改意向开店数量", 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/point/PointRecommendStatus.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PointRecommendStatus.java index a409092e3..9473d5539 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PointRecommendStatus.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/point/PointRecommendStatus.java @@ -1,5 +1,8 @@ package com.cool.store.enums.point; +import java.util.ArrayList; +import java.util.List; + /** * @author zhangchenbiao * @FileName: PointRecommendStatus @@ -43,5 +46,21 @@ public enum PointRecommendStatus { return null; } + public static String getDescByCode(Integer code) { + for (PointRecommendStatus pointRecommendStatus : PointRecommendStatus.values()) { + if (pointRecommendStatus.getCode().equals(code)) { + return pointRecommendStatus.getDesc(); + } + } + return null; + } + + public static List getSelectStatus(){ + List resultList = new ArrayList<>(); + resultList.add(POINT_RECOMMEND_STATUS_2.code); + resultList.add(POINT_RECOMMEND_STATUS_4.code); + return resultList; + } + } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserDAO.java index 84d8b2e2b..9a3c19b86 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/EnterpriseUserDAO.java @@ -97,6 +97,11 @@ public class EnterpriseUserDAO { return userList.stream().filter(o->!StringUtils.isAnyBlank(o.getMobile(), o.getName())).collect(Collectors.toMap(k -> k.getUserId(), Function.identity())); } + public Map getUserInfoMap(List userIds){ + List userList = getUserInfoByUserIds(userIds); + return userList.stream().collect(Collectors.toMap(k -> k.getUserId(), Function.identity())); + } + public EnterpriseUserDO selectByMobile(String mobile) { return enterpriseUserMapper.selectByMobile( mobile); } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyOpenAreaInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyOpenAreaInfoDAO.java index f62c9820d..372453d25 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyOpenAreaInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyOpenAreaInfoDAO.java @@ -167,4 +167,8 @@ public class HyOpenAreaInfoDAO { return hyOpenAreaInfoMapper.updateByPrimaryKeySelective( hyOpenAreaInfoDO); } + public Map getCityMap(List wantShopAreaIds) { + List openAreaInfoList = selectByIds(wantShopAreaIds); + return openAreaInfoList.stream().collect(Collectors.toMap(k->k.getId(), v->v, (k1, k2)->k1)); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInfoDAO.java index 54b373b8f..984c5c7a8 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInfoDAO.java @@ -10,8 +10,11 @@ import com.cool.store.exception.ServiceException; import com.cool.store.mapper.LineInfoMapper; import com.cool.store.request.LineListRequest; import com.cool.store.request.PartnerRequest; +import com.cool.store.request.PointLinePageRequest; import com.cool.store.request.PublicLineListRequest; import com.cool.store.vo.PublicLineListVO; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -128,8 +131,9 @@ public class LineInfoDAO { lineInfoMapper.insertOrUpdate(lineInfoParam); } - public List getLineListByDevelopmentManager(String developmentManager) { - return Lists.newArrayList(); + public Page getLinePageByDevelopmentManager(PointLinePageRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + return lineInfoMapper.getLinePageByDevelopmentManager(request); } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointAuditRecordDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointAuditRecordDAO.java index 96b220001..dadf8d4db 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointAuditRecordDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointAuditRecordDAO.java @@ -57,4 +57,11 @@ public class PointAuditRecordDAO { } return pointAuditRecordMapper.deletePointAuditRecord(pointId, cycleCount); } + + public List getPointAllAuditRecord(Long pointId) { + if(Objects.isNull(pointId)){ + return Lists.newArrayList(); + } + return pointAuditRecordMapper.getPointAllAuditRecord(pointId); + } } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointInfoDAO.java index 6dc0667b2..4d6826b49 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointInfoDAO.java @@ -1,11 +1,25 @@ package com.cool.store.dao; +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; +import com.cool.store.dto.point.LineCountDTO; import com.cool.store.entity.PointInfoDO; import com.cool.store.mapper.PointInfoMapper; +import com.cool.store.request.PointPageRequest; +import com.cool.store.request.RecommendPointPageRequest; +import com.cool.store.utils.StringUtil; +import com.cool.store.vo.point.PointHomePageDataVO; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Repository; import javax.annotation.Resource; +import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.stream.Collectors; /** * @author zhangchenbiao @@ -35,4 +49,45 @@ public class PointInfoDAO { public Integer updatePointInfo(PointInfoDO shopPointInfo) { return pointInfoMapper.updateByPrimaryKeySelective(shopPointInfo); } + + public PointHomePageDataVO getMyPointData(String userId) { + return pointInfoMapper.getMyPointData(userId); + } + + /** + * 获取我的铺位 + * @param request + * @return + */ + public Page getMyPointPage(PointPageRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + return pointInfoMapper.getMyPointPage(request); + } + + public Map getSelectedShopNumMap(List lineIds) { + if(CollectionUtils.isEmpty(lineIds)){ + return Maps.newHashMap(); + } + List selectedShopNum = pointInfoMapper.getSelectedShopNum(lineIds); + return selectedShopNum.stream().collect(Collectors.toMap(k->k.getLineId(), v->v.getSelectedShopNum())); + } + + public List getPointListByIds(List pointIds){ + if(CollectionUtils.isEmpty(pointIds)){ + return Lists.newArrayList(); + } + return pointInfoMapper.getPointListByIds(pointIds); + } + + public Page getRecommendPointList(RecommendPointPageRequest request) { + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + return pointInfoMapper.getRecommendPointList(request); + } + + public Integer updateSelectedDevelopmentManager(Long lineId, String developmentManager) { + if(Objects.isNull(lineId) || StringUtils.isBlank(developmentManager)){ + return null; + } + return pointInfoMapper.updateSelectedDevelopmentManager(lineId, developmentManager); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointRecommendDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointRecommendDAO.java index 1a6951bfb..1d24503df 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointRecommendDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/PointRecommendDAO.java @@ -1,12 +1,17 @@ package com.cool.store.dao; +import com.cool.store.dto.point.LineCountDTO; +import com.cool.store.entity.PointRecommendDO; import com.cool.store.enums.point.PointRecommendStatus; import com.cool.store.mapper.PointRecommendMapper; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Repository; import javax.annotation.Resource; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; @@ -22,6 +27,12 @@ public class PointRecommendDAO { @Resource private PointRecommendMapper pointRecommendMapper; + /** + * 更新推荐状态 + * @param pointId + * @param status + * @return + */ public Integer updateRecommendStatus(Long pointId, PointRecommendStatus status) { if(Objects.isNull(status)){ return 0; @@ -29,6 +40,13 @@ public class PointRecommendDAO { return pointRecommendMapper.updateShopPointRecommendStatus(pointId, status.getCode()); } + /** + * 更新推荐状态 + * @param pointId + * @param status + * @param statusList + * @return + */ public Integer updateRecommendStatusByStatusAndPointId(Long pointId, PointRecommendStatus status, List statusList) { if(Objects.isNull(status) || CollectionUtils.isEmpty(statusList)){ return 0; @@ -37,4 +55,41 @@ public class PointRecommendDAO { return pointRecommendMapper.updateRecommendStatusByStatusAndPointId(pointId, status.getCode(), statusCodeList); } + /** + * 获取已推门店数量 + * @param lineIds + * @return + */ + public Map getPushShopNumMap(List lineIds) { + if(CollectionUtils.isEmpty(lineIds)){ + return Maps.newHashMap(); + } + List pushShopNumMap = pointRecommendMapper.getPushShopNumMap(lineIds); + return pushShopNumMap.stream().collect(Collectors.toMap(k->k.getLineId(), v->v.getRecommendShopNum())); + } + + /** + * 获取推荐列表 + * @param lineId + * @return + */ + public List getRecommendPointList(Long lineId) { + if(Objects.isNull(lineId)){ + return Lists.newArrayList(); + } + return pointRecommendMapper.getRecommendPointList(lineId); + } + + public Integer addRecommendPoint(List recommendList) { + return pointRecommendMapper.batchInsert(recommendList); + } + + /** + * 删除未选择的推荐铺位 + * @param lineId + * @return + */ + public Integer deleteUnselectedRecommendPointByLineId(Long lineId) { + return pointRecommendMapper.deleteUnselectedRecommendPointByLineId(lineId); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInfoMapper.java index 2d9cae0fd..1b25f9677 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInfoMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineInfoMapper.java @@ -5,7 +5,9 @@ import com.cool.store.entity.LineInfoDO; import com.cool.store.enums.WorkflowSubStageStatusEnum; import com.cool.store.request.LineListRequest; import com.cool.store.request.PartnerRequest; +import com.cool.store.request.PointLinePageRequest; import com.cool.store.request.PublicLineListRequest; +import com.github.pagehelper.Page; import org.apache.ibatis.annotations.Param; import tk.mybatis.mapper.common.Mapper; @@ -76,4 +78,11 @@ public interface LineInfoMapper extends Mapper { Integer batchUpdateInterviewWorkflowStage(@Param("lineIds") List lineIds, @Param("workflowSubStage")Integer workflowSubStage, @Param("workflowSubStageStatus")Integer workflowSubStageStatus); + + /** + * 选址人员获取蓄水池状态的加盟商 + * @param request + * @return + */ + Page getLinePageByDevelopmentManager(@Param("request") PointLinePageRequest request); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointAuditRecordMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointAuditRecordMapper.java index 44476a9e6..060cd14e3 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointAuditRecordMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointAuditRecordMapper.java @@ -31,4 +31,11 @@ public interface PointAuditRecordMapper extends Mapper { * @return */ Integer deletePointAuditRecord(@Param("pointId") Long pointId, @Param("cycleCount") Integer cycleCount); + + /** + * 获取点位所有的审批记录 + * @param pointId + * @return + */ + List getPointAllAuditRecord(@Param("pointId") Long pointId); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointInfoMapper.java index c17595330..f43e3f441 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointInfoMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointInfoMapper.java @@ -1,7 +1,60 @@ package com.cool.store.mapper; +import com.cool.store.dto.point.LineCountDTO; import com.cool.store.entity.PointInfoDO; +import com.cool.store.request.PointPageRequest; +import com.cool.store.request.RecommendPointPageRequest; +import com.cool.store.vo.point.PointHomePageDataVO; +import com.cool.store.vo.point.PointPageVO; +import com.github.pagehelper.Page; +import org.apache.ibatis.annotations.Param; import tk.mybatis.mapper.common.Mapper; +import java.util.List; +import java.util.Map; + public interface PointInfoMapper extends Mapper { + + /** + * 获取我的数据 + * @param userId + * @return + */ + PointHomePageDataVO getMyPointData(@Param("userId") String userId); + + /** + * 获取我的铺位分页 + * @param request + * @return + */ + Page getMyPointPage(@Param("request") PointPageRequest request); + + /** + * 获取线索选择门店数 + * @param lineIds + * @return + */ + List getSelectedShopNum(@Param("lineIds") List lineIds); + + /** + * 获取铺位详情 + * @param pointIds + * @return + */ + List getPointListByIds(@Param("pointIds") List pointIds); + + /** + * 获取推荐铺位分页 + * @param request + * @return + */ + Page getRecommendPointList(@Param("request") RecommendPointPageRequest request); + + /** + * 更新铺位的拓展经理 + * @param lineId + * @param developmentManager + * @return + */ + Integer updateSelectedDevelopmentManager(@Param("lineId") Long lineId, @Param("developmentManager")String developmentManager); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointRecommendMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointRecommendMapper.java index 55ad71046..92ecc917e 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointRecommendMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/PointRecommendMapper.java @@ -1,10 +1,12 @@ package com.cool.store.mapper; +import com.cool.store.dto.point.LineCountDTO; import com.cool.store.entity.PointRecommendDO; import org.apache.ibatis.annotations.Param; import tk.mybatis.mapper.common.Mapper; import java.util.List; +import java.util.Map; public interface PointRecommendMapper extends Mapper { @@ -23,4 +25,32 @@ public interface PointRecommendMapper extends Mapper { * @return */ Integer updateRecommendStatusByStatusAndPointId(@Param("pointId") Long pointId, @Param("status") Integer status, @Param("statusList") List statusList); + + /** + * 获取体检店铺数量 + * @param lineIds + * @return + */ + List getPushShopNumMap(@Param("lineIds") List lineIds); + + /** + * 获取推荐列表 + * @param lineId + * @return + */ + List getRecommendPointList(@Param("lineId") Long lineId); + + /** + * 批量新增 + * @param recommendList + * @return + */ + Integer batchInsert(@Param("recommendList") List recommendList); + + /** + * 删除线索为推进的铺位 + * @param lineId + * @return + */ + Integer deleteUnselectedRecommendPointByLineId(@Param("lineId") Long lineId); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/LineInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/LineInfoMapper.xml index c65045ade..5fb068248 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/LineInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/LineInfoMapper.xml @@ -459,5 +459,12 @@ and workflow_sub_stage_status = 15 and workflow_sub_stage = 5 + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/PointAuditRecordMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/PointAuditRecordMapper.xml index 1e31a435e..61ad36a21 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/PointAuditRecordMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/PointAuditRecordMapper.xml @@ -121,6 +121,15 @@ order by node_no asc + update xfsg_point_audit_record set deleted = 1 where point_id = #{pointId} and cycle_count = #{cycleCount} and audit_status = 0 diff --git a/coolstore-partner-dao/src/main/resources/mapper/PointInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/PointInfoMapper.xml index b517552bc..7bd2eab60 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/PointInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/PointInfoMapper.xml @@ -24,4 +24,96 @@ + + + id, point_code, point_name, region_id, shop_id, line_id, point_area, longitude, latitude, address, development_manager, operate_user_id, development_time, point_status, point_score, select_status, submit_audit_count, is_line_upload + + + + + + + + + + update + xfsg_point_info + set + development_manager = #{developmentManager} + where + line_id = #{lineId} and select_status = '1' and deleted = 0 + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/PointRecommendMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/PointRecommendMapper.xml index e9a98da23..e3d50c168 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/PointRecommendMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/PointRecommendMapper.xml @@ -12,14 +12,54 @@ + - update xfsg_point_recommend set status = #{status} where point_id = #{pointId} + update xfsg_point_recommend set status = #{status} where point_id = #{pointId} and deleted = 0 - + - update xfsg_point_recommend set status = #{status} where point_id = #{pointId} and status in + update xfsg_point_recommend set status = #{status} where point_id = #{pointId} and deleted = 0 and status in #{status} + + + + + + + + insert into xfsg_point_recommend (line_id, point_id, development_manager, status) + values (#{item.lineId}, #{item.pointId}, #{item.developmentManager}, #{item.status}) + + + + + update xfsg_point_recommend set deleted = 1 where line_id = #{lineId} and deleted = 0 and status in (0,2) + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/point/LineCountDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/point/LineCountDTO.java new file mode 100644 index 000000000..10bf6fc8b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/point/LineCountDTO.java @@ -0,0 +1,24 @@ +package com.cool.store.dto.point; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: LineCountDTO + * @Description: + * @date 2024-04-08 15:52 + */ +@Data +public class LineCountDTO { + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("推荐门店数量") + private Integer recommendShopNum; + + @ApiModelProperty("选择门店数量") + private Integer selectedShopNum; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/PointAuditRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/PointAuditRequest.java index d5a1e9c75..598b9662e 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/PointAuditRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/PointAuditRequest.java @@ -1,9 +1,12 @@ package com.cool.store.request; +import com.cool.store.enums.AuditStatusEnum; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.apache.commons.lang3.StringUtils; import java.util.Date; +import java.util.Objects; /** * @author zhangchenbiao @@ -23,5 +26,18 @@ public class PointAuditRequest { @ApiModelProperty("原因") private String reason; + public boolean check(){ + if(Objects.isNull(this.pointId)){ + return false; + } + if(Objects.isNull(this.auditStatus)){ + return false; + } + if(AuditStatusEnum.REJECT.equals(this.auditStatus) && StringUtils.isBlank(this.reason)){ + return false; + } + return true; + } + } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/PointLinePageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/PointLinePageRequest.java new file mode 100644 index 000000000..75d9bac3b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/PointLinePageRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: PointLinePageRequest + * @Description: + * @date 2024-04-09 10:29 + */ +@Data +public class PointLinePageRequest extends PageBasicInfo { + + @ApiModelProperty(value = "搜索关键字 线索姓名手机号") + private String keyword; + + @ApiModelProperty(value = "拓展经理", hidden = true) + private String developmentManager; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/PointPageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/PointPageRequest.java new file mode 100644 index 000000000..ba78a3aef --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/PointPageRequest.java @@ -0,0 +1,43 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +/** + * @author zhangchenbiao + * @FileName: PointPageRequest + * @Description: + * @date 2024-04-08 10:28 + */ +@Data +public class PointPageRequest extends PageBasicInfo { + + @ApiModelProperty("铺位名称或编号") + private String keyword; + + @ApiModelProperty("营运人员") + private String operateUserId; + + @ApiModelProperty("开始拓展时间 yyyy-MM-dd HH:mm:ss") + private String developmentStartTime; + + @ApiModelProperty("结束拓展时间 yyyy-MM-dd HH:mm:ss") + private String developmentEndTime; + + @ApiModelProperty(value = "拓展专员", hidden = true) + private String developmentManager; + + @NotNull + @Min(1)@Max(2) + @ApiModelProperty("必传参数:1已入库 2暂未入库") + private Integer storageStatus; + + @ApiModelProperty("1.采集中、2.已评估、3.待审核、5.已审核、6.已签约、7.已失效") + private Integer pointStatus; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/RecommendPointPageRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/RecommendPointPageRequest.java new file mode 100644 index 000000000..1da65fd2f --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/RecommendPointPageRequest.java @@ -0,0 +1,22 @@ +package com.cool.store.request; + +import com.cool.store.common.PageBasicInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: RecommendPointPageRequest + * @Description: + * @date 2024-04-08 16:43 + */ +@Data +public class RecommendPointPageRequest extends PageBasicInfo { + + @ApiModelProperty("1.采集中、2.已评估、3.待审核、5.已审核、6.已签约、7.已失效") + private Integer pointStatus; + + @ApiModelProperty(value = "拓展专员", hidden = true) + private String developmentManager; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/RecommendPointRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/RecommendPointRequest.java new file mode 100644 index 000000000..6dc28d090 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/RecommendPointRequest.java @@ -0,0 +1,46 @@ +package com.cool.store.request; + +import com.cool.store.entity.PointRecommendDO; +import com.cool.store.enums.point.PointRecommendStatus; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: RecommendPointRequest + * @Description: + * @date 2024-04-08 16:50 + */ +@Data +public class RecommendPointRequest { + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("铺位ids") + private List pointIds; + + @ApiModelProperty(value = "拓展经理", hidden = true) + private String developmentManager; + + public List convertList(){ + if(Objects.isNull(this.lineId) || CollectionUtils.isEmpty(pointIds)){ + return Lists.newArrayList(); + } + return this.pointIds.stream().map(pointId -> { + PointRecommendDO pointRecommendDO = new PointRecommendDO(); + pointRecommendDO.setLineId(this.lineId); + pointRecommendDO.setDevelopmentManager(this.developmentManager); + pointRecommendDO.setPointId(pointId); + pointRecommendDO.setStatus(PointRecommendStatus.POINT_RECOMMEND_STATUS_1.getCode()); + return pointRecommendDO; + }).collect(Collectors.toList()); + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/TurnDevelopmentManagerRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/TurnDevelopmentManagerRequest.java index 84d2749eb..ff0fa1291 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/TurnDevelopmentManagerRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/TurnDevelopmentManagerRequest.java @@ -3,6 +3,8 @@ package com.cool.store.request; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import javax.validation.constraints.NotNull; + /** * @author zhangchenbiao * @FileName: TurnDevelopmentManagerRequest @@ -12,9 +14,11 @@ import lombok.Data; @Data public class TurnDevelopmentManagerRequest { + @NotNull @ApiModelProperty("铺位id") private Long pointId; + @NotNull @ApiModelProperty("拓展经理") private String developmentManager; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/TurnLineRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/TurnLineRequest.java new file mode 100644 index 000000000..4079e2a5d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/TurnLineRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: TurnLineRequest + * @Description: + * @date 2024-04-08 17:09 + */ +@Data +public class TurnLineRequest { + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("新的选址人员") + private String developmentManager; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/UpdateWantShopNumRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/UpdateWantShopNumRequest.java new file mode 100644 index 000000000..21461900d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/UpdateWantShopNumRequest.java @@ -0,0 +1,27 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +/** + * @author zhangchenbiao + * @FileName: UpdateWantShopNumRequest + * @Description:意向开店数量 + * @date 2024-04-09 11:16 + */ +@Data +public class UpdateWantShopNumRequest { + + @NotNull + @ApiModelProperty("线索id") + private Long lineId; + + @NotNull + @Min(1) + @ApiModelProperty("意向开店数量") + private Integer wantShopNum; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/LineInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/LineInfoVO.java index ce8e4f09f..1cf9ad017 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/LineInfoVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/LineInfoVO.java @@ -99,6 +99,9 @@ public class LineInfoVO { @ApiModelProperty("流程子阶段状态") private Integer workflowSubStageStatus; + @ApiModelProperty("意向开店数量") + private Integer wantShopNum; + /** * 待选址铺位 */ diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/LinePointBaseInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/LinePointBaseInfoVO.java new file mode 100644 index 000000000..31cb5755e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/LinePointBaseInfoVO.java @@ -0,0 +1,92 @@ +package com.cool.store.vo; + +import com.cool.store.entity.HyOpenAreaInfoDO; +import com.cool.store.entity.LineInfoDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: LineUsernameAndMobileVO + * @Description: + * @date 2024-04-07 14:39 + */ +@Data +public class LinePointBaseInfoVO { + + @ApiModelProperty("线索id") + private Long lineId; + + @ApiModelProperty("用户名") + private String username; + + @ApiModelProperty("手机号") + private String mobile; + + @ApiModelProperty("区域名称") + private String areaName; + + @ApiModelProperty("区域路径") + private String areaPath; + + @ApiModelProperty("用户标签") + private List userPortraitList; + + @ApiModelProperty("招商经理") + private String investmentManagerUsername; + + @ApiModelProperty("已推门店") + private Integer recommendShopNum; + + @ApiModelProperty("已选门店") + private Integer selectedShopNum; + + @ApiModelProperty("意向开店数量") + private Integer wantShopNum; + + public LinePointBaseInfoVO(Long lineId, String username, String mobile) { + this.lineId = lineId; + this.username = username; + this.mobile = mobile; + } + + public static List convertList(List lineList, Map userNameMap, Map userPortraitMap, Map cityMap, Map recommendShopNumMap, Map selectedShopNumMap){ + List resultList = new ArrayList<>(); + for (LineInfoDO lineInfo : lineList) { + LinePointBaseInfoVO linePointBaseInfo = new LinePointBaseInfoVO(lineInfo.getId(), lineInfo.getUsername(), lineInfo.getMobile()); + linePointBaseInfo.setWantShopNum(lineInfo.getWantShopNum()); + String username = userNameMap.get(lineInfo.getInvestmentManager()); + linePointBaseInfo.setInvestmentManagerUsername(username); + HyOpenAreaInfoDO areaInfo = cityMap.get(lineInfo.getWantShopAreaId()); + if(Objects.nonNull(areaInfo)){ + linePointBaseInfo.setAreaName(areaInfo.getAreaName()); + linePointBaseInfo.setAreaPath(areaInfo.getAreaPath().replace("/", "").trim()); + } + linePointBaseInfo.setRecommendShopNum(recommendShopNumMap.get(lineInfo.getId())); + linePointBaseInfo.setSelectedShopNum(selectedShopNumMap.get(lineInfo.getId())); + if(StringUtils.isNotBlank(lineInfo.getUserPortrait())){ + List userPortraitList = new ArrayList<>(); + String[] parts = lineInfo.getUserPortrait().split(","); + for (String part : parts) { + String trimmedPart = part.trim(); + if (StringUtils.isNotBlank(trimmedPart)) { + String s = userPortraitMap.get(Long.valueOf(part)); + if(StringUtils.isNotBlank(s)){ + userPortraitList.add(s); + } + } + } + linePointBaseInfo.setUserPortraitList(userPortraitList); + } + resultList.add(linePointBaseInfo); + } + return resultList; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/LineUsernameAndMobileVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/LineUsernameAndMobileVO.java deleted file mode 100644 index 15d4457be..000000000 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/LineUsernameAndMobileVO.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.cool.store.vo; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author zhangchenbiao - * @FileName: LineUsernameAndMobileVO - * @Description: - * @date 2024-04-07 14:39 - */ -@Data -public class LineUsernameAndMobileVO { - - @ApiModelProperty("线索id") - private Long lineId; - - @ApiModelProperty("用户名") - private String username; - - @ApiModelProperty("手机号") - private String mobile; - -} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointAuditRecordVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointAuditRecordVO.java new file mode 100644 index 000000000..6318470d5 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointAuditRecordVO.java @@ -0,0 +1,83 @@ +package com.cool.store.vo.point; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; +import com.alibaba.fastjson.JSONObject; +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.entity.PointAuditRecordDO; +import com.cool.store.utils.StringUtil; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.*; + +/** + * @author zhangchenbiao + * @FileName: AuditRecordVO + * @Description: + * @date 2024-04-08 11:36 + */ +@Data +public class PointAuditRecordVO { + + @ApiModelProperty("实际处理人") + private UserBaseInfoVO handlerUser; + + @ApiModelProperty("处理人列表") + private List handlerUserList; + + @ApiModelProperty("处理时间") + private Date handlerTime; + + @ApiModelProperty("原因") + private String reason; + + @ApiModelProperty("0待处理,1通过,2拒绝") + private String auditStatus; + + @ApiModelProperty("signTime") + private Date signTime; + + @ApiModelProperty("签到地址") + private String signAddress; + + @ApiModelProperty("图片") + private String pictureUrl; + + @ApiModelProperty("是否超时") + private Boolean isTimeout; + + public static List convert(List auditRecordList, Map userMap) { + List resultList = new ArrayList<>(); + for (PointAuditRecordDO pointAuditRecord : auditRecordList) { + PointAuditRecordVO pointAuditRecordVO = new PointAuditRecordVO(); + pointAuditRecordVO.setHandlerTime(pointAuditRecord.getFinishTaskTime()); + pointAuditRecordVO.setReason(pointAuditRecord.getReason()); + pointAuditRecordVO.setAuditStatus(pointAuditRecord.getAuditStatus().toString()); + pointAuditRecordVO.setSignTime(pointAuditRecord.getSignTime()); + pointAuditRecordVO.setSignAddress(pointAuditRecord.getSignAddress()); + pointAuditRecordVO.setPictureUrl(pointAuditRecord.getPictureUrl()); + pointAuditRecordVO.setIsTimeout(Boolean.FALSE); + if(Objects.nonNull(pointAuditRecord.getReceiveTaskTime())){ + Date time = Objects.isNull(pointAuditRecord.getFinishTaskTime()) ? new Date() : pointAuditRecord.getFinishTaskTime(); + LocalDateTime localDateTime = LocalDateTime.ofInstant(pointAuditRecord.getReceiveTaskTime().toInstant(), ZoneId.systemDefault()); + LocalDateTime localDateTime1 = LocalDateTime.ofInstant(time.toInstant(), ZoneId.systemDefault()); + Duration duration = Duration.between(localDateTime, localDateTime1); + long hours = duration.toHours(); + pointAuditRecordVO.setIsTimeout(hours >= 48); + } + pointAuditRecordVO.setHandlerUser(UserBaseInfoVO.convert(pointAuditRecord.getHandlerUserId(), userMap)); + List handlerUserIds = JSONObject.parseArray(pointAuditRecord.getHandlerUserIds(), String.class); + pointAuditRecordVO.setHandlerUserList(UserBaseInfoVO.convert(handlerUserIds, userMap)); + resultList.add(pointAuditRecordVO); + } + return resultList; + } + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointHomePageDataVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointHomePageDataVO.java new file mode 100644 index 000000000..20958f069 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointHomePageDataVO.java @@ -0,0 +1,32 @@ +package com.cool.store.vo.point; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author zhangchenbiao + * @FileName: PointHomePageDataVO + * @Description:铺位首页数据 + * @date 2024-04-07 16:57 + */ +@Data +public class PointHomePageDataVO { + + @ApiModelProperty("我的铺位") + private Integer myPoint; + + @ApiModelProperty("铺位池") + private Integer poolPoint; + + @ApiModelProperty("采集中") + private Integer collectPoint; + + @ApiModelProperty("已评估") + private Integer evaluatePoint; + + @ApiModelProperty("待审核铺位") + private Integer waitAuditPoint; + + @ApiModelProperty("已签约") + private Integer signPoint; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointPageVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointPageVO.java new file mode 100644 index 000000000..2ad4dafe6 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointPageVO.java @@ -0,0 +1,76 @@ +package com.cool.store.vo.point; + +import com.cool.store.entity.PointDetailInfoDO; +import com.cool.store.entity.PointInfoDO; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Data +public class PointPageVO { + + @ApiModelProperty("店铺id") + private Long pointId; + + @ApiModelProperty("铺位名称") + private String pointName; + + @ApiModelProperty("铺位编号") + private String pointCode; + + @ApiModelProperty("所属大区") + private Long regionId; + + @ApiModelProperty("所属站区") + private String regionNodeName; + + @ApiModelProperty("铺位状态 1.采集中、2.已评估、3.待审核、4.待审核可推荐、5.已审核、6.已签约、7.已失效") + private Integer pointStatus; + + @ApiModelProperty("铺位得分") + private Integer pointScore; + + @ApiModelProperty("铺位面积") + private String pointArea; + + @ApiModelProperty("拓展专员") + private String developmentManagerUsername; + + @ApiModelProperty("拓展时间") + private Date developmentTime; + + @ApiModelProperty("选择状态0.未选择, 1.已被选择") + private Integer selectStatus; + + + + public static List convertVO(List pointList, Map usernameMap, Map regionNameMap) { + if(CollectionUtils.isEmpty(pointList)){ + return Lists.newArrayList(); + } + List resultList = new ArrayList<>(); + for (PointInfoDO pointInfo : pointList) { + PointPageVO pointPageVO = new PointPageVO(); + pointPageVO.setPointId(pointInfo.getId()); + pointPageVO.setPointName(pointInfo.getPointName()); + pointPageVO.setPointCode(pointInfo.getPointCode()); + pointPageVO.setRegionId(pointInfo.getRegionId()); + pointPageVO.setRegionNodeName(regionNameMap.get(pointInfo.getRegionId())); + pointPageVO.setPointStatus(pointInfo.getPointStatus()); + pointPageVO.setPointScore(pointInfo.getPointScore()); + pointPageVO.setPointArea(pointInfo.getPointArea()); + pointPageVO.setDevelopmentManagerUsername(usernameMap.get(pointInfo.getDevelopmentManager())); + pointPageVO.setDevelopmentTime(pointInfo.getDevelopmentTime()); + pointPageVO.setSelectStatus(pointInfo.getSelectStatus()); + resultList.add(pointPageVO); + } + return resultList; + } + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointRecommendPageVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointRecommendPageVO.java new file mode 100644 index 000000000..1658accef --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/PointRecommendPageVO.java @@ -0,0 +1,84 @@ +package com.cool.store.vo.point; + +import com.cool.store.entity.PointInfoDO; +import com.cool.store.entity.PointRecommendDO; +import com.google.common.collect.Lists; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author zhangchenbiao + * @FileName: PointRecommendPageVO + * @Description: + * @date 2024-04-08 16:11 + */ +@Data +public class PointRecommendPageVO { + + @ApiModelProperty("店铺id") + private Long pointId; + + @ApiModelProperty("铺位名称") + private String pointName; + + @ApiModelProperty("铺位编号") + private String pointCode; + + @ApiModelProperty("所属大区") + private Long regionId; + + @ApiModelProperty("所属站区") + private String regionNodeName; + + @ApiModelProperty("铺位状态 1.采集中、2.已评估、3.待审核、4.待审核可推荐、5.已审核、6.已签约、7.已失效") + private Integer pointStatus; + + @ApiModelProperty("铺位得分") + private Integer pointScore; + + @ApiModelProperty("铺位面积") + private String pointArea; + + @ApiModelProperty("拓展专员") + private String developmentManagerUsername; + + @ApiModelProperty("拓展时间") + private Date developmentTime; + + @ApiModelProperty("选择状态1.待选择 2.已选择 3.已被他人选择 4.已签约 5.已拒绝 6.已失效") + private Integer recommendStatus; + + + public static List convertVO(List recommendList, List pointList, Map usernameMap, Map regionNameMap) { + if(CollectionUtils.isEmpty(recommendList) || CollectionUtils.isEmpty(pointList)){ + return Lists.newArrayList(); + } + List resultList = new ArrayList<>(); + Map pointMap = pointList.stream().collect(Collectors.toMap(k -> k.getId(), Function.identity())); + for (PointRecommendDO pointRecommend : recommendList) { + PointRecommendPageVO recommend = new PointRecommendPageVO(); + recommend.setRecommendStatus(pointRecommend.getStatus()); + PointInfoDO pointInfo = pointMap.get(pointRecommend.getPointId()); + if(Objects.nonNull(pointInfo)){ + recommend.setPointId(pointInfo.getId()); + recommend.setPointName(pointInfo.getPointName()); + recommend.setPointCode(pointInfo.getPointCode()); + recommend.setRegionId(pointInfo.getRegionId()); + recommend.setRegionNodeName(regionNameMap.get(pointInfo.getRegionId())); + recommend.setPointStatus(pointInfo.getPointStatus()); + recommend.setPointScore(pointInfo.getPointScore()); + recommend.setPointArea(pointInfo.getPointArea()); + recommend.setDevelopmentManagerUsername(usernameMap.get(pointInfo.getDevelopmentManager())); + recommend.setDevelopmentTime(pointInfo.getDevelopmentTime()); + } + resultList.add(recommend); + } + return resultList; + } + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/point/UserBaseInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/UserBaseInfoVO.java new file mode 100644 index 000000000..61e9c44df --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/point/UserBaseInfoVO.java @@ -0,0 +1,65 @@ +package com.cool.store.vo.point; + +import cn.hutool.core.map.MapUtil; +import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; +import com.cool.store.entity.EnterpriseUserDO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * @author zhangchenbiao + * @FileName: UserBaseInfoVO + * @Description: + * @date 2024-04-08 13:42 + */ +@Data +public class UserBaseInfoVO { + + @ApiModelProperty("用户id") + private String userId; + + @ApiModelProperty("姓名") + private String username; + + @ApiModelProperty("头像") + private String avatar; + + public UserBaseInfoVO(String userId, String username, String avatar) { + this.userId = userId; + this.username = username; + this.avatar = avatar; + } + + public static UserBaseInfoVO convert(String userId, Map userMap) { + if(StringUtils.isBlank(userId) || MapUtil.isEmpty(userMap)){ + return null; + } + EnterpriseUserDO user = userMap.get(userId); + if(Objects.isNull(user)){ + return null; + } + return new UserBaseInfoVO(user.getUserId(), user.getName(), user.getAvatar()); + } + + public static List convert(List userIdList, Map userMap) { + if(CollectionUtils.isEmpty(userIdList) || MapUtil.isEmpty(userMap)){ + return null; + } + List resultList = new ArrayList<>(); + for (String userId : userIdList) { + EnterpriseUserDO user = userMap.get(userId); + if(Objects.isNull(user)){ + continue; + } + resultList.add(new UserBaseInfoVO(user.getUserId(), user.getName(), user.getAvatar())); + } + return resultList; + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/ShopPointService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/ShopPointService.java index ced9396ec..1fa98577f 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/ShopPointService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/ShopPointService.java @@ -1,9 +1,9 @@ package com.cool.store.service; import com.cool.store.request.*; -import com.cool.store.vo.LineUsernameAndMobileVO; -import com.cool.store.vo.point.AuditSettingVO; -import com.cool.store.vo.point.PointDetailVO; +import com.cool.store.vo.LinePointBaseInfoVO; +import com.cool.store.vo.point.*; +import com.github.pagehelper.PageInfo; import java.util.List; @@ -118,8 +118,64 @@ public interface ShopPointService { /** * 获取我负责的线索列表 - * @param developmentManager + * @param request * @return */ - List getLineList(String developmentManager); + PageInfo getLinePage(PointLinePageRequest request); + + /** + * 获取我的数据 + * @param userId + * @return + */ + PointHomePageDataVO getMyPointData(String userId); + + /** + * 获取我的铺位 + * @param request + * @return + */ + PageInfo getMyPointPage(PointPageRequest request); + + /** + * 获取审批记录 + * @param pointId + * @return + */ + List getPointAllAuditRecord(Long pointId); + + /** + * 获取推荐铺位列表 + * @param lineId + * @return + */ + List getLineRecommendPointList(Long lineId); + + /** + * 获取我的可推荐铺位列表 + * @param request + * @return + */ + PageInfo getRecommendPointList(RecommendPointPageRequest request); + + /** + * 推送铺位 + * @param request + * @return + */ + Integer recommendPoint(RecommendPointRequest request); + + /** + * 选址人员转让加盟商 + * @param request + * @return + */ + Integer turnLine(TurnLineRequest request); + + /** + * 修改意向开店数量 + * @param request + * @return + */ + Integer updateWantShopNum(UpdateWantShopNumRequest request); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonService.java index 1d6354ec3..fc38a0137 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonService.java @@ -62,17 +62,6 @@ public class CommonService { return (LineFlowService)applicationContext.getBean(workflowSubStageEnum.getClazz()); } - /** - * 获取用户id - * @param areaId 城市id - * @param userRole - * @return - */ - public String getUserIdByAreaAndUserRole(Long areaId, UserRoleEnum userRole){ - //随机一个 - return enterpriseUserDAO.getUserInfoByUserIds(Arrays.asList("02012524481349484395", "123836131931284423")).stream().findAny().get().getUserId(); - } - public void sendMessage(List userIds, Long lineId, MessageEnum message, String... param){ if(CollectionUtils.isEmpty(userIds)){ return; diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopPointServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopPointServiceImpl.java index 8f9bc2d1d..e86e6d75a 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopPointServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ShopPointServiceImpl.java @@ -3,23 +3,29 @@ package com.cool.store.service.impl; import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; import com.cool.store.dao.*; +import com.cool.store.dto.interview.LineInterviewPageDTO; import com.cool.store.dto.point.AuditNodeDTO; import com.cool.store.entity.*; import com.cool.store.enums.AuditStatusEnum; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.enums.NodeNoEnum; +import com.cool.store.enums.WorkflowStageEnum; import com.cool.store.enums.point.PointRecommendStatus; import com.cool.store.enums.point.PointStatusEnum; import com.cool.store.enums.point.SelectStatusEnum; import com.cool.store.exception.ServiceException; import com.cool.store.request.*; +import com.cool.store.service.LabelService; +import com.cool.store.service.RegionService; import com.cool.store.service.ShopPointService; import com.cool.store.service.UserAuthMappingService; import com.cool.store.utils.RedisUtilPool; import com.cool.store.utils.poi.StringUtils; -import com.cool.store.vo.LineUsernameAndMobileVO; -import com.cool.store.vo.point.AuditSettingVO; -import com.cool.store.vo.point.PointDetailVO; +import com.cool.store.vo.LinePointBaseInfoVO; +import com.cool.store.vo.point.*; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageInfo; +import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; @@ -61,10 +67,19 @@ public class ShopPointServiceImpl implements ShopPointService { private PointAuditRecordDAO pointAuditRecordDAO; @Resource private PointTodoInfoDAO pointTodoInfoDAO; + @Resource + private EnterpriseUserDAO enterpriseUserDAO; + @Resource + private RegionService regionService; + @Resource + private LabelService labelService; + @Resource + private HyOpenAreaInfoDAO hyOpenAreaInfoDAO; private static final String AUDIT_SETTING_KEY = "audit_setting_key"; @Override + @Transactional(rollbackFor = Exception.class) public Long addPointDetailInfo(AddPointDetailRequest shopPointDetailRequest, String userId) { PointInfoDO shopPointInfo = AddPointDetailRequest.convertPointDO(shopPointDetailRequest); shopPointInfo.setPointCode(generateCode()); @@ -92,6 +107,7 @@ public class ShopPointServiceImpl implements ShopPointService { } @Override + @Transactional(rollbackFor = Exception.class) public Integer updatePointDetailInfo(UpdatePointDetailRequest shopPointDetailRequest) { PointInfoDO shopPointInfo = UpdatePointDetailRequest.convertPointDO(shopPointDetailRequest); PointDetailInfoDO shopPoint = UpdatePointDetailRequest.convertDO(shopPointDetailRequest); @@ -137,6 +153,7 @@ public class ShopPointServiceImpl implements ShopPointService { } @Override + @Transactional(rollbackFor = Exception.class) public Integer pointUnbind(Long pointId) { PointInfoDO pointInfo = pointInfoDAO.getPointInfoById(pointId); if(Objects.isNull(pointInfo)){ @@ -189,6 +206,7 @@ public class ShopPointServiceImpl implements ShopPointService { updatePoint.setId(pointId); updatePoint.setPointStatus(PointStatusEnum.POINT_STATUS_3.getCode()); updatePoint.setSubmitAuditCount(submitAuditCount); + updatePoint.setOperateUserId(request.getOperateUserId()); PointDetailInfoDO updatePointDetail = new PointDetailInfoDO(); updatePointDetail.setId(pointDetailInfo.getId()); updatePointDetail.setDevelopmentManagerSign(request.getDevelopmentManagerSign()); @@ -297,6 +315,9 @@ public class ShopPointServiceImpl implements ShopPointService { @Override @Transactional(rollbackFor = Exception.class) public Integer audit(String userId, PointAuditRequest request) { + if(!request.check()){ + throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR); + } Long pointId = request.getPointId(); PointTodoInfoDO pointTodo = pointTodoInfoDAO.getPointToDoByUserIdAndPointId(userId, pointId); if(Objects.isNull(pointTodo)){ @@ -357,9 +378,123 @@ public class ShopPointServiceImpl implements ShopPointService { } @Override - public List getLineList(String developmentManager) { - lineInfoDAO.getLineListByDevelopmentManager(developmentManager); - return null; + public PageInfo getLinePage(PointLinePageRequest request) { + Page lineList = lineInfoDAO.getLinePageByDevelopmentManager(request); + List userPortraitList = lineList.stream().filter(x -> StringUtils.isNotEmpty(x.getUserPortrait() )).map(LineInfoDO::getUserPortrait).collect(Collectors.toList()); + List investmentManagerUserIds = lineList.stream().filter(x -> StringUtils.isNotEmpty(x.getInvestmentManager() )).map(LineInfoDO::getInvestmentManager).collect(Collectors.toList()); + List lineIds = lineList.stream().map(LineInfoDO::getId).collect(Collectors.toList()); + List wantShopAreaIds = lineList.stream().map(LineInfoDO::getWantShopAreaId).collect(Collectors.toList()); + Map recommendShopNumMap = pointRecommendDAO.getPushShopNumMap(lineIds); + Map cityMap = hyOpenAreaInfoDAO.getCityMap(wantShopAreaIds); + Map selectedShopNumMap = pointInfoDAO.getSelectedShopNumMap(lineIds); + Map userNameMap = enterpriseUserDAO.getUserNameMap(investmentManagerUserIds); + Map userPortraitMap = labelService.getUserPortraitMap(userPortraitList); + List resultList = LinePointBaseInfoVO.convertList(lineList, userNameMap, userPortraitMap, cityMap, recommendShopNumMap, selectedShopNumMap); + PageInfo resultPage = new PageInfo(lineList); + resultPage.setList(resultList); + return resultPage; + } + + @Override + public PointHomePageDataVO getMyPointData(String userId) { + return pointInfoDAO.getMyPointData(userId); + } + + @Override + public PageInfo getMyPointPage(PointPageRequest request) { + if(Objects.nonNull(request.getPointStatus()) && PointStatusEnum.POINT_STATUS_3.getCode().equals(request.getPointStatus())){ + request.setPointStatus(CommonConstants.ONE == request.getStorageStatus() ? PointStatusEnum.POINT_STATUS_4.getCode() : PointStatusEnum.POINT_STATUS_3.getCode()); + } + List resultList = new ArrayList(); + Page pointPage = pointInfoDAO.getMyPointPage(request); + if(Objects.nonNull(pointPage) && CollectionUtils.isNotEmpty(pointPage.getResult())){ + List regionIds = pointPage.stream().map(PointInfoDO::getRegionId).distinct().collect(Collectors.toList()); + List developmentManagers = pointPage.stream().map(PointInfoDO::getDevelopmentManager).distinct().collect(Collectors.toList()); + Map userNameMap = enterpriseUserDAO.getUserNameMap(developmentManagers); + Map regionNameMap = new HashMap<>(); + resultList = PointPageVO.convertVO(pointPage.getResult(), userNameMap, regionNameMap); + } + PageInfo resultPage = new PageInfo(pointPage); + resultPage.setList(resultList); + return resultPage; + } + + @Override + public List getPointAllAuditRecord(Long pointId) { + List auditRecordList = pointAuditRecordDAO.getPointAllAuditRecord(pointId); + if(CollectionUtils.isEmpty(auditRecordList)){ + return Lists.newArrayList(); + } + List userIds = auditRecordList.stream().map(o->JSONObject.parseArray(o.getHandlerUserIds(), String.class)).flatMap(Collection::stream).distinct().collect(Collectors.toList()); + Map userMap = enterpriseUserDAO.getUserInfoMap(userIds); + return PointAuditRecordVO.convert(auditRecordList, userMap); + } + + @Override + public List getLineRecommendPointList(Long lineId) { + List recommendPointList = pointRecommendDAO.getRecommendPointList(lineId); + List pointIds = recommendPointList.stream().map(PointRecommendDO::getPointId).distinct().collect(Collectors.toList()); + List pointList = pointInfoDAO.getPointListByIds(pointIds); + List regionIds = pointList.stream().map(PointInfoDO::getRegionId).distinct().collect(Collectors.toList()); + List developmentManagers = pointList.stream().map(PointInfoDO::getDevelopmentManager).distinct().collect(Collectors.toList()); + Map userNameMap = enterpriseUserDAO.getUserNameMap(developmentManagers); + Map regionNameMap = new HashMap<>(); + return PointRecommendPageVO.convertVO(recommendPointList, pointList, userNameMap, regionNameMap); + } + + @Override + public PageInfo getRecommendPointList(RecommendPointPageRequest request) { + if(Objects.nonNull(request.getPointStatus()) && PointStatusEnum.POINT_STATUS_3.getCode().equals(request.getPointStatus())){ + request.setPointStatus(PointStatusEnum.POINT_STATUS_4.getCode()); + } + List resultList = new ArrayList(); + Page pointPage = pointInfoDAO.getRecommendPointList(request); + if(Objects.nonNull(pointPage) && CollectionUtils.isNotEmpty(pointPage.getResult())){ + List regionIds = pointPage.stream().map(PointInfoDO::getRegionId).distinct().collect(Collectors.toList()); + List developmentManagers = pointPage.stream().map(PointInfoDO::getDevelopmentManager).distinct().collect(Collectors.toList()); + Map userNameMap = enterpriseUserDAO.getUserNameMap(developmentManagers); + Map regionNameMap = new HashMap<>(); + resultList = PointPageVO.convertVO(pointPage.getResult(), userNameMap, regionNameMap); + } + PageInfo resultPage = new PageInfo(pointPage); + resultPage.setList(resultList); + return resultPage; + } + + @Override + public Integer recommendPoint(RecommendPointRequest request) { + List recommendList = request.convertList(); + return pointRecommendDAO.addRecommendPoint(recommendList); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer turnLine(TurnLineRequest request) { + Long lineId = request.getLineId(); + //更改线索中的拓展经理 + LineInfoDO updateLineInfo = new LineInfoDO(); + updateLineInfo.setId(lineId); + updateLineInfo.setDevelopmentManager(request.getDevelopmentManager()); + lineInfoDAO.updateLineInfo(updateLineInfo); + //更新已被选择的铺位的拓展经理 + pointInfoDAO.updateSelectedDevelopmentManager(lineId, request.getDevelopmentManager()); + //删除未选择的推荐铺位 + return pointRecommendDAO.deleteUnselectedRecommendPointByLineId(lineId); + } + + @Override + public Integer updateWantShopNum(UpdateWantShopNumRequest request) { + LineInfoDO lineInfo = lineInfoDAO.getLineInfo(request.getLineId()); + if(Objects.isNull(lineInfo)){ + throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); + } + if(!WorkflowStageEnum.INTENT.getCode().equals(lineInfo.getWorkflowStage())){ + throw new ServiceException(ErrorCodeEnum.NOT_ALLOW_MODIFY_WANT_SHOP_NUM); + } + LineInfoDO updateLine = new LineInfoDO(); + updateLine.setId(request.getLineId()); + updateLine.setWantShopNum(request.getWantShopNum()); + return lineInfoDAO.updateLineInfo(updateLine); } public List dealAuditNode(AuditSettingVO auditSetting, PointInfoDO pointInfo) { diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ShopPointController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ShopPointController.java index aefaf7b3c..9ddc84098 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ShopPointController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ShopPointController.java @@ -4,9 +4,9 @@ import com.cool.store.context.CurrentUserHolder; import com.cool.store.request.*; import com.cool.store.response.ResponseResult; import com.cool.store.service.ShopPointService; -import com.cool.store.vo.LineUsernameAndMobileVO; -import com.cool.store.vo.point.AuditSettingVO; -import com.cool.store.vo.point.PointDetailVO; +import com.cool.store.vo.LinePointBaseInfoVO; +import com.cool.store.vo.point.*; +import com.github.pagehelper.PageInfo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.validation.annotation.Validated; @@ -101,7 +101,7 @@ public class ShopPointController { return ResponseResult.success(shopPointService.operationUserAudit(CurrentUserHolder.getUserId(), request)); } - @ApiOperation("审批") + @ApiOperation("审批(排除第二级审批)") @PostMapping("/audit") public ResponseResult audit(@RequestBody PointAuditRequest request) { return ResponseResult.success(shopPointService.audit(CurrentUserHolder.getUserId(), request)); @@ -109,14 +109,66 @@ public class ShopPointController { @ApiOperation("铺位转让") @PostMapping("/turnDevelopmentManager") - public ResponseResult turnDevelopmentManager(@RequestBody TurnDevelopmentManagerRequest request) { + public ResponseResult turnDevelopmentManager(@RequestBody @Validated TurnDevelopmentManagerRequest request) { return ResponseResult.success(shopPointService.turnDevelopmentManager(request)); } @ApiOperation("获取我负责的加盟商列表") - @GetMapping("/getLineList") - public ResponseResult> getLineList() { - return ResponseResult.success(shopPointService.getLineList(CurrentUserHolder.getUserId())); + @PostMapping("/getLinePage") + public ResponseResult> getLinePage(@RequestBody PointLinePageRequest request) { + request.setDevelopmentManager(CurrentUserHolder.getUserId()); + return ResponseResult.success(shopPointService.getLinePage(request)); + } + + @ApiOperation("首页我的数据") + @GetMapping("/getMyData") + public ResponseResult getMyPointData() { + return ResponseResult.success(shopPointService.getMyPointData(CurrentUserHolder.getUserId())); + } + + @ApiOperation("我的铺位-已入库/暂未入库") + @PostMapping("/getMyPointPage") + public ResponseResult> getMyPointPage(@RequestBody @Validated PointPageRequest request) { + request.setDevelopmentManager(CurrentUserHolder.getUserId()); + return ResponseResult.success(shopPointService.getMyPointPage(request)); + } + + @ApiOperation("获取单个铺位审批记录") + @GetMapping("/getAuditRecord") + public ResponseResult> getPointAllAuditRecord(@RequestParam("pointId")Long pointId) { + return ResponseResult.success(shopPointService.getPointAllAuditRecord(pointId)); + } + + @ApiOperation("获取加盟商的推荐铺位列表") + @GetMapping("/getLineRecommendPointList") + public ResponseResult> getLineRecommendPointList(@RequestParam("lineId")Long lineId) { + return ResponseResult.success(shopPointService.getLineRecommendPointList(lineId)); + } + + @ApiOperation("选址人员获取可推荐铺位列表") + @PostMapping("/getRecommendPointList") + public ResponseResult> getRecommendPointList(@RequestBody @Validated RecommendPointPageRequest request) { + request.setDevelopmentManager(CurrentUserHolder.getUserId()); + return ResponseResult.success(shopPointService.getRecommendPointList(request)); + } + + @ApiOperation("铺位推送") + @PostMapping("/recommendPoint") + public ResponseResult recommendPoint(@RequestBody @Validated RecommendPointRequest request) { + request.setDevelopmentManager(CurrentUserHolder.getUserId()); + return ResponseResult.success(shopPointService.recommendPoint(request)); + } + + @ApiOperation("选址人员转让加盟商") + @PostMapping("/turnLine") + public ResponseResult turnLine(@RequestBody @Validated TurnLineRequest request) { + return ResponseResult.success(shopPointService.turnLine(request)); + } + + @ApiOperation("修改意向开店数量") + @PostMapping("/updateWantShopNum") + public ResponseResult updateWantShopNum(@RequestBody @Validated UpdateWantShopNumRequest request) { + return ResponseResult.success(shopPointService.updateWantShopNum(request)); }