Commit 45b054a5 authored by honghy's avatar honghy

需求116 后台-集运-包裹列表-操作-跟进

parent 72c5d985
...@@ -272,6 +272,39 @@ public class CodeUtils { ...@@ -272,6 +272,39 @@ public class CodeUtils {
return newOddNumber; return newOddNumber;
} }
/**
* 功能描述: 自动生成集运跟进单单号. 格式: GJ+年份YYYY+六位数
*
* @param maxOddNumbers 数据库中的最新单号
* @return java.lang.String
*/
public static String getConsFollowupNumbers(String maxOddNumbers) {
// 格式: GJ+年份YYYY+六位数
int numberLength = 12;
//获取当前日期并将其进行格式化
String formatYear = getDateTime("yyyy");
int newEndIntNum;
//判断数据中的最大单号是否存在,是否包含当前日期
if (StringUtils.isNotEmpty(maxOddNumbers) && maxOddNumbers.length() == numberLength &&
maxOddNumbers.substring(2, 6).equals(formatYear)) {
//截取后四位数
String endNum = maxOddNumbers.substring(maxOddNumbers.length() - 6);
//把截取的最后六位数解析为int
int endIntNum = Integer.parseInt(endNum);
//在将其加1(自增1)
newEndIntNum = endIntNum + 1;
} else {
// 如果为空(第一次生成)或者当前最大订单号的日期与当前日期不一致说明需要重新计数生成单号
newEndIntNum = 1;
}
//生成单号
String newOddNumber = String.format("%s%s%06d", "CF", formatYear, newEndIntNum);
//将单号返回
return newOddNumber;
}
/** /**
* 功能描述: 自动生成收款单单单号 * 功能描述: 自动生成收款单单单号
......
...@@ -4,6 +4,10 @@ import lombok.*; ...@@ -4,6 +4,10 @@ import lombok.*;
import java.util.*; import java.util.*;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import org.springframework.format.annotation.DateTimeFormat;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/** /**
* 操作跟进 DO * 操作跟进 DO
...@@ -43,7 +47,8 @@ public class ConsFollowupDO extends BaseDO { ...@@ -43,7 +47,8 @@ public class ConsFollowupDO extends BaseDO {
/** /**
* 跟进时间 * 跟进时间
*/ */
private Long followTime; @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private Date followTime;
/** /**
* 跟进人 * 跟进人
*/ */
...@@ -51,6 +56,7 @@ public class ConsFollowupDO extends BaseDO { ...@@ -51,6 +56,7 @@ public class ConsFollowupDO extends BaseDO {
/** /**
* 下次跟进时间 * 下次跟进时间
*/ */
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private Date nextFollowTime; private Date nextFollowTime;
/** /**
* 下次跟进内容 * 下次跟进内容
......
...@@ -5,54 +5,41 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.AbstractMapper; ...@@ -5,54 +5,41 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.AbstractMapper;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQuery; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQuery;
import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO; import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO;
import cn.iocoder.yudao.module.order.dal.dataobject.consFollowup.ConsFollowupDO; import cn.iocoder.yudao.module.order.dal.dataobject.consFollowup.ConsFollowupDO;
import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupBackVO;
import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupQueryVO; import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupQueryVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
/** /**
* 操作跟进 Mapper * 操作跟进 Mapper
*
* @author jayden * @author jayden
*/ */
@Mapper @Mapper
public interface ConsFollowupMapper extends AbstractMapper<ConsFollowupDO> { public interface ConsFollowupMapper extends AbstractMapper<ConsFollowupDO> {
@Override
default PageResult<ConsFollowupDO> selectPage(PageVO page, Object object) {
if (object instanceof ConsFollowupQueryVO) {
ConsFollowupQueryVO vo = (ConsFollowupQueryVO)object;
return selectPage(page, new LambdaQuery<ConsFollowupDO>()
.eqIfPresent(ConsFollowupDO::getConsId, vo.getConsId())
.betweenIfPresent(ConsFollowupDO::getCreateTime, vo.getBeginCreateTime(), vo.getEndCreateTime())
.eqIfPresent(ConsFollowupDO::getFollowNumber, vo.getFollowNumber())
.eqIfPresent(ConsFollowupDO::getStatus, vo.getStatus())
.eqIfPresent(ConsFollowupDO::getFollowContent, vo.getFollowContent())
.betweenIfPresent(ConsFollowupDO::getFollowTime, vo.getBeginFollowTime(), vo.getEndFollowTime())
.eqIfPresent(ConsFollowupDO::getFollowUserId, vo.getFollowUserId())
.betweenIfPresent(ConsFollowupDO::getNextFollowTime, vo.getBeginNextFollowTime(), vo.getEndNextFollowTime())
.eqIfPresent(ConsFollowupDO::getNextFollowContent, vo.getNextFollowContent())
.orderByDesc(ConsFollowupDO::getId));
}
return null;
}
@Override @Override
default List<ConsFollowupDO> selectList(Object object) { default List<ConsFollowupDO> selectList(Object object) {
if (object instanceof ConsFollowupQueryVO) { if (object instanceof ConsFollowupQueryVO) {
ConsFollowupQueryVO vo = (ConsFollowupQueryVO)object; ConsFollowupQueryVO vo = (ConsFollowupQueryVO) object;
return selectList(new LambdaQuery<ConsFollowupDO>() return selectList(new LambdaQuery<ConsFollowupDO>()
.eqIfPresent(ConsFollowupDO::getConsId, vo.getConsId()) .eqIfPresent(ConsFollowupDO::getConsId, vo.getConsId())
.betweenIfPresent(ConsFollowupDO::getCreateTime, vo.getBeginCreateTime(), vo.getEndCreateTime()) .betweenIfPresent(ConsFollowupDO::getCreateTime, vo.getBeginCreateTime(), vo.getEndCreateTime())
.eqIfPresent(ConsFollowupDO::getFollowNumber, vo.getFollowNumber()) .eqIfPresent(ConsFollowupDO::getFollowNumber, vo.getFollowNumber())
.eqIfPresent(ConsFollowupDO::getStatus, vo.getStatus()) .eqIfPresent(ConsFollowupDO::getStatus, vo.getStatus())
.eqIfPresent(ConsFollowupDO::getFollowContent, vo.getFollowContent()) .eqIfPresent(ConsFollowupDO::getFollowContent, vo.getFollowContent())
.betweenIfPresent(ConsFollowupDO::getFollowTime, vo.getBeginFollowTime(), vo.getEndFollowTime()) .betweenIfPresent(ConsFollowupDO::getFollowTime, vo.getBeginFollowTime(), vo.getEndFollowTime())
.eqIfPresent(ConsFollowupDO::getFollowUserId, vo.getFollowUserId()) .eqIfPresent(ConsFollowupDO::getFollowUserId, vo.getFollowUserId())
.betweenIfPresent(ConsFollowupDO::getNextFollowTime, vo.getBeginNextFollowTime(), vo.getEndNextFollowTime()) .betweenIfPresent(ConsFollowupDO::getNextFollowTime, vo.getBeginNextFollowTime(), vo.getEndNextFollowTime())
.eqIfPresent(ConsFollowupDO::getNextFollowContent, vo.getNextFollowContent()) .eqIfPresent(ConsFollowupDO::getNextFollowContent, vo.getNextFollowContent())
.orderByDesc(ConsFollowupDO::getId)); .orderByDesc(ConsFollowupDO::getId));
} }
return null; return null;
} }
Long myCount(@Param("query") ConsFollowupQueryVO query);
List<ConsFollowupBackVO> myPageList(@Param("start") int start, @Param("size") int size, @Param("query") ConsFollowupQueryVO query);
} }
...@@ -44,7 +44,6 @@ public class ConsExceptionServiceImpl extends AbstractService<ConsExceptionMappe ...@@ -44,7 +44,6 @@ public class ConsExceptionServiceImpl extends AbstractService<ConsExceptionMappe
List<String> exceptionUrls = createReqVO.getExceptionUrls(); List<String> exceptionUrls = createReqVO.getExceptionUrls();
for (String exceptionUrl : exceptionUrls) { for (String exceptionUrl : exceptionUrls) {
ConsMediaDO consMediaDO = new ConsMediaDO() ConsMediaDO consMediaDO = new ConsMediaDO()
.setId(id)
.setMediaBusinessType(createReqVO.getMediaBusinessType()) .setMediaBusinessType(createReqVO.getMediaBusinessType())
.setTableName("ecw_cons_exception") .setTableName("ecw_cons_exception")
.setColumnName("files") .setColumnName("files")
......
...@@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; ...@@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.service.IService; import cn.iocoder.yudao.framework.mybatis.core.service.IService;
import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO; import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO;
import cn.iocoder.yudao.module.order.dal.dataobject.consFollowup.ConsFollowupDO; import cn.iocoder.yudao.module.order.dal.dataobject.consFollowup.ConsFollowupDO;
import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupBackVO;
import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupCreateReqVO; import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupCreateReqVO;
import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupQueryVO; import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupQueryVO;
import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupUpdateReqVO; import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupUpdateReqVO;
...@@ -46,7 +47,7 @@ public interface ConsFollowupService extends IService<ConsFollowupDO> { ...@@ -46,7 +47,7 @@ public interface ConsFollowupService extends IService<ConsFollowupDO> {
* @param id 编号 * @param id 编号
* @return 操作跟进 * @return 操作跟进
*/ */
ConsFollowupDO getConsFollowup(Long id); ConsFollowupBackVO getConsFollowup(Long id);
/** /**
* 获得操作跟进列表 * 获得操作跟进列表
...@@ -63,7 +64,7 @@ public interface ConsFollowupService extends IService<ConsFollowupDO> { ...@@ -63,7 +64,7 @@ public interface ConsFollowupService extends IService<ConsFollowupDO> {
* @param query 查询 * @param query 查询
* @return 操作跟进分页 * @return 操作跟进分页
*/ */
PageResult<ConsFollowupDO> getConsFollowupPage(ConsFollowupQueryVO query, PageVO page); PageResult<ConsFollowupBackVO> getConsFollowupPage(ConsFollowupQueryVO query, PageVO page);
/** /**
* 获得操作跟进列表, 用于 Excel 导出 * 获得操作跟进列表, 用于 Excel 导出
......
package cn.iocoder.yudao.module.order.service.consFollowup; package cn.iocoder.yudao.module.order.service.consFollowup;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.apollo.core.event.Order.OrderNumberLogEvent;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.code.CodeUtils;
import cn.iocoder.yudao.framework.i18n.core.I18nMessage;
import cn.iocoder.yudao.framework.mybatis.core.service.AbstractService; import cn.iocoder.yudao.framework.mybatis.core.service.AbstractService;
import cn.iocoder.yudao.module.customer.vo.customerFollowup.CustomerFollowupNumberBackVO;
import cn.iocoder.yudao.module.order.convert.consFollowup.ConsFollowupConvert; import cn.iocoder.yudao.module.order.convert.consFollowup.ConsFollowupConvert;
import cn.iocoder.yudao.module.order.dal.dataobject.consFollowup.ConsFollowupDO; import cn.iocoder.yudao.module.order.dal.dataobject.consFollowup.ConsFollowupDO;
import cn.iocoder.yudao.module.order.dal.dataobject.consMedia.ConsMediaDO;
import cn.iocoder.yudao.module.order.dal.mysql.consFollowup.ConsFollowupMapper; import cn.iocoder.yudao.module.order.dal.mysql.consFollowup.ConsFollowupMapper;
import cn.iocoder.yudao.module.order.dal.mysql.consMedia.ConsMediaMapper;
import cn.iocoder.yudao.module.order.vo.cons.ConsBackVO;
import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupBackVO;
import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupCreateReqVO; import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupCreateReqVO;
import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupQueryVO; import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupQueryVO;
import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupUpdateReqVO; import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupUpdateReqVO;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO; import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO;
...@@ -24,22 +36,88 @@ import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO; ...@@ -24,22 +36,88 @@ import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO;
@Validated @Validated
public class ConsFollowupServiceImpl extends AbstractService<ConsFollowupMapper, ConsFollowupDO> implements ConsFollowupService { public class ConsFollowupServiceImpl extends AbstractService<ConsFollowupMapper, ConsFollowupDO> implements ConsFollowupService {
/**
* 最新跟进单号缓存
*/
private static final String FOLLOWUP_NEW_NUMBER = "cons:followup:new:number";
@Resource @Resource
private ConsFollowupMapper consFollowupMapper; private ConsFollowupMapper consFollowupMapper;
@Resource
private ConsMediaMapper consMediaMapper;
// 注入applicationContext
@Resource
private ApplicationContext applicationContext;
/**
* 跟进单编号生成方式:GJ+年份+六位数字,按年份累计
*
* @return
*/
public String getConsFollowupNumbers() {
// 跟进单号生成
OrderNumberLogEvent event = new OrderNumberLogEvent();
event.setType(6);
event.setNumberKey(FOLLOWUP_NEW_NUMBER);
applicationContext.publishEvent(event);
return CodeUtils.getOddFollowupNumbers(event.getNumber());
}
@Transactional
@Override @Override
public Long createConsFollowup(ConsFollowupCreateReqVO createReqVO) { public Long createConsFollowup(ConsFollowupCreateReqVO createReqVO) {
// 插入 // 插入
ConsFollowupDO consFollowup = ConsFollowupConvert.INSTANCE.convert(createReqVO); ConsFollowupDO consFollowup = ConsFollowupConvert.INSTANCE.convert(createReqVO);
consFollowup.setFollowNumber(getConsFollowupNumbers());
consFollowupMapper.insert(consFollowup); consFollowupMapper.insert(consFollowup);
// 返回 Long id = consFollowup.getId();
if (createReqVO.getExceptionUrls() != null && !createReqVO.getExceptionUrls().isEmpty()) {
List<String> exceptionUrls = createReqVO.getExceptionUrls();
for (String exceptionUrl : exceptionUrls) {
ConsMediaDO consMediaDO = new ConsMediaDO()
.setMediaBusinessType(createReqVO.getMediaBusinessType())
.setTableName("ecw_cons_followup")
.setColumnName("files")
.setMediaUrl(exceptionUrl)
.setBizId(id)
.setConsId(createReqVO.getConsId());
consMediaMapper.insert(consMediaDO);
}
}
return consFollowup.getId(); return consFollowup.getId();
} }
@Transactional
@Override @Override
public void updateConsFollowup(ConsFollowupUpdateReqVO updateReqVO) { public void updateConsFollowup(ConsFollowupUpdateReqVO updateReqVO) {
// 更新 // 更新
ConsFollowupDO updateObj = ConsFollowupConvert.INSTANCE.convert(updateReqVO); ConsFollowupDO updateObj = ConsFollowupConvert.INSTANCE.convert(updateReqVO);
Map<String, Long> map = consMediaMapper.selectList(new LambdaQueryWrapper<ConsMediaDO>()
.eq(ConsMediaDO::getTableName, "ecw_cons_followup")
.eq(ConsMediaDO::getColumnName, "files")
.eq(ConsMediaDO::getBizId, updateReqVO.getId())).stream().collect(Collectors.toMap(ConsMediaDO::getMediaUrl, ConsMediaDO::getId));
//新增
if (updateReqVO.getExceptionUrls() != null && !updateReqVO.getExceptionUrls().isEmpty()) {
List<String> exceptionUrls = updateReqVO.getExceptionUrls();
for (String exceptionUrl : exceptionUrls) {
if (map.containsKey(exceptionUrl)) {
map.remove(exceptionUrl);
} else {
ConsMediaDO consMediaDO = new ConsMediaDO()
.setMediaBusinessType(updateReqVO.getMediaBusinessType())
.setTableName("ecw_cons_followup")
.setColumnName("files")
.setMediaUrl(exceptionUrl)
.setBizId(updateReqVO.getId())
.setConsId(updateReqVO.getConsId());
consMediaMapper.insert(consMediaDO);
}
}
}
//删除
if (!map.isEmpty()) {
consMediaMapper.deleteBatchIds(map.values());
}
consFollowupMapper.updateById(updateObj); consFollowupMapper.updateById(updateObj);
} }
...@@ -50,8 +128,13 @@ public class ConsFollowupServiceImpl extends AbstractService<ConsFollowupMapper, ...@@ -50,8 +128,13 @@ public class ConsFollowupServiceImpl extends AbstractService<ConsFollowupMapper,
} }
@Override @Override
public ConsFollowupDO getConsFollowup(Long id) { public ConsFollowupBackVO getConsFollowup(Long id) {
return consFollowupMapper.selectById(id); ConsFollowupBackVO consFollowupBackVO = consFollowupMapper.myPageList(0, 1, new ConsFollowupQueryVO().setId(id)).get(0);
consFollowupBackVO.setExceptionUrls(consMediaMapper.selectList(new LambdaQueryWrapper<ConsMediaDO>()
.eq(ConsMediaDO::getTableName, "ecw_cons_followup")
.eq(ConsMediaDO::getColumnName, "files")
.eq(ConsMediaDO::getBizId, id)).stream().map(ConsMediaDO::getMediaUrl).collect(Collectors.toList()));
return consFollowupBackVO;
} }
@Override @Override
...@@ -60,8 +143,13 @@ public class ConsFollowupServiceImpl extends AbstractService<ConsFollowupMapper, ...@@ -60,8 +143,13 @@ public class ConsFollowupServiceImpl extends AbstractService<ConsFollowupMapper,
} }
@Override @Override
public PageResult<ConsFollowupDO> getConsFollowupPage(ConsFollowupQueryVO query, PageVO page) { public PageResult<ConsFollowupBackVO> getConsFollowupPage(ConsFollowupQueryVO query, PageVO page) {
return consFollowupMapper.selectPage(page, query); long total = consFollowupMapper.myCount(query);
log.warn(I18nMessage.getLang().toString());
int start = (page.getPage() - 1) * page.getRows();
int size = page.getRows();
List<ConsFollowupBackVO> consBackVOS = consFollowupMapper.myPageList(start, size, query);
return new PageResult<>(consBackVOS, total, size, page.getPage(), (total + size - 1) / size);
} }
@Override @Override
......
package cn.iocoder.yudao.module.order.vo.consFollowup; package cn.iocoder.yudao.module.order.vo.consFollowup;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import io.swagger.annotations.*; import io.swagger.annotations.*;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/** /**
* 操作跟进 Response VO * 操作跟进 Response VO
* @author jayden *
*/ * @author jayden
*/
@Data @Data
@ApiModel("管理后台 - 操作跟进 Response VO") @ApiModel("管理后台 - 操作跟进 Response VO")
public class ConsFollowupBackVO { public class ConsFollowupBackVO {
...@@ -24,10 +30,18 @@ public class ConsFollowupBackVO { ...@@ -24,10 +30,18 @@ public class ConsFollowupBackVO {
private Long consId; private Long consId;
@ExcelProperty("") @ExcelProperty("")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "", required = true)
private Date createTime; private Date createTime;
@ApiModelProperty(value = "创建人")
private String creatorName;
@ApiModelProperty(value = "修改人")
private String updaterName;
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private Date updateTime;
@ExcelProperty("跟进编号,编号规则:CF+年份+6位序列号 例如CF25000001") @ExcelProperty("跟进编号,编号规则:CF+年份+6位序列号 例如CF25000001")
@ApiModelProperty(value = "跟进编号,编号规则:CF+年份+6位序列号 例如CF25000001") @ApiModelProperty(value = "跟进编号,编号规则:CF+年份+6位序列号 例如CF25000001")
private String followNumber; private String followNumber;
...@@ -42,14 +56,15 @@ public class ConsFollowupBackVO { ...@@ -42,14 +56,15 @@ public class ConsFollowupBackVO {
@ExcelProperty("跟进时间") @ExcelProperty("跟进时间")
@ApiModelProperty(value = "跟进时间") @ApiModelProperty(value = "跟进时间")
private Long followTime; @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private Date followTime;
@ExcelProperty("跟进人") @ExcelProperty("跟进人")
@ApiModelProperty(value = "跟进人") @ApiModelProperty(value = "跟进人")
private Long followUserId; private Long followUserId;
@ExcelProperty("下次跟进时间") @ExcelProperty("下次跟进时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY)
@ApiModelProperty(value = "下次跟进时间") @ApiModelProperty(value = "下次跟进时间")
private Date nextFollowTime; private Date nextFollowTime;
...@@ -57,4 +72,20 @@ public class ConsFollowupBackVO { ...@@ -57,4 +72,20 @@ public class ConsFollowupBackVO {
@ApiModelProperty(value = "下次跟进内容") @ApiModelProperty(value = "下次跟进内容")
private String nextFollowContent; private String nextFollowContent;
@ApiModelProperty(value = "客户名称")
private String customerName;
@ApiModelProperty(value = "客户编号")
private String customerNumber;
@ApiModelProperty(value = "跟进人名称")
private String followUserName;
@ApiModelProperty(value = "包裹编号")
private String consNum;
/**
* 文件
*/
private List<String> exceptionUrls;
} }
package cn.iocoder.yudao.module.order.vo.consFollowup; package cn.iocoder.yudao.module.order.vo.consFollowup;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import io.swagger.annotations.*; import io.swagger.annotations.*;
import javax.validation.constraints.*; import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
/** /**
* 操作跟进 Base VO,提供给添加、修改、详细的子 VO 使用 * 操作跟进 Base VO,提供给添加、修改、详细的子 VO 使用
...@@ -29,16 +30,28 @@ public class ConsFollowupBaseVO { ...@@ -29,16 +30,28 @@ public class ConsFollowupBaseVO {
private String followContent; private String followContent;
@ApiModelProperty(value = "跟进时间") @ApiModelProperty(value = "跟进时间")
private Long followTime; @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private Date followTime;
@ApiModelProperty(value = "跟进人") @ApiModelProperty(value = "跟进人")
private Long followUserId; private Long followUserId;
@ApiModelProperty(value = "下次跟进时间") @ApiModelProperty(value = "下次跟进时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private Date nextFollowTime; private Date nextFollowTime;
@ApiModelProperty(value = "下次跟进内容") @ApiModelProperty(value = "下次跟进内容")
private String nextFollowContent; private String nextFollowContent;
/**
* 文件
*/
private List<String> exceptionUrls;
/**
* 文件业务类型,来自于字典表 cons_media_business_type
*/
private Integer mediaBusinessType;
} }
package cn.iocoder.yudao.module.order.vo.consFollowup; package cn.iocoder.yudao.module.order.vo.consFollowup;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import io.swagger.annotations.*; import io.swagger.annotations.*;
import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
...@@ -12,14 +15,17 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ ...@@ -12,14 +15,17 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
@ApiModel("管理后台 - 操作跟进查询 VO") @ApiModel("管理后台 - 操作跟进查询 VO")
public class ConsFollowupQueryVO { public class ConsFollowupQueryVO {
@ApiModelProperty(value = "id")
private Long id;
@ApiModelProperty(value = "包裹ID") @ApiModelProperty(value = "包裹ID")
private Long consId; private Long consId;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "开始") @ApiModelProperty(value = "开始")
private Date beginCreateTime; private Date beginCreateTime;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "结束") @ApiModelProperty(value = "结束")
private Date endCreateTime; private Date endCreateTime;
...@@ -41,15 +47,29 @@ public class ConsFollowupQueryVO { ...@@ -41,15 +47,29 @@ public class ConsFollowupQueryVO {
@ApiModelProperty(value = "跟进人") @ApiModelProperty(value = "跟进人")
private Long followUserId; private Long followUserId;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "开始下次跟进时间") @ApiModelProperty(value = "开始下次跟进时间")
private Date beginNextFollowTime; private Date beginNextFollowTime;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "结束下次跟进时间") @ApiModelProperty(value = "结束下次跟进时间")
private Date endNextFollowTime; private Date endNextFollowTime;
@ApiModelProperty(value = "下次跟进内容") @ApiModelProperty(value = "下次跟进内容")
private String nextFollowContent; private String nextFollowContent;
@ApiModelProperty(value = "包裹编号")
private String consNum;
@ApiModelProperty(value = "联系人手机号")
private String relationPhone;
@ApiModelProperty(value = "状态列表")
private List<Integer> statusList;
@ApiModelProperty(value = "创建人")
private String creator;
@ApiModelProperty(value = "客户")
private String customerName;
} }
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.order.dal.mysql.consFollowup.ConsFollowupMapper">
<select id="myCount" resultType="java.lang.Long">
select count(1)
FROM ecw_cons_followup ecf
LEFT JOIN ecw_cons cons on cons.id = ecf.cons_id
left join ecw_customer ec on ec.id = cons.customer_id
left join system_user csu on csu.id = ecf.creator
left join system_user usu on usu.id = ecf.updater
left join system_user fsu on fsu.id = ecf.follow_user_id
left join ecw_customer_contacts cc on cc.id = ec.id
<include refid="myQuery"/>
</select>
<select id="myPageList" resultType="cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupBackVO"
parameterType="cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupQueryVO">
SELECT ecf.*,
cons.cons_num as consNum,
ec.name as customer_name,
ec.number as customer_number,
csu.nickname as creator_name,
usu.nickname as updater_name,
fsu.nickname as followUserName,
cc.phone_new as relation_phone
FROM ecw_cons_followup ecf
LEFT JOIN ecw_cons cons on cons.id = ecf.cons_id
left join ecw_customer ec on ec.id = cons.customer_id
left join system_user csu on csu.id = ecf.creator
left join system_user usu on usu.id = ecf.updater
left join system_user fsu on fsu.id = ecf.follow_user_id
left join ecw_customer_contacts cc on cc.id = ec.id
WHERE ecf.deleted = 0
<include refid="myQuery"/>
order by ecf.create_time desc
limit #{start}, #{size}
</select>
<sql id="myQuery">
<if test="query.statusList != null and query.statusList.size() > 0">
AND ecf.`status` IN
<foreach item='item' collection='query.statusList' open='(' close=')' separator=','> #{item} </foreach>
</if>
<if test="query.id != null and query.id != '' ">
AND ecf.id = #{query.id}
</if>
<if test="query.consNum != null and query.consNum != '' ">
AND cons.consNum like concat("%",concat(#{query.consNum},"%"))
</if>
<if test="query.customerName != null and query.customerName != '' ">
AND (ec.number like concat("%",concat(#{query.customerName},"%"))
or ec.name like concat("%",concat(#{query.customerName},"%")))
</if>
<if test="query.relationPhone != null and query.relationPhone != '' ">
AND cc.phone_new like concat("%",concat(#{query.relationPhone},"%"))
</if>
/*跟进时间*/
<if test="query.beginFollowTime != null and query.endFollowTime != null ">
AND ecf.follow_time between #{query.beginFollowTime} and #{query.endFollowTime}
</if>
<if test="query.beginNextFollowTime != null and query.endNextFollowTime != null ">
AND ecf.next_follow_time between #{query.beginNextFollowTime} and #{query.endNextFollowTime}
</if>
<if test="query.beginCreateTime != null and query.endCreateTime != null ">
AND ecf.create_time between #{query.beginCreateTime} and #{query.endCreateTime}
</if>
<if test="query.followUserId != null and query.followUserId != '' ">
AND ecf.follow_user_id = #{query.followUserId}
</if>
<if test="query.creator != null and query.creator != '' ">
AND ecf.creator = #{query.creator}
</if>
</sql>
</mapper>
...@@ -69,8 +69,7 @@ public class ConsFollowupController { ...@@ -69,8 +69,7 @@ public class ConsFollowupController {
@ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
@PreAuthorize("@ss.hasPermission('ecw:cons-followup:query')") @PreAuthorize("@ss.hasPermission('ecw:cons-followup:query')")
public CommonResult<ConsFollowupBackVO> getConsFollowup(@RequestParam("id") Long id) { public CommonResult<ConsFollowupBackVO> getConsFollowup(@RequestParam("id") Long id) {
ConsFollowupDO consFollowup = consFollowupService.getConsFollowup(id); return success(consFollowupService.getConsFollowup(id));
return success(ConsFollowupConvert.INSTANCE.convert(consFollowup));
} }
@GetMapping("/list") @GetMapping("/list")
...@@ -86,8 +85,7 @@ public class ConsFollowupController { ...@@ -86,8 +85,7 @@ public class ConsFollowupController {
@ApiOperation("获得操作跟进分页") @ApiOperation("获得操作跟进分页")
@PreAuthorize("@ss.hasPermission('ecw:cons-followup:query')") @PreAuthorize("@ss.hasPermission('ecw:cons-followup:query')")
public CommonResult<PageResult<ConsFollowupBackVO>> getConsFollowupPage(@Valid ConsFollowupQueryVO query, PageVO page) { public CommonResult<PageResult<ConsFollowupBackVO>> getConsFollowupPage(@Valid ConsFollowupQueryVO query, PageVO page) {
PageResult<ConsFollowupDO> pageResult = consFollowupService.getConsFollowupPage(query, page); return success(consFollowupService.getConsFollowupPage(query, page));
return success(ConsFollowupConvert.INSTANCE.convertPage(pageResult));
} }
@GetMapping("/export-excel") @GetMapping("/export-excel")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment