会销组+会销

This commit is contained in:
苏竹红
2023-12-06 18:21:19 +08:00
parent 4ce25cdc5b
commit 8d096b4f27
31 changed files with 1169 additions and 20 deletions

View File

@@ -81,6 +81,7 @@ public class CommonConstants {
public static final long ZERO_LONG = 0L; public static final long ZERO_LONG = 0L;
public static final int MINUS_ONE = -1;
public static final int ZERO = 0; public static final int ZERO = 0;
public static final int ONE = 1; public static final int ONE = 1;
public static final int TWO = 2; public static final int TWO = 2;
@@ -105,6 +106,8 @@ public class CommonConstants {
public static final int ONE_THOUSAND = 1000; public static final int ONE_THOUSAND = 1000;
public static final int FIFTY_FIVE = 55; public static final int FIFTY_FIVE = 55;
public static final int SIXTY_FIVE = 65; public static final int SIXTY_FIVE = 65;
public static final int MIN_CODE = 10000000;
public static final int MAX_CODE = 89999999;
public static final String ONE_STR = "1"; public static final String ONE_STR = "1";
@@ -121,6 +124,12 @@ public class CommonConstants {
public static final String FOLLOW = "follow"; public static final String FOLLOW = "follow";
public static final String PENDING = "pending"; public static final String PENDING = "pending";
public static final String CLOSE = "close";
public static final String OPEN = "open";
public static final String ALLOCATION = "allocation"; public static final String ALLOCATION = "allocation";
public static final String TRANSFER = "transfer"; public static final String TRANSFER = "transfer";

View File

@@ -119,6 +119,13 @@ public enum ErrorCodeEnum {
LABEL_GROUP_IN_USE(120001, "该标签组下存在标签不可删除请确保该标签组下标签数量为0后再进行删除", null), LABEL_GROUP_IN_USE(120001, "该标签组下存在标签不可删除请确保该标签组下标签数量为0后再进行删除", null),
LABEL_GROUP_EXIST(120002, "该标签组已存在,请重新输入", null), LABEL_GROUP_EXIST(120002, "该标签组已存在,请重新输入", null),
LABEL_EXIST(120003, "该标签已存在,请重新输入", null), LABEL_EXIST(120003, "该标签已存在,请重新输入", null),
//会销相关异常 106*** 106开头
EXHIBITION_GROUP_NOT_NULL(106001, "会销组中必须添加至少一个会销", null),
EXHIBITION_GROUP_NOT_EXIST(106002, "会销组不存在或被删除", null),
EXHIBITION_NOT_EXIST(106003, "会销不存在或被删除", null),
; ;

View File

@@ -17,6 +17,7 @@ public enum FeiShuNoticeMsgEnum {
INTENTION_APPLY("加盟意向申请", "您有一个【加盟意向申请】待审核,申请人 {0} 手机号 {1} 于 {2} 提交加盟意向申请,请及时处理", "img_v2_c909097d-67d1-4c11-a911-a2584b67ca6g", "1567d83b966f2d312fd7fcd2e72dbce9"), INTENTION_APPLY("加盟意向申请", "您有一个【加盟意向申请】待审核,申请人 {0} 手机号 {1} 于 {2} 提交加盟意向申请,请及时处理", "img_v2_c909097d-67d1-4c11-a911-a2584b67ca6g", "1567d83b966f2d312fd7fcd2e72dbce9"),
FOLLOW_TASK("线索跟进任务", "{0}", "img_v2_1960b7ef-8c4e-4c3d-8b67-3d918a85578g", "1567d83b966f2d312fd7fcd2e72dbce9"), FOLLOW_TASK("线索跟进任务", "{0}", "img_v2_1960b7ef-8c4e-4c3d-8b67-3d918a85578g", "1567d83b966f2d312fd7fcd2e72dbce9"),
INTERVIEW_APPOINTMENT("面试预约申请", "您有一个【面试预约申请】待处理,预约人 {0} 手机号 {1} ,预约面试时间 {2} ","img_v2_107bb06b-2a7a-43e1-a6ae-e5d2f2dae17g", "1567d83b966f2d312fd7fcd2e72dbce9"), INTERVIEW_APPOINTMENT("面试预约申请", "您有一个【面试预约申请】待处理,预约人 {0} 手机号 {1} ,预约面试时间 {2} ","img_v2_107bb06b-2a7a-43e1-a6ae-e5d2f2dae17g", "1567d83b966f2d312fd7fcd2e72dbce9"),
EXHIBITION_COLLABORATOR("会销协作通知", "{0} 已将您添加为【{1}】的会销协作人,日期为 {2},地点为“{3}” ","img_v2_107bb06b-2a7a-43e1-a6ae-e5d2f2dae17g", "1567d83b966f2d312fd7fcd2e72dbce9"),
; ;
private String title; private String title;

View File

@@ -18,6 +18,7 @@ public enum SMSMsgEnum {
SMS_INVATE("短信邀约", "【沪上阿姨】感谢您对沪上阿姨品牌的关注与支持,您可通过链接登记加盟申请信息,我们的客户经理将在第一时间与您联系。{$var}", "d7772108bb7d9767494818bcd39d2ec1"), SMS_INVATE("短信邀约", "【沪上阿姨】感谢您对沪上阿姨品牌的关注与支持,您可通过链接登记加盟申请信息,我们的客户经理将在第一时间与您联系。{$var}", "d7772108bb7d9767494818bcd39d2ec1"),
EXHIBITION_INFO_UPDATE("展会信息变更","【沪上阿姨】亲爱的伙伴,您好!您近期报名的加盟推介会信息有更新。名称为{$var},日期为{$var},地址为{$var}。感谢您的关注,期待早日与您合作!{$var}","d7772108bb7d9767494818bcd39d2ec1")
; ;
private String title; private String title;

View File

@@ -79,8 +79,8 @@ public class CoolDateUtils {
} }
public static final Date parseDate(String dateString ){ public static final Date parseDate(String dateString ,String format){
DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT_SEC); DateFormat dateFormat = new SimpleDateFormat(format);
Date date = null; Date date = null;
try { try {
date = dateFormat.parse(dateString); date = dateFormat.parse(dateString);
@@ -91,4 +91,5 @@ public class CoolDateUtils {
} }
} }

View File

@@ -12,10 +12,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.HashMap; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -52,6 +49,15 @@ public class EnterpriseUserDAO {
return feishuUserIdsByUserIds.stream().collect(Collectors.toMap(EnterpriseUserDO::getUserId, EnterpriseUserDO::getFeishuUserId)); return feishuUserIdsByUserIds.stream().collect(Collectors.toMap(EnterpriseUserDO::getUserId, EnterpriseUserDO::getFeishuUserId));
} }
public List<String> getFeishuUserIdListByUserIds(List<String> userIdList){
if(CollectionUtils.isEmpty(userIdList)){
return new ArrayList<>(0);
}
List<EnterpriseUserDO> feishuUserIdsByUserIds = enterpriseUserMapper.getFeishuUserIdsByUserIds(userIdList);
return feishuUserIdsByUserIds.stream().map(EnterpriseUserDO::getFeishuUserId).collect(Collectors.toList());
}
public void batchInsertOrUpdate(List<EnterpriseUserDO> insertOrUpdateList) { public void batchInsertOrUpdate(List<EnterpriseUserDO> insertOrUpdateList) {
if(CollectionUtils.isEmpty(insertOrUpdateList)){ if(CollectionUtils.isEmpty(insertOrUpdateList)){
return; return;

View File

@@ -1,10 +1,21 @@
package com.cool.store.dao; package com.cool.store.dao;
import com.cool.store.dto.exhibition.ExhibitionDTO;
import com.cool.store.dto.exhibition.ExhibitionStatisticsDTO;
import com.cool.store.entity.HyExhibitionDO; import com.cool.store.entity.HyExhibitionDO;
import com.cool.store.mapper.HyExhibitionMapper; import com.cool.store.mapper.HyExhibitionMapper;
import com.cool.store.utils.StringUtil;
import io.swagger.models.auth.In;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* @Author suzhuhong * @Author suzhuhong
@@ -30,7 +41,7 @@ public class HyExhibitionDAO {
*/ */
public HyExhibitionDO selectByPrimaryKey(Integer id){ public HyExhibitionDO selectByPrimaryKey(Integer id){
if (id == null){ if (id == null){
return new HyExhibitionDO(); return null;
} }
return hyExhibitionMapper.selectByPrimaryKey(id); return hyExhibitionMapper.selectByPrimaryKey(id);
} }
@@ -58,4 +69,43 @@ public class HyExhibitionDAO {
} }
return hyExhibitionMapper.deleteByPrimaryKey(id); return hyExhibitionMapper.deleteByPrimaryKey(id);
} }
public int batchInsert(List<HyExhibitionDO> records){
if (CollectionUtils.isEmpty(records)){
return -1;
}
return hyExhibitionMapper.batchInsert(records);
}
public int batchUpdate(List<HyExhibitionDO> records){
if (CollectionUtils.isEmpty(records)){
return -1;
}
return hyExhibitionMapper.batchUpdate(records);
}
public List<HyExhibitionDO> getExhibitionListByUserId(String userId, String startDate, Integer closedType){
if (StringUtil.isEmpty(userId)){
return new ArrayList<>();
}
return hyExhibitionMapper.getExhibitionListByUserId(userId,startDate,closedType);
}
public Map<String,ExhibitionStatisticsDTO> exhibitionStatisticsMap(List<String> list) {
if (CollectionUtils.isEmpty(list)) {
return new HashMap<>(4);
}
List<ExhibitionStatisticsDTO> result = hyExhibitionMapper.exhibitionStatistic(list);
return result.stream().collect(Collectors.toMap(ExhibitionStatisticsDTO::getExhibitionCode, date -> date));
}
public List<ExhibitionDTO> listByExhibitionGroupIds(List<Integer> exhibitionGroupIdList){
if (CollectionUtils.isEmpty(exhibitionGroupIdList)){
return new ArrayList<>();
}
return hyExhibitionMapper.listByExhibitionGroupIds(exhibitionGroupIdList);
}
} }

View File

@@ -1,10 +1,14 @@
package com.cool.store.dao; package com.cool.store.dao;
import com.cool.store.dto.exhibition.MyExhibitionGroupDTO;
import com.cool.store.entity.HyExhibitionGroupDO; import com.cool.store.entity.HyExhibitionGroupDO;
import com.cool.store.mapper.HyExhibitionGroupMapper; import com.cool.store.mapper.HyExhibitionGroupMapper;
import com.cool.store.utils.StringUtil;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/** /**
* @Author suzhuhong * @Author suzhuhong
@@ -18,7 +22,7 @@ public class HyExhibitionGroupDAO {
HyExhibitionGroupMapper hyExhibitionGroupMapper; HyExhibitionGroupMapper hyExhibitionGroupMapper;
public int insertSelective(HyExhibitionGroupDO record){ public int insertSelective(HyExhibitionGroupDO record){
if (record.getId() == null){ if (record == null){
return -1; return -1;
} }
return hyExhibitionGroupMapper.insertSelective(record); return hyExhibitionGroupMapper.insertSelective(record);
@@ -31,7 +35,7 @@ public class HyExhibitionGroupDAO {
*/ */
public HyExhibitionGroupDO selectByPrimaryKey(Integer id){ public HyExhibitionGroupDO selectByPrimaryKey(Integer id){
if (id == null){ if (id == null){
return new HyExhibitionGroupDO(); return null;
} }
return hyExhibitionGroupMapper.selectByPrimaryKey(id); return hyExhibitionGroupMapper.selectByPrimaryKey(id);
} }
@@ -59,4 +63,13 @@ public class HyExhibitionGroupDAO {
} }
return hyExhibitionGroupMapper.deleteByPrimaryKey(id); return hyExhibitionGroupMapper.deleteByPrimaryKey(id);
} }
public List<MyExhibitionGroupDTO> listByCreator(String userId){
if (StringUtil.isEmpty(userId)){
return new ArrayList<>();
}
return hyExhibitionGroupMapper.listByCreator(userId);
}
} }

View File

@@ -1,10 +1,13 @@
package com.cool.store.dao; package com.cool.store.dao;
import com.cool.store.dto.exhibition.ExhibitionLineDTO;
import com.cool.store.entity.HyPartnerExhibitionDO; import com.cool.store.entity.HyPartnerExhibitionDO;
import com.cool.store.mapper.HyPartnerExhibitionMapper; import com.cool.store.mapper.HyPartnerExhibitionMapper;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/** /**
* @Author suzhuhong * @Author suzhuhong
@@ -58,4 +61,11 @@ public class HyPartnerExhibitionDAO {
} }
return hyPartnerExhibitionMapper.deleteByPrimaryKey(id); return hyPartnerExhibitionMapper.deleteByPrimaryKey(id);
} }
public List<ExhibitionLineDTO> getExhibitionLine(String exhibitionCode){
if (exhibitionCode == null){
return new ArrayList<>();
}
return hyPartnerExhibitionMapper.getExhibitionLine(exhibitionCode);
}
} }

View File

@@ -1,9 +1,12 @@
package com.cool.store.mapper; package com.cool.store.mapper;
import com.cool.store.dto.exhibition.MyExhibitionGroupDTO;
import com.cool.store.entity.HyExhibitionGroupDO; import com.cool.store.entity.HyExhibitionGroupDO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/** /**
* @author zhangchenbiao * @author zhangchenbiao
* @date 2023-11-30 11:55 * @date 2023-11-30 11:55
@@ -37,4 +40,6 @@ public interface HyExhibitionGroupMapper {
* dateTime:2023-11-30 01:36 * dateTime:2023-11-30 01:36
*/ */
int deleteByPrimaryKey(Integer id); int deleteByPrimaryKey(Integer id);
List<MyExhibitionGroupDTO> listByCreator(String userId);
} }

View File

@@ -1,9 +1,14 @@
package com.cool.store.mapper; package com.cool.store.mapper;
import com.cool.store.dto.exhibition.ExhibitionDTO;
import com.cool.store.dto.exhibition.ExhibitionStatisticsDTO;
import com.cool.store.entity.HyExhibitionDO; import com.cool.store.entity.HyExhibitionDO;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/** /**
* @author zhangchenbiao * @author zhangchenbiao
* @date 2023-11-30 11:47 * @date 2023-11-30 11:47
@@ -37,4 +42,17 @@ public interface HyExhibitionMapper {
* dateTime:2023-11-30 01:38 * dateTime:2023-11-30 01:38
*/ */
int deleteByPrimaryKey(Integer id); int deleteByPrimaryKey(Integer id);
int batchInsert(@Param("records") List<HyExhibitionDO> records);
int batchUpdate(@Param("records") List<HyExhibitionDO> records);
List<HyExhibitionDO> getExhibitionListByUserId(@Param("userId") String userId,
@Param("startDate") String startDate,
@Param("closedType") Integer closedType);
List<ExhibitionStatisticsDTO> exhibitionStatistic(@Param("list") List<String> exhibitionCodeList);
List<ExhibitionDTO> listByExhibitionGroupIds(@Param("list") List<Integer> exhibitionGroupIdList);
} }

View File

@@ -1,8 +1,11 @@
package com.cool.store.mapper; package com.cool.store.mapper;
import com.cool.store.dto.exhibition.ExhibitionLineDTO;
import com.cool.store.entity.HyPartnerExhibitionDO; import com.cool.store.entity.HyPartnerExhibitionDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/** /**
* @author zhangchenbiao * @author zhangchenbiao
* @date 2023-11-30 11:55 * @date 2023-11-30 11:55
@@ -37,4 +40,12 @@ public interface HyPartnerExhibitionMapper {
* dateTime:2023-11-30 01:39 * dateTime:2023-11-30 01:39
*/ */
int deleteByPrimaryKey(Long id); int deleteByPrimaryKey(Long id);
/**
* 展会参与线索信息
* @param exhibitionCode
* @return
*/
List<ExhibitionLineDTO> getExhibitionLine(String exhibitionCode);
} }

View File

@@ -20,15 +20,33 @@
<include refid="Base_Column_List" /> <include refid="Base_Column_List" />
from hy_exhibition_group from hy_exhibition_group
where id = #{id,jdbcType=INTEGER} where id = #{id,jdbcType=INTEGER}
and deleted = 0
</select> </select>
<select id="listByCreator" resultType="com.cool.store.dto.exhibition.MyExhibitionGroupDTO">
select
eg.id as id ,
eg.exhibition_group_name as exhibitionGroupName,
eg.closed as closed,
eg.creator as createId,
eu.name as createName,
eu.mobile as mobile
from hy_exhibition_group eg
left join enterprise_user eu on eg.creator = eu.user_id
where eg.deleted = 0
<if test="userId!=null and userId!=''">
and eg.creator = #{userId,jdbcType=VARCHAR}
</if>
order by eg.create_time desc
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer"> <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from hy_exhibition_group delete from hy_exhibition_group
where id = #{id,jdbcType=INTEGER} where id = #{id,jdbcType=INTEGER}
</delete> </delete>
<insert id="insertSelective" parameterType="com.cool.store.entity.HyExhibitionGroupDO"> <insert id="insertSelective" parameterType="com.cool.store.entity.HyExhibitionGroupDO" keyColumn="id" keyProperty="id" useGeneratedKeys="true">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
insert into hy_exhibition_group insert into hy_exhibition_group
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">
<if test="exhibitionGroupName != null"> <if test="exhibitionGroupName != null">

View File

@@ -125,6 +125,34 @@
#{collaborators,jdbcType=LONGVARCHAR}, #{collaborators,jdbcType=LONGVARCHAR},
</if> </if>
</trim> </trim>
</insert>
<insert id="batchInsert" keyColumn="id" keyProperty="records.id" useGeneratedKeys="true">
insert into hy_exhibition
(
exhibition_group_id,
exhibition_code,
exhibition_name,
start_date,
location,
collaborators,
creator
)
values
<foreach collection="records" item="record" separator=",">
(
#{record.exhibitionGroupId},
#{record.exhibitionCode},
#{record.exhibitionName},
#{record.startDate},
#{record.location},
#{record.collaborators},
#{record.creator}
)
</foreach>
</insert> </insert>
<update id="updateByPrimaryKeySelective" parameterType="com.cool.store.entity.HyExhibitionDO"> <update id="updateByPrimaryKeySelective" parameterType="com.cool.store.entity.HyExhibitionDO">
update hy_exhibition update hy_exhibition
@@ -171,6 +199,102 @@
</set> </set>
where id = #{id,jdbcType=INTEGER} where id = #{id,jdbcType=INTEGER}
</update> </update>
<update id="batchUpdate">
update hy_exhibition
set
exhibition_name = CASE id
<foreach collection="records" item="record">
WHEN #{record.id} THEN #{record.exhibitionName}
</foreach>
END,
location = CASE id
<foreach collection="records" item="record">
WHEN #{record.id} THEN #{record.location}
</foreach>
END,
updater = CASE id
<foreach collection="records" item="record">
WHEN #{record.id} THEN #{record.updater}
</foreach>
END,
collaborators = CASE id
<foreach collection="records" item="record">
WHEN #{record.id} THEN #{record.collaborators}
</foreach>
END
where id in
<foreach collection="records" item="record" open="(" separator="," close=")">
#{record.id}
</foreach>
</update>
<select id="getExhibitionListByUserId" resultMap="ResultMapWithBLOBs">
select
<include refid="Base_Column_List" />
,
<include refid="Blob_Column_List" />
,
TIMESTAMPDIFF(second,now(),start_date) AS tst
from hy_exhibition
<where>
<if test="startDate != null and startDate!='' ">
and start_date = #{startDate}
</if>
<if test="closedType != null and closedType==0 ">
and closed_type = #{closedType}
</if>
<if test="closedType != null and closedType==1 ">
and closed_type in (1,2)
</if>
<if test="userId != null and userId!='' ">
and (creator = #{userId} or collaborators like CONCAT('%,', #{userId} ,',%'))
</if>
</where>
ORDER BY
if(tst >= 0, 0, 1),
if(tst <![CDATA[ < ]]> 0, abs(tst), tst ),id desc
</select>
<select id="listByExhibitionGroupIds" resultType="com.cool.store.dto.exhibition.ExhibitionDTO">
select
id as id ,
exhibition_group_id as exhibitionGroupId,
start_date as startDate,
close_time as closeTime,
location as location,
exhibition_name as exhibitionName,
collaborators as collaboratorStr
from hy_exhibition
<where>
<foreach collection="list" item="groupId" open="and exhibition_group_id in (" separator="," close=")">
#{groupId}
</foreach>
</where>
order by id asc
</select>
<select id="exhibitionStatistic" resultType="com.cool.store.dto.exhibition.ExhibitionStatisticsDTO">
select
exhibition_code as exhibitionCode,
COALESCE(count(1),0) as signUpCount,
COALESCE(sum( CASE WHEN participation_status = 1 THEN 1 ELSE 0 END ),0) as checkInCount,
COALESCE(sum( CASE WHEN participation_status = 2 THEN 1 ELSE 0 END ),0) as formFillCount,
COALESCE(sum( CASE WHEN participation_status in (3,4,5,6) THEN 1 ELSE 0 END ),0) as interviewCount
from hy_partner_exhibition
<where>
<foreach collection="list" item="code" open="and exhibition_code in (" separator="," close=")">
#{code}
</foreach>
</where>
group by exhibition_code
</select>
<sql id="dynamicQuery"> <sql id="dynamicQuery">
<trim prefix="WHERE" prefixOverrides="AND | OR"> <trim prefix="WHERE" prefixOverrides="AND | OR">
<if test="null != id"> <if test="null != id">

View File

@@ -33,6 +33,20 @@
delete from hy_partner_exhibition delete from hy_partner_exhibition
where id = #{id,jdbcType=BIGINT} where id = #{id,jdbcType=BIGINT}
</delete> </delete>
<select id="getExhibitionLine" resultType="com.cool.store.dto.exhibition.ExhibitionLineDTO">
select
hpe.partner_id as partnerId,
hpe.exhibition_code as exhibitionCode,
pu.username as partnerName,
pu.mobile as mobile
from hy_partner_exhibition hpe left join hy_partner_user_info pu on hpe.partner_id = pu.partner_id
where hpe.participation_status != 7
<if test="exhibitionCode != null and exhibitionCode!=''">
and hpe.exhibition_code = #{exhibitionCode}
</if>
</select>
<insert id="insertSelective" parameterType="com.cool.store.entity.HyPartnerExhibitionDO"> <insert id="insertSelective" parameterType="com.cool.store.entity.HyPartnerExhibitionDO">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long"> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
SELECT LAST_INSERT_ID() SELECT LAST_INSERT_ID()

View File

@@ -2,6 +2,7 @@ package com.cool.store.dto.exhibition;
import lombok.Data; import lombok.Data;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@@ -18,6 +19,14 @@ public class ExhibitionDTO {
private String startDate; private String startDate;
private List<CollaboratorDTO> collaboratorS; private Integer id;
private Date closeTime;
private Integer exhibitionGroupId;
private String collaboratorStr;
private List<CollaboratorDTO> collaborators;
} }

View File

@@ -12,10 +12,10 @@ import java.util.List;
@Data @Data
public class ExhibitionGroupDTO { public class ExhibitionGroupDTO {
private Integer exhibitionGroupId;
private String exhibitionGroupName; private String exhibitionGroupName;
private List<ExhibitionDTO> exhibitionList; private List<ExhibitionDTO> exhibitionList;
} }

View File

@@ -0,0 +1,21 @@
package com.cool.store.dto.exhibition;
import lombok.Data;
/**
* @Author suzhuhong
* @Date 2023/12/6 17:13
* @Version 1.0
*/
@Data
public class ExhibitionLineDTO {
private String partnerId;
private String partnerName;
private String mobile;
private String exhibitionCode;
}

View File

@@ -0,0 +1,48 @@
package com.cool.store.dto.exhibition;
import lombok.Data;
/**
* @Author suzhuhong
* @Date 2023/12/5 16:53
* @Version 1.0
*/
@Data
public class ExhibitionStatisticsDTO {
/**
* 展会code
*/
private String exhibitionCode;
/**
* 报名人数
*/
private Integer signUpCount;
/**
* 签到人数
*/
private Integer checkInCount;
/**
*
* 意向申请填写人数
*/
private Integer formFillCount;
/**
* 面试人数
*/
private Integer interviewCount;
public ExhibitionStatisticsDTO(){
this.checkInCount = 0;
this.signUpCount = 0;
this.formFillCount = 0;
this.interviewCount = 0;
}
}

View File

@@ -0,0 +1,43 @@
package com.cool.store.dto.exhibition;
import lombok.Data;
/**
* @Author suzhuhong
* @Date 2023/12/5 20:16
* @Version 1.0
*/
@Data
public class MyExhibitionGroupDTO {
/**
* 会销组名称
*/
private String exhibitionGroupName;
/**
* 会销组ID
*/
private Integer id;
/**
* 创建人ID
*/
private String createId;
/**
* 创建人名称
*/
private String createName;
/**
* 创建人手机号
*/
private String mobile;
/**
* 是否结束
*/
private Integer closed;
}

View File

@@ -0,0 +1,26 @@
package com.cool.store.vo.exhibition;
import lombok.Data;
/**
* @Author suzhuhong
* @Date 2023/11/30 15:30
* @Version 1.0
*/
@Data
public class CollaboratorVO {
private String collaborateId;
private String collaborateName;
public CollaboratorVO(String collaborateId, String collaborateName) {
this.collaborateId = collaborateId;
this.collaborateName = collaborateName;
}
public CollaboratorVO() {
this.collaborateId = collaborateId;
this.collaborateName = collaborateName;
}
}

View File

@@ -0,0 +1,25 @@
package com.cool.store.vo.exhibition;
import lombok.Data;
/**
* @Author suzhuhong
* @Date 2023/12/6 16:05
* @Version 1.0
*/
@Data
public class ExhibitionDetailVO extends ExhibitionVO{
private String createTime;
private String closeTime;
private String createId;
private String createName;
private String mobile;
private Integer closedType;
}

View File

@@ -0,0 +1,20 @@
package com.cool.store.vo.exhibition;
import lombok.Data;
import java.util.List;
/**
* @Author suzhuhong
* @Date 2023/12/6 10:03
* @Version 1.0
*/
@Data
public class ExhibitionGroupDetailVO {
private String exhibitionGroupName;
private Integer id;
private List<ExhibitionVO> exhibitionList;
}

View File

@@ -0,0 +1,21 @@
package com.cool.store.vo.exhibition;
import lombok.Data;
import java.util.List;
/**
* @Author suzhuhong
* @Date 2023/11/30 15:57
* @Version 1.0
*/
@Data
public class ExhibitionGroupVO {
private Integer exhibitionGroupId;
private String exhibitionGroupName;
private List<ExhibitionVO> exhibitionList;
}

View File

@@ -0,0 +1,25 @@
package com.cool.store.vo.exhibition;
import lombok.Data;
import java.util.List;
/**
* @Author suzhuhong
* @Date 2023/11/30 15:33
* @Version 1.0
*/
@Data
public class ExhibitionVO {
private String exhibitionName;
private String location;
private String startDate;
private Integer id;
private List<CollaboratorVO> collaborators;
}

View File

@@ -0,0 +1,56 @@
package com.cool.store.vo.exhibition;
import io.swagger.models.auth.In;
import lombok.Data;
import java.util.List;
/**
* @Author suzhuhong
* @Date 2023/12/5 20:20
* @Version 1.0
*/
@Data
public class MyExhibitionGroupVO {
/**
* 会销组名称
*/
private String exhibitionGroupName;
/**
* 失效时间
*/
private String expiresTime;
/**
* 会销组ID
*/
private Integer id;
/**
* 创建人ID
*/
private String createId;
/**
* 创建人名称
*/
private String createName;
/**
* 创建人手机号
*/
private String mobile;
/**
* 是否结束
*/
private Integer closed;
/**
* 会销 列表
*/
private List<ExhibitionVO> exhibitionList;
}

View File

@@ -0,0 +1,40 @@
package com.cool.store.vo.exhibition;
import lombok.Data;
/**
* @Author suzhuhong
* @Date 2023/12/5 10:41
* @Version 1.0
*/
@Data
public class MyExhibitionVO extends ExhibitionVO{
/**
* 结束类型 0-未结算 1-自动结束 2-手动结束
*/
private Integer closedType;
/**
* 报名人数
*/
private Integer signUpCount;
/**
* 签到人数
*/
private Integer checkInCount;
/**
*
* 意向申请填写人数
*/
private Integer formFillCount;
/**
* 面试人数
*/
private Integer interviewCount;
}

View File

@@ -1,8 +1,77 @@
package com.cool.store.service; package com.cool.store.service;
import com.cool.store.context.CurrentUserHolder;
import com.cool.store.context.LoginUserInfo;
import com.cool.store.dto.exhibition.ExhibitionDTO;
import com.cool.store.dto.exhibition.ExhibitionGroupDTO;
import com.cool.store.dto.exhibition.MyExhibitionGroupDTO;
import com.cool.store.exception.ApiException;
import com.cool.store.vo.exhibition.*;
import com.github.pagehelper.PageInfo;
import io.swagger.models.auth.In;
/** /**
* @author Fun Li 2023/11/30 14:42 * @author Fun Li 2023/11/30 14:42
* @version 1.0 * @version 1.0
*/ */
public interface ExhibitionService { public interface ExhibitionService {
/**
* 新增会销组
* xin
* @param exhibitionGroupDTO
* @param userInfo
* @return
* @throws ApiException
*/
Boolean addExhibitionGroup(ExhibitionGroupDTO exhibitionGroupDTO, LoginUserInfo userInfo) throws ApiException;
/**
* 编辑会销组
* x
* @param exhibitionGroupDTO
* @param userInfo
* @return
*/
Boolean editExhibitionGroup(ExhibitionGroupDTO exhibitionGroupDTO, LoginUserInfo userInfo) throws ApiException;
/**
* 我的会销
* x
* @param userId 用户ID
* @param pageSize 分页大小
* @param pageNum 页码
* @return
*/
PageInfo<MyExhibitionVO> getMyExhibitionList(String userId,String startDate,String closedType,Integer pageSize,Integer pageNum);
/**
* 我创建的会销组
* @param userId
* @param pageSize
* @param pageNum
* @return
*/
PageInfo<MyExhibitionGroupVO> getMyExhibitionGroupList(String userId,Integer pageSize,Integer pageNum);
/**
* 会销组详情
* @param exhibitionGroupId
* @return
*/
ExhibitionGroupDetailVO getExhibitionGroupDetail(Integer exhibitionGroupId);
/**
* 会销详情
* @param exhibitionId
* @return
*/
ExhibitionDetailVO getExhibitionDetail(Integer exhibitionId);
Boolean editExhibition(ExhibitionDTO exhibitionDTO,LoginUserInfo userInfo) ;
} }

View File

@@ -82,7 +82,7 @@ public class DeskServiceImpl implements DeskService {
if (StringUtils.isEmpty(userId)||selectedData==null){ if (StringUtils.isEmpty(userId)||selectedData==null){
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
} }
Date dateTime = CoolDateUtils.parseDate(selectedData); Date dateTime = CoolDateUtils.parseDate(selectedData,CoolDateUtils.DATE_FORMAT_SEC);
InterviewScheduleInfoVO interviewScheduleInfoVO = new InterviewScheduleInfoVO(); InterviewScheduleInfoVO interviewScheduleInfoVO = new InterviewScheduleInfoVO();
//查询面试数量 //查询面试数量

View File

@@ -1,20 +1,419 @@
package com.cool.store.service.impl.exhibition; package com.cool.store.service.impl.exhibition;
import cn.hutool.core.date.DateUtil;
import com.alibaba.excel.util.DateUtils;
import com.cool.store.constants.CommonConstants;
import com.cool.store.context.CurrentUserHolder;
import com.cool.store.context.LoginUserInfo;
import com.cool.store.dao.EnterpriseUserDAO;
import com.cool.store.dao.HyExhibitionDAO;
import com.cool.store.dao.HyExhibitionGroupDAO;
import com.cool.store.dao.HyPartnerExhibitionDAO; import com.cool.store.dao.HyPartnerExhibitionDAO;
import com.cool.store.entity.HyPartnerExhibitionDO; import com.cool.store.dto.exhibition.*;
import com.cool.store.entity.*;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.enums.FeiShuNoticeMsgEnum;
import com.cool.store.enums.SMSMsgEnum;
import com.cool.store.exception.ApiException;
import com.cool.store.exception.ServiceException;
import com.cool.store.http.EventCenterHttpRequest;
import com.cool.store.mapper.HyPartnerExhibitionMapper; import com.cool.store.mapper.HyPartnerExhibitionMapper;
import com.cool.store.service.ExhibitionService; import com.cool.store.service.ExhibitionService;
import com.cool.store.service.WechatMiniAppService;
import com.cool.store.utils.CoolDateUtils;
import com.cool.store.utils.StringUtil;
import com.cool.store.utils.poi.StringUtils;
import com.cool.store.utils.poi.constant.Constants;
import com.cool.store.vo.exhibition.*;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/** /**
* @author Fun Li 2023/11/30 14:42 * @author Fun Li 2023/11/30 14:42
* @version 1.0 * @version 1.0
*/ */
@Service @Service
@Slf4j
public class ExhibitionServiceImpl implements ExhibitionService { public class ExhibitionServiceImpl implements ExhibitionService {
@Autowired @Autowired
private HyPartnerExhibitionDAO exhibitionDAO; private HyPartnerExhibitionDAO exhibitionDAO;
@Autowired
private HyExhibitionGroupDAO hyExhibitionGroupDAO;
@Autowired
private HyExhibitionDAO hyExhibitionDAO;
@Autowired
private EventCenterHttpRequest eventCenterHttpRequest;
@Resource
EnterpriseUserDAO enterpriseUserDAO;
@Resource
HyPartnerExhibitionDAO hyPartnerExhibitionDAO;
@Resource
WechatMiniAppService wechatMiniAppService;
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean addExhibitionGroup(ExhibitionGroupDTO exhibitionGroupDTO, LoginUserInfo userInfo) throws ApiException {
checkExhibitionGroup(exhibitionGroupDTO);
//新增会销组信息
HyExhibitionGroupDO hyExhibitionGroupDO = new HyExhibitionGroupDO();
hyExhibitionGroupDO.setExhibitionGroupName(exhibitionGroupDTO.getExhibitionGroupName());
hyExhibitionGroupDO.setCreator(userInfo.getUserId());
hyExhibitionGroupDAO.insertSelective(hyExhibitionGroupDO);
//新增会销信息
List<HyExhibitionDO> insertList = new ArrayList<>();
for (ExhibitionDTO exhibitionDTO : exhibitionGroupDTO.getExhibitionList()){
HyExhibitionDO hyExhibitionDO = new HyExhibitionDO();
hyExhibitionDO.setExhibitionName(exhibitionDTO.getExhibitionName());
if (CollectionUtils.isNotEmpty(exhibitionDTO.getCollaborators())){
String collaborators = exhibitionDTO.getCollaborators().stream().map(CollaboratorDTO::getCollaborateId).collect(Collectors.joining(Constants.COMMA));
hyExhibitionDO.setCollaborators(String.format("%s%s%s", Constants.COMMA, collaborators, Constants.COMMA));
}
hyExhibitionDO.setExhibitionCode(String.valueOf(CommonConstants.MIN_CODE+new Random().nextInt(CommonConstants.MAX_CODE)));
hyExhibitionDO.setCreator(userInfo.getUserId());
hyExhibitionDO.setLocation(exhibitionDTO.getLocation());
hyExhibitionDO.setExhibitionGroupId(hyExhibitionGroupDO.getId());
hyExhibitionDO.setStartDate(CoolDateUtils.parseDate(exhibitionDTO.getStartDate(),CoolDateUtils.DATE_FORMAT_SEC_2));
insertList.add(hyExhibitionDO);
}
//批量新增会销
batchInsertExhibition(exhibitionGroupDTO,insertList,userInfo);
return Boolean.TRUE;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean editExhibitionGroup(ExhibitionGroupDTO exhibitionGroupDTO, LoginUserInfo userInfo) throws ApiException {
checkExhibitionGroup(exhibitionGroupDTO);
//编辑 ID不能为空
if (exhibitionGroupDTO.getExhibitionGroupId() == null){
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
}
HyExhibitionGroupDO hyExhibitionGroupDO = hyExhibitionGroupDAO.selectByPrimaryKey(exhibitionGroupDTO.getExhibitionGroupId());
//会销组不存在
if (hyExhibitionGroupDO== null){
throw new ServiceException(ErrorCodeEnum.EXHIBITION_GROUP_NOT_EXIST);
}
// TODO: 2023/12/4 关闭的会销组是否能修改?
hyExhibitionGroupDO.setExhibitionGroupName(exhibitionGroupDTO.getExhibitionGroupName());
hyExhibitionGroupDO.setUpdater(userInfo.getUserId());
hyExhibitionGroupDAO.updateByPrimaryKeySelective(hyExhibitionGroupDO);
List<HyExhibitionDO> batchInsertList = new ArrayList<>();
List<HyExhibitionDO> batchUpdateList = new ArrayList<>();
exhibitionGroupDTO.getExhibitionList().forEach(exhibitionDTO->{
HyExhibitionDO hyExhibitionDO = new HyExhibitionDO();
hyExhibitionDO.setExhibitionGroupId(hyExhibitionGroupDO.getId());
hyExhibitionDO.setExhibitionName(exhibitionDTO.getExhibitionName());
hyExhibitionDO.setLocation(exhibitionDTO.getLocation());
if (CollectionUtils.isNotEmpty(exhibitionDTO.getCollaborators())){
String collaborators = exhibitionDTO.getCollaborators().stream().map(CollaboratorDTO::getCollaborateId).collect(Collectors.joining(Constants.COMMA));
hyExhibitionDO.setCollaborators(String.format("%s%s%s", Constants.COMMA, collaborators, Constants.COMMA));
}
if (exhibitionDTO.getId()== null){
hyExhibitionDO.setCreator(userInfo.getUserId());
hyExhibitionDO.setExhibitionCode(String.valueOf(CommonConstants.MIN_CODE+new Random().nextInt(CommonConstants.MAX_CODE)));
hyExhibitionDO.setStartDate(CoolDateUtils.parseDate(exhibitionDTO.getStartDate(),CoolDateUtils.DATE_FORMAT_DAY_2));
batchInsertList.add(hyExhibitionDO);
}else {
hyExhibitionDO.setUpdater(userInfo.getUserId());
hyExhibitionDO.setId(exhibitionDTO.getId());
if (CollectionUtils.isEmpty(exhibitionDTO.getCollaborators())){
hyExhibitionDO.setCollaborators("");
}
batchUpdateList.add(hyExhibitionDO);
}
});
//batchInsertList 不为空 批量新增
if (CollectionUtils.isNotEmpty(batchInsertList)){
batchInsertExhibition(exhibitionGroupDTO,batchInsertList,userInfo);
}
//batchUpdateList 不为空 批量更新
if (CollectionUtils.isNotEmpty(batchUpdateList)){
hyExhibitionDAO.batchUpdate(batchUpdateList);
}
return Boolean.TRUE;
}
@Override
public PageInfo<MyExhibitionVO> getMyExhibitionList(String userId,String startDate,String closedType,Integer pageSize,Integer pageNum) {
Integer type = CommonConstants.MINUS_ONE;
if (StringUtils.isNotEmpty(closedType)){
type = CommonConstants.CLOSE.equals(closedType)?CommonConstants.ONE:CommonConstants.ZERO;
}
PageHelper.startPage(pageNum,pageSize);
List<HyExhibitionDO> exhibitionList = hyExhibitionDAO.getExhibitionListByUserId(userId, startDate, type);
PageInfo hyExhibitionDOPage = new PageInfo<>(exhibitionList);
if (CollectionUtils.isEmpty(exhibitionList)){
return hyExhibitionDOPage;
}
List<MyExhibitionVO> list = new ArrayList<>();
//查询协作人
Set<String> collaboratorsSet = new HashSet();
List<String> codeList = new ArrayList<>();
exhibitionList.forEach(x->{
codeList.add(x.getExhibitionCode());
if (StringUtils.isNotEmpty(x.getCollaborators())){
List<String> userIdList = Arrays.asList(x.getCollaborators().substring(1).split(Constants.COMMA));
collaboratorsSet.addAll(userIdList);
}
});
List<EnterpriseUserDO> userInfoList = enterpriseUserDAO.getUserInfoByUserIds(new ArrayList<>(collaboratorsSet));
Map<String, CollaboratorVO> resultMap = userInfoList.stream()
.collect(Collectors.toMap(EnterpriseUserDO::getUserId,
u -> new CollaboratorVO(u.getUserId(), u.getName())));
Map<String, ExhibitionStatisticsDTO> StatisticsMap = hyExhibitionDAO.exhibitionStatisticsMap(codeList);
exhibitionList.forEach(x->{
MyExhibitionVO myExhibitionVO = new MyExhibitionVO();
myExhibitionVO.setExhibitionName(x.getExhibitionName());
myExhibitionVO.setLocation(x.getLocation());
myExhibitionVO.setId(x.getId());
myExhibitionVO.setClosedType(x.getClosedType());
myExhibitionVO.setStartDate(DateUtils.format(x.getStartDate(),DateUtils.DATE_FORMAT_10));
if (StringUtils.isNotEmpty(x.getCollaborators())){
List<String> userIdList = Arrays.asList(x.getCollaborators().substring(1).split(Constants.COMMA));
List<CollaboratorVO> coll = new ArrayList<>();
userIdList.forEach(userIds->{
coll.add(resultMap.get(userIds));
});
myExhibitionVO.setCollaborators(coll);
}
ExhibitionStatisticsDTO statistics = StatisticsMap.getOrDefault(x.getExhibitionCode(), new ExhibitionStatisticsDTO());
myExhibitionVO.setSignUpCount(statistics.getSignUpCount());
myExhibitionVO.setCheckInCount(statistics.getCheckInCount());
myExhibitionVO.setFormFillCount(statistics.getFormFillCount());
myExhibitionVO.setInterviewCount(statistics.getInterviewCount());
list.add(myExhibitionVO);
});
hyExhibitionDOPage.setList(list);
return hyExhibitionDOPage;
}
@Override
public PageInfo<MyExhibitionGroupVO> getMyExhibitionGroupList(String userId, Integer pageSize, Integer pageNum) {
PageHelper.startPage(pageNum, pageSize);
List<MyExhibitionGroupDTO> myExhibitionGroupDTOS = hyExhibitionGroupDAO.listByCreator(userId);
PageInfo myExhibitionGroupDTOPage = new PageInfo<>(myExhibitionGroupDTOS);
if (CollectionUtils.isEmpty(myExhibitionGroupDTOS)){
return myExhibitionGroupDTOPage;
}
List<Integer> groupIds = myExhibitionGroupDTOS.stream().map(MyExhibitionGroupDTO::getId).collect(Collectors.toList());
List<ExhibitionDTO> exhibitionDTOS = hyExhibitionDAO.listByExhibitionGroupIds(groupIds);
Map<Integer, List<ExhibitionDTO>> groupMap = exhibitionDTOS.stream().collect(Collectors.groupingBy(ExhibitionDTO::getExhibitionGroupId));
List<MyExhibitionGroupVO> result = new ArrayList<>();
myExhibitionGroupDTOS.forEach(x->{
MyExhibitionGroupVO myExhibitionGroupVO = new MyExhibitionGroupVO();
myExhibitionGroupVO.setExhibitionGroupName(x.getExhibitionGroupName());
myExhibitionGroupVO.setId(x.getId());
myExhibitionGroupVO.setClosed(x.getClosed());
myExhibitionGroupVO.setCreateId(x.getCreateId());
myExhibitionGroupVO.setCreateName(x.getCreateName());
myExhibitionGroupVO.setMobile(x.getMobile());
List<ExhibitionDTO> list = groupMap.get(x.getId());
List<ExhibitionVO> exhibitionVOS = new ArrayList<>();
Date date = null;
if (CollectionUtils.isNotEmpty(list)){
//根据ID排序
list.sort(Comparator.comparing(ExhibitionDTO::getId));
list.forEach(exhibitionDTO->{
ExhibitionVO exhibitionVO = new ExhibitionVO();
exhibitionVO.setExhibitionName(exhibitionDTO.getExhibitionName());
exhibitionVO.setStartDate(exhibitionDTO.getStartDate());
exhibitionVO.setId(exhibitionDTO.getId());
exhibitionVOS.add(exhibitionVO);
});
//是否所有的不为空 所有不为空表示 会销组结束
Boolean flag = list.stream().map(ExhibitionDTO::getCloseTime).allMatch(closeTime -> closeTime != null);
if(flag){
date = list.stream().map(ExhibitionDTO::getCloseTime).filter(closeTime -> closeTime != null).max(Date::compareTo).orElse(null);
}
}
myExhibitionGroupVO.setExhibitionList(exhibitionVOS);
if (date!=null){
myExhibitionGroupVO.setExpiresTime(DateUtils.format(date, DateUtils.DATE_FORMAT_19_FORWARD_SLASH));
}
result.add(myExhibitionGroupVO);
});
myExhibitionGroupDTOPage.setList(result);
return myExhibitionGroupDTOPage;
}
@Override
public ExhibitionGroupDetailVO getExhibitionGroupDetail(Integer exhibitionGroupId) {
//查询标签组
HyExhibitionGroupDO hyExhibitionGroupDO = hyExhibitionGroupDAO.selectByPrimaryKey(exhibitionGroupId);
if (ObjectUtils.isEmpty(hyExhibitionGroupDO)){
throw new ServiceException(ErrorCodeEnum.EXHIBITION_GROUP_NOT_EXIST);
}
ExhibitionGroupDetailVO exhibitionGroupDetailVO = new ExhibitionGroupDetailVO();
exhibitionGroupDetailVO.setExhibitionGroupName(hyExhibitionGroupDO.getExhibitionGroupName());
exhibitionGroupDetailVO.setId(hyExhibitionGroupDO.getId());
List<ExhibitionDTO> exhibitionDTOS = hyExhibitionDAO.listByExhibitionGroupIds(Arrays.asList(exhibitionGroupId));
List<ExhibitionVO> exhibitionVOS = new ArrayList<>();
//会销对应的会销协作人map
Map<String, CollaboratorVO> resultMap = getExhibitionCollaboratorMap(exhibitionDTOS);
exhibitionDTOS.forEach(exhibitionDTO->{
ExhibitionVO exhibitionVO = new ExhibitionVO();
exhibitionVO.setExhibitionName(exhibitionDTO.getExhibitionName());
exhibitionVO.setStartDate(exhibitionDTO.getStartDate());
exhibitionVO.setLocation(exhibitionDTO.getLocation());
exhibitionVO.setId(exhibitionDTO.getId());
if (StringUtils.isNotEmpty(exhibitionDTO.getCollaboratorStr())){
List<String> userIdList = Arrays.asList(exhibitionDTO.getCollaboratorStr().substring(1).split(Constants.COMMA));
List<CollaboratorVO> coll = new ArrayList<>();
userIdList.forEach(userIds->{
coll.add(resultMap.get(userIds));
});
exhibitionVO.setCollaborators(coll);
}
exhibitionVOS.add(exhibitionVO);
});
exhibitionGroupDetailVO.setExhibitionList(exhibitionVOS);
return exhibitionGroupDetailVO;
}
@Override
public ExhibitionDetailVO getExhibitionDetail(Integer exhibitionId) {
HyExhibitionDO hyExhibitionDO = hyExhibitionDAO.selectByPrimaryKey(exhibitionId);
if (hyExhibitionDO==null){
throw new ServiceException(ErrorCodeEnum.EXHIBITION_NOT_EXIST);
}
ExhibitionDetailVO exhibitionDetailVO = new ExhibitionDetailVO();
exhibitionDetailVO.setExhibitionName(hyExhibitionDO.getExhibitionName());
exhibitionDetailVO.setId(hyExhibitionDO.getId());
exhibitionDetailVO.setLocation(hyExhibitionDO.getLocation());
exhibitionDetailVO.setStartDate(DateUtil.format(hyExhibitionDO.getStartDate(), CoolDateUtils.DATE_FORMAT_DAY_2));
exhibitionDetailVO.setClosedType(hyExhibitionDO.getClosedType());
exhibitionDetailVO.setCreateTime(DateUtil.format(hyExhibitionDO.getCreateTime(), CoolDateUtils.DATE_FORMAT_SEC_7));
exhibitionDetailVO.setCloseTime(DateUtil.format(hyExhibitionDO.getCloseTime(), CoolDateUtils.DATE_FORMAT_SEC_7));
if (StringUtils.isNotEmpty(hyExhibitionDO.getCollaborators())) {
List<String> userIdList = Arrays.asList(hyExhibitionDO.getCollaborators().substring(1).split(Constants.COMMA));
List<EnterpriseUserDO> userInfoList = enterpriseUserDAO.getUserInfoByUserIds(userIdList);
List<CollaboratorVO> collaboratorVOS = userInfoList.stream().map(u -> new CollaboratorVO(u.getUserId(), u.getName())).collect(Collectors.toList());
exhibitionDetailVO.setCollaborators(collaboratorVOS);
}
if (StringUtils.isNotEmpty(hyExhibitionDO.getCreator())){
EnterpriseUserDO user = enterpriseUserDAO.getUserInfoById(hyExhibitionDO.getCreator());
exhibitionDetailVO.setCreateId(user.getUserId());
exhibitionDetailVO.setMobile(user.getMobile());
exhibitionDetailVO.setCreateName(user.getName());
}
return exhibitionDetailVO;
}
@Override
public Boolean editExhibition(ExhibitionDTO exhibitionDTO, LoginUserInfo userInfo) {
if (exhibitionDTO == null || exhibitionDTO.getId()==null){
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
}
//查询会销
HyExhibitionDO hyExhibitionDO = hyExhibitionDAO.selectByPrimaryKey(exhibitionDTO.getId());
if (hyExhibitionDO == null){
throw new ServiceException(ErrorCodeEnum.EXHIBITION_NOT_EXIST);
}
hyExhibitionDO.setExhibitionName(exhibitionDTO.getExhibitionName());
hyExhibitionDO.setLocation(exhibitionDTO.getLocation());
if (CollectionUtils.isNotEmpty(exhibitionDTO.getCollaborators())){
String collaborators = exhibitionDTO.getCollaborators().stream().map(CollaboratorDTO::getCollaborateId).collect(Collectors.joining(Constants.COMMA));
hyExhibitionDO.setCollaborators(String.format("%s%s%s", Constants.COMMA, collaborators, Constants.COMMA));
}else {
//如果协助人没有 则需要置空
hyExhibitionDO.setCollaborators("");
}
hyExhibitionDO.setUpdater(userInfo.getName());
hyExhibitionDAO.updateByPrimaryKeySelective(hyExhibitionDO);
//发送通知 给报名的人员
//查询报名了该会销的线索
List<ExhibitionLineDTO> exhibitionLine = hyPartnerExhibitionDAO.getExhibitionLine(hyExhibitionDO.getExhibitionCode());
exhibitionLine.forEach(x->{
try {
eventCenterHttpRequest.sendSmsVariable(x.getMobile(), SMSMsgEnum.EXHIBITION_INFO_UPDATE,hyExhibitionDO.getExhibitionName(),
DateUtils.format(hyExhibitionDO.getStartDate(),CoolDateUtils.DATE_FORMAT_DAY_2),hyExhibitionDO.getLocation(),wechatMiniAppService.getMiniAppUrl());
} catch (ApiException e) {
log.info("发送短信通知失败,mobile:{},ex:{}",x.getMobile(),e);
}
});
return Boolean.TRUE;
}
/**
* 协作人处理
* @param exhibitionList
* @return
*/
private Map<String, CollaboratorVO> getExhibitionCollaboratorMap(List<ExhibitionDTO> exhibitionList){
Set<String> collaboratorsSet = new HashSet();
Map<String, CollaboratorVO> resultMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(exhibitionList)) {
exhibitionList.forEach(x -> {
if (StringUtils.isNotEmpty(x.getCollaboratorStr())) {
List<String> userIdList = Arrays.asList(x.getCollaboratorStr().substring(1).split(Constants.COMMA));
collaboratorsSet.addAll(userIdList);
}
});
List<EnterpriseUserDO> userInfoList = enterpriseUserDAO.getUserInfoByUserIds(new ArrayList<>(collaboratorsSet));
resultMap = userInfoList.stream().collect(Collectors.toMap(EnterpriseUserDO::getUserId,
u -> new CollaboratorVO(u.getUserId(), u.getName())));
}
return resultMap;
}
/**
* 新增数据
* @param insertList
*/
private void batchInsertExhibition(ExhibitionGroupDTO exhibitionGroupDTO,List<HyExhibitionDO> insertList,LoginUserInfo userInfo) throws ApiException {
hyExhibitionDAO.batchInsert(insertList);
//新增之后 发送消息通知 防止通知已发送 数据出现回滚
for (ExhibitionDTO exhibitionDTO : exhibitionGroupDTO.getExhibitionList()){
//更新不需要 发送工作通知
if (exhibitionDTO.getId()!=null){
continue;
}
if (CollectionUtils.isNotEmpty(exhibitionDTO.getCollaborators())){
List<String> userIds = exhibitionDTO.getCollaborators().stream().map(CollaboratorDTO::getCollaborateId).collect(Collectors.toList());
List<String> userIdsByUserIds = enterpriseUserDAO.getFeishuUserIdListByUserIds(userIds);
eventCenterHttpRequest.sendFeiShuNotice(FeiShuNoticeMsgEnum.EXHIBITION_COLLABORATOR, userIdsByUserIds,userInfo.getName(),
exhibitionDTO.getExhibitionName(),exhibitionDTO.getStartDate(),exhibitionDTO.getLocation());
}
}
}
/**
* 校验一下会销组
* @param exhibitionGroupDTO
*/
private void checkExhibitionGroup(ExhibitionGroupDTO exhibitionGroupDTO) {
if (exhibitionGroupDTO == null|| StringUtils.isEmpty(exhibitionGroupDTO.getExhibitionGroupName())){
throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED);
}
//会销组中必须添加至少一个会销
if (CollectionUtils.isEmpty(exhibitionGroupDTO.getExhibitionList())){
throw new ServiceException(ErrorCodeEnum.EXHIBITION_GROUP_NOT_NULL);
}
}
} }

View File

@@ -1,11 +1,18 @@
package com.cool.store.controller; package com.cool.store.controller;
import com.cool.store.context.CurrentUserHolder;
import com.cool.store.context.LoginUserInfo;
import com.cool.store.dto.exhibition.ExhibitionDTO;
import com.cool.store.dto.exhibition.ExhibitionGroupDTO;
import com.cool.store.exception.ApiException;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.ExhibitionService; import com.cool.store.service.ExhibitionService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile;
/** /**
* @author Fun Li 2023/11/30 14:44 * @author Fun Li 2023/11/30 14:44
@@ -20,4 +27,56 @@ public class ExhibitionController {
@Autowired @Autowired
private ExhibitionService exhibitionService; private ExhibitionService exhibitionService;
@PostMapping(value = "/addExhibitionGroup")
@ApiOperation("添加会销组")
public ResponseResult addExhibitionGroup(@RequestBody ExhibitionGroupDTO exhibitionGroupDTO) throws ApiException {
return ResponseResult.success(exhibitionService.addExhibitionGroup(exhibitionGroupDTO, CurrentUserHolder.getUser()));
}
@PostMapping(value = "/editExhibitionGroup")
@ApiOperation("编辑会销组")
public ResponseResult editExhibitionGroup(@RequestBody ExhibitionGroupDTO exhibitionGroupDTO) throws ApiException {
return ResponseResult.success(exhibitionService.editExhibitionGroup(exhibitionGroupDTO, CurrentUserHolder.getUser()));
}
@GetMapping(value = "/getMyExhibitionList")
@ApiOperation("我的会销")
public ResponseResult getMyExhibitionList(@RequestParam(required = false,value = "closedTye") String closedTye,
@RequestParam(required = false,value = "startDate") String startDate,
@RequestParam(required = false,value = "pageNum") Integer pageNum,
@RequestParam(required = false,value = "pageSize") Integer pageSize) {
LoginUserInfo user = CurrentUserHolder.getUser();
return ResponseResult.success(exhibitionService.getMyExhibitionList(user.getUserId(),closedTye,startDate,pageSize,pageNum));
}
@GetMapping(value = "/getMyExhibitionGroupList")
@ApiOperation("我的会销组")
public ResponseResult getMyExhibitionGroupList(@RequestParam(required = false,value = "pageNum") Integer pageNum,
@RequestParam(required = false,value = "pageSize") Integer pageSize) {
LoginUserInfo user = CurrentUserHolder.getUser();
return ResponseResult.success(exhibitionService.getMyExhibitionGroupList(user.getUserId(),pageSize,pageNum));
}
@GetMapping(value = "/getExhibitionGroupDetail")
@ApiOperation("会销组详情")
public ResponseResult getExhibitionGroupDetail(@RequestParam(required = false,value = "exhibitionGroupId") Integer exhibitionGroupId) {
return ResponseResult.success(exhibitionService.getExhibitionGroupDetail(exhibitionGroupId));
}
@GetMapping(value = "/exhibitionDetail")
@ApiOperation("会销详情")
public ResponseResult getExhibitionDetail(@RequestParam(required = false,value = "exhibitionId") Integer exhibitionId) {
return ResponseResult.success(exhibitionService.getExhibitionDetail(exhibitionId));
}
@PostMapping(value = "/editExhibition")
@ApiOperation("编辑会销")
public ResponseResult editExhibition(@RequestBody ExhibitionDTO exhibitionDTO) {
return ResponseResult.success(exhibitionService.editExhibition(exhibitionDTO, CurrentUserHolder.getUser()));
}
} }