This commit is contained in:
mx 2024-11-12 15:18:10 +08:00
parent cd2e67404a
commit 2fc23fe47a
21 changed files with 149 additions and 128 deletions

View File

@ -244,7 +244,7 @@ public class PsCustomController extends BaseController {
@RepeatSubmit
@Log(title = "指派")
@GetMapping("/assign")
public R<Void> assign(@NotNull Long customerId,@NotNull Long userId) {
public R<Void> assign(@NotNull Long customerId, @NotNull Long userId) {
psCustomInfoService.assign(customerId,userId);
return R.ok();
}

View File

@ -1,58 +0,0 @@
package com.pusong.business.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaIgnore;
import com.pusong.business.domain.bo.PsCustomCallbackBo;
import com.pusong.business.domain.bo.PsCustomInfoBo;
import com.pusong.business.domain.bo.PsCustomPriceBo;
import com.pusong.business.domain.vo.PsCustomInfoVo;
import com.pusong.business.domain.vo.PsCustomerRecordVo;
import com.pusong.business.service.IPsCustomInfoService;
import com.pusong.common.core.domain.R;
import com.pusong.common.core.validate.AddGroup;
import com.pusong.common.core.validate.EditGroup;
import com.pusong.common.idempotent.annotation.RepeatSubmit;
import com.pusong.common.log.annotation.Log;
import com.pusong.common.log.enums.BusinessType;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.web.core.BaseController;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 客户基本信息
*
* @author Lion Li
* @date 2024-07-25
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/business/home")
public class PsHomeController extends BaseController {
private final IPsCustomInfoService psCustomInfoService;
// /**
// * 查询登陆人下所有的客户名称和id
// */
// @RepeatSubmit()
// @SaCheckPermission("business:customInfo:list")
// @GetMapping("/listByLoginUser")
// public R<List<PsCustomInfoVo>> listByLoginUser() {
// return R.ok(psCustomInfoService.listByLoginUser());
// }
@RepeatSubmit()
@SaCheckPermission("business:statistics")
@GetMapping("/statistics")
public R<List<PsCustomInfoVo>> statistics() {
return R.ok();
}
}

View File

@ -28,6 +28,11 @@ public class PsTaskQueryBo {
*/
private String companyName;
/**
* 服务公司名称
*/
private String serviceCompanyName;
/**
* 纳税人识别号
*/

View File

@ -94,4 +94,9 @@ public class PsTaskWorkRecordVo implements Serializable {
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME,mapper = "executor")
private String executorName;
/**
* 创建者
*/
private String createBy;
}

View File

@ -20,6 +20,7 @@ import com.pusong.common.mybatis.enums.DataScopeType;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDate;
import java.time.temporal.Temporal;
import java.util.List;
import java.util.Map;
@ -58,12 +59,12 @@ public interface PsContractInfoMapper extends BaseMapperPlus<PsContractInfo, PsC
//首页查询各个渠道成交的合同
List<ChannelPayInfo> byChannel(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
List<ChannelPayInfo> byChannel(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper, Temporal startTime, Temporal endTime);
//首页查询各个渠道成交的合同
@DataPermission({
@DataColumn(key = "userName", value = "info.custom_manager")
})
List<ChannelPayInfo> byChannelUser(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
List<ChannelPayInfo> byChannelUser(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper, Temporal startTime, Temporal endTime);
}

View File

@ -1,8 +1,15 @@
package com.pusong.business.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.PsTaskWorkRecord;
import com.pusong.business.domain.vo.PsContractBusinessVo;
import com.pusong.business.domain.vo.PsTaskWorkRecordVo;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 外勤任务记录Mapper接口
@ -11,5 +18,6 @@ import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
* @date 2024-08-09
*/
public interface PsTaskWorkRecordMapper extends BaseMapperPlus<PsTaskWorkRecord, PsTaskWorkRecordVo> {
List<PsTaskWorkRecordVo> selectListAndUser(@Param(Constants.WRAPPER) Wrapper<PsTaskWorkRecord> queryWrapper);
}

View File

@ -116,7 +116,7 @@ public class PayContractApproverServiceImpl extends ApproverAbstractServiceImpl
if (ContractStatusEnum.CREATE.getCode().equals(info.getContractStatus())){
noticeService.sendNotice(SysNoticeBo.getFirstPayErrorInstance(info.getCustomManager(), info.getPsCustomInfoVo().getCustomName(), psApproverRecord.getApproverDesc()));
}else{
if (info.getResidualMoney().doubleValue() > 0){
if (info.getResidualMoney().subtract(update.getMoney()).doubleValue() > 0){
noticeService.sendNotice(SysNoticeBo.getPayErrorInstance(info.getCustomManager(), info.getPsCustomInfoVo().getCustomName(), psApproverRecord.getApproverDesc()));
}else{
noticeService.sendNotice(SysNoticeBo.getLastPayErrorInstance(info.getCustomManager(), info.getPsCustomInfoVo().getCustomName(), psApproverRecord.getApproverDesc()));

View File

@ -63,7 +63,7 @@ public class PublicApproverServiceImpl extends ApproverAbstractServiceImpl {
info.setCustomManager(Long.valueOf(psApproverRecord.getUpdateData()));
info.setAcceptDate(new Date());
customInfoMapper.updateById(info);
noticeService.sendNotice(SysNoticeBo.getGonghaiShenpiInstance(info.getCustomManager()));
noticeService.sendNotice(SysNoticeBo.getGonghaiShenpiInstance(info.getCustomManager(), info.getCustomName()));
}
/**
@ -76,7 +76,7 @@ public class PublicApproverServiceImpl extends ApproverAbstractServiceImpl {
info.setCustomStatus(CustomerStatusEnum.PUBLIC.getCode());
info.setCustomManager(Long.valueOf(psApproverRecord.getUpdateData()));
customInfoMapper.updateById(info);
noticeService.sendNotice(SysNoticeBo.getGonghaiZhipaiErrorInstance(info.getCustomManager(), psApproverRecord.getApproverDesc()));
noticeService.sendNotice(SysNoticeBo.getGonghaiZhipaiErrorInstance(info.getCustomManager(), info.getCustomName(), psApproverRecord.getApproverDesc()));
}
/**

View File

@ -57,7 +57,7 @@ public class UpdateContractApproverServiceImpl extends ApproverAbstractServiceIm
contractInfoService.update(src, bo);
noticeService.sendNotice(SysNoticeBo.getUpdateContractInstance(src.getCustomManager(), psApproverRecord.getApproverDesc()));
noticeService.sendNotice(SysNoticeBo.getUpdateContractInstance(src.getCustomManager(), src.getPsCustomInfoVo().getCustomName()));
//3.修改后操作
// afterUpdateOperate(bo, src);

View File

@ -29,7 +29,10 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.chrono.ChronoLocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.Temporal;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.stream.Collectors;
@ -84,23 +87,25 @@ public class HomeServiceImpl implements HomeService {
//续期合同
makeAmountVo.getRenewInfo().setNum(renewList.size()+"");
makeAmountVo.getRenewInfo().setMoney(renewList.stream().map(PsContractInfo::getContractAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
fillPay(renewList,makeAmountVo.getRenewInfo());
fillPay(renewList, makeAmountVo.getRenewInfo(), startDate, endDate);
//新签合同
makeAmountVo.getNewInfo().setNum(newList.size()+"");
makeAmountVo.getNewInfo().setMoney(newList.stream().map(PsContractInfo::getContractAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
fillPay(newList,makeAmountVo.getNewInfo());
fillPay(newList, makeAmountVo.getNewInfo(), startDate, endDate);
//计算比例
makeAmountVo.cellPer();
return makeAmountVo;
}
private void fillPay(List<PsContractInfo> list, DataAmountVo typeAmountVo){
private void fillPay(List<PsContractInfo> list, DataAmountVo typeAmountVo, Temporal startDate, Temporal endDate){
//续费/新签的合同编码集合
List<String> renewCodes = list.stream().map(PsContractInfo::getContractCode).toList();
//续费/新签的合同已付金额
if(CollectionUtils.isNotEmpty(renewCodes)){
List<PsContractPay> payList = payMapper.selectList(Wrappers.<PsContractPay>query().select("business_type", "sum(money) money").lambda()
.in(PsContractPay::getContractCode, renewCodes).eq(PsContractPay::getPayStatus, PayStatusEnum.SUCCESS.getCode())
.ge(startDate != null, PsContractPay::getCreateTime, startDate)
.le(endDate != null, PsContractPay::getCreateTime, endDate)
.groupBy(PsContractPay::getBusinessType));
BigDecimal payMoney = BigDecimal.ZERO;
for (PsContractPay pay : payList) {
@ -163,28 +168,28 @@ public class HomeServiceImpl implements HomeService {
String date = (String)mapParam.get("date");
//当月合同款总数
BigDecimal sumMoney= new BigDecimal(0);
BigDecimal sumMoney = new BigDecimal(0);
//回款合同数
Integer payNum = 0;
//当月已支付合同金额
BigDecimal payMoney=new BigDecimal(0);
BigDecimal payMoney = new BigDecimal(0);
//当月合同总数
Integer contractNum=0;
Integer contractNum = 0;
Map<String,Object> queryParam=new HashMap<>();
queryParam.put("startDate",startDate);
queryParam.put("endDate",endDate);
queryParam.put("payStatus",PayStatusEnum.SUCCESS.getCode());
queryParam.put("contractStatus",ContractStatusEnum.INIT.getCode());
queryParam.put("isCancel",CommonStatusEnum.SUCCESS.getCode());
queryParam.put("startDate", startDate);
queryParam.put("endDate", endDate);
queryParam.put("payStatus", PayStatusEnum.SUCCESS.getCode());
queryParam.put("contractStatus", ContractStatusEnum.INIT.getCode());
queryParam.put("isCancel", CommonStatusEnum.SUCCESS.getCode());
List<Map<String,Object>> list = psContractInfoMapper.homePageReturnMoneyInfo(queryParam);
//记录合同编码防止重复
Map<String,Integer> repeatNum=new HashMap<>();
for(Map<String,Object> m : list){
//计算已回款金额
BigDecimal money =m.get("money")==null?new BigDecimal(0):(BigDecimal) m.get("money");
String businessType=m.get("business_type")==null?"":m.get("business_type").toString();
BigDecimal money = m.get("money") == null ? new BigDecimal(0) : (BigDecimal) m.get("money");
String businessType = m.get("business_type") == null ? "" : m.get("business_type").toString();
//判断是回款还是退款
if(businessType.equals("1")){
payMoney = payMoney.add(money);
@ -193,14 +198,13 @@ public class HomeServiceImpl implements HomeService {
}
String contractCode=m.get("contract_code").toString();
if(repeatNum.get(contractCode)==null){
String contractCode = m.get("contract_code").toString();
if(repeatNum.get(contractCode) == null){
repeatNum.put(contractCode,1);
sumMoney = sumMoney.add((BigDecimal) m.get("contract_amount"));
contractNum++;
if(businessType.equals("1")){
payMoney = payMoney.add(money);
payNum++;
}
}
@ -303,8 +307,8 @@ public class HomeServiceImpl implements HomeService {
queryParam.put("payStatus", PayStatusEnum.SUCCESS.getCode());
QueryWrapper<PsContractInfo> queryWrapper = new QueryWrapper<PsContractInfo>()
.in(isCaiwu, "role.role_key", Arrays.asList(RoleEnum.caiwu))
.in(!isCaiwu, "role.role_key", Arrays.asList(RoleEnum.xiaoshou));
.in(isCaiwu, "role.role_key", Arrays.asList(RoleEnum.caiwu, RoleEnum.cwzg))
.in(!isCaiwu, "role.role_key", Arrays.asList(RoleEnum.xiaoshou, RoleEnum.xszg));
List<UserContractAmountInfo> list = psContractInfoMapper.getUserContractSourceAmountsByDeptId(queryParam, queryWrapper);
Map<Long,UserContractAmountVo> res = new HashMap<>();
@ -396,8 +400,8 @@ public class HomeServiceImpl implements HomeService {
LocalDate startDate = (LocalDate)mapParam.get("startDate");
LocalDate endDate = (LocalDate)mapParam.get("endDate");
String date = (String)mapParam.get("date");
Map<String,Object> queryParam=new HashMap<>();
LocalDateTime localDateTime2= LocalDateTime.parse("2024-11-07T14:04:00");
Map<String,Object> queryParam = new HashMap<>();
queryParam.put("startDate", startDate);
queryParam.put("endDate", endDate);
queryParam.put("contractStatus", ContractStatusEnum.INIT.getCode());
@ -488,12 +492,13 @@ public class HomeServiceImpl implements HomeService {
queryParam.put("contractStatus", ContractStatusEnum.INIT.getCode());
queryParam.put("isCancel", CommonStatusEnum.SUCCESS.getCode());
queryParam.put("payStatus", PayStatusEnum.SUCCESS.getCode());
LocalDateTime localDateTime2= LocalDateTime.parse("2024-11-07T14:04:00");
QueryWrapper<PsContractInfo> queryWrapper = new QueryWrapper<PsContractInfo>()
.in(isCaiwu, "role.role_key", Arrays.asList(RoleEnum.caiwu))
.in(!isCaiwu, "role.role_key", Arrays.asList(RoleEnum.xiaoshou));
// .in(isCaiwu, "role.role_key", Arrays.asList(RoleEnum.caiwu, RoleEnum.cwzg))
// .in(!isCaiwu, "role.role_key", Arrays.asList(RoleEnum.xiaoshou, RoleEnum.xszg) );
;
List<UserContractAmountInfo> list = psContractInfoMapper.getUserContractAndPayInfo(queryParam, queryWrapper);
Map<Long,UserAmountInfoVo> resMap = new HashMap<>();
Map<Long, UserAmountInfoVo> resMap = new HashMap<>();
//记录合同编码防止重复
Map<String, String> repeatContractCode = new HashMap<>();
for (UserContractAmountInfo obj : list) {
@ -514,7 +519,7 @@ public class HomeServiceImpl implements HomeService {
if(repeatContractCode.get(obj.getContractCode())==null){
repeatContractCode.put(obj.getContractCode(),obj.getContractCode());
repeatContractCode.put(obj.getContractCode(), obj.getContractCode());
vo.addSumAmount(obj.getContractAmount());
}
@ -547,7 +552,7 @@ public class HomeServiceImpl implements HomeService {
List<UserAmountInfoVo> listData = resMap.values().stream().sorted(
Comparator.comparing(UserAmountInfoVo::getSumAmount,Comparator.reverseOrder())).collect(Collectors.toList());
BigDecimal sumAmount = list.stream().map(UserContractAmountInfo::getContractAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal sumAmount = resMap.values().stream().map(UserAmountInfoVo::getSumAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
//计算金额占比
for (UserAmountInfoVo v : listData) {
if(!v.getSumAmount().equals(BigDecimal.ZERO)) {
@ -576,6 +581,11 @@ public class HomeServiceImpl implements HomeService {
Map<String, Object> mapParam = dateType == 1 ? this.getDate(type) : this.getDateByUser(type);
LocalDate startDate = (LocalDate)mapParam.get("startDate");
LocalDate endDate = (LocalDate)mapParam.get("endDate");
// LocalDateTime localDateTime1= LocalDateTime.parse("2024-11-07T00:00:30");
// LocalDateTime localDateTime2= LocalDateTime.parse("2024-11-07T14:04:00");
String date = (String)mapParam.get("date");
//返回dto
ChannelAmountVo res = new ChannelAmountVo();
@ -583,13 +593,13 @@ public class HomeServiceImpl implements HomeService {
log.info("查询日期:{}到{}",startDate,endDate);
QueryWrapper<PsContractInfo> wq = new QueryWrapper<PsContractInfo>()
.ne("info.is_due", CommonStatusEnum.SUCCESS.getCode()).ne("info.contract_status", ContractStatusEnum.INIT.getCode())
.eq("pay.pay_status", PayStatusEnum.SUCCESS.getCode())
// .eq("pay.pay_status", PayStatusEnum.SUCCESS.getCode())
.ge(startDate != null, "info.apply_date", startDate).le(endDate != null, "info.apply_date", endDate);
List<ChannelPayInfo> list;
if(dateType == 1){//所有的数据权限
list = psContractInfoMapper.byChannel(wq);
list = psContractInfoMapper.byChannel(wq, startDate, endDate);
}else{//用户个人的数据权限
list = psContractInfoMapper.byChannelUser(wq);
list = psContractInfoMapper.byChannelUser(wq, startDate, endDate);
}
//查询各个渠道的字典表
@ -610,9 +620,13 @@ public class HomeServiceImpl implements HomeService {
BigDecimal money = BigDecimal.ZERO;
BigDecimal paymoney = BigDecimal.ZERO;
for (ChannelPayInfo pay : payList){
contractCodes.add(pay.getContractCode());
money = money.add(pay.getContractAmount());
paymoney = pay.getBusinessType().equals("1")? paymoney.add(pay.getMoney()) : paymoney.subtract(pay.getMoney());
if (!contractCodes.contains(pay.getContractCode())){
contractCodes.add(pay.getContractCode());
money = money.add(pay.getContractAmount());
}
if (pay.getBusinessType() != null){
paymoney = pay.getBusinessType().equals("1") ? paymoney.add(pay.getMoney()) : paymoney.subtract(pay.getMoney());
}
}
BigDecimal unpaymoney = money.subtract(paymoney);
data.setNum(contractCodes.size()+"");
@ -713,10 +727,12 @@ public class HomeServiceImpl implements HomeService {
Map<String, Object> mapParam = this.getDateByUser(type);
LocalDate startDate = (LocalDate)mapParam.get("startDate");
LocalDate endDate = (LocalDate)mapParam.get("endDate");
String date = (String)mapParam.get("date");
Map<String,Object> queryParam = new HashMap<>();
queryParam.put("startDate",startDate);
queryParam.put("endDate",endDate);
SalasVo salasVo = psHomeMapper.selectContractNumAndAmount(queryParam);
salasVo.setGonghaiNum(psHomeMapper.selectGonghaiNum(queryParam));
salasVo.setCallbackRecordNum(psHomeMapper.selectCallbackRecordNum(queryParam));

View File

@ -582,13 +582,13 @@ public class PsCustomInfoServiceImpl implements IPsCustomInfoService {
* @param customerId 客户id
* @param userId 被指派者
*/
public void assign(Long customerId,Long userId){
public void assign(Long customerId, Long userId){
PsCustomInfo psCustomInfo = baseMapper.selectById(customerId);
psCustomInfo.setCustomStatus(CustomerStatusEnum.INIT.getCode());
psCustomInfo.setCustomManager(userId);
psCustomInfo.setAcceptDate(new Date());
baseMapper.updateById(psCustomInfo);
noticeService.sendNotice(SysNoticeBo.getGonghaiZhipaiInstance(customerId));
noticeService.sendNotice(SysNoticeBo.getGonghaiZhipaiInstance(userId, psCustomInfo.getCustomName()));
}
}

View File

@ -76,7 +76,7 @@ public class PsTaskServiceImpl implements IPsTaskService {
@Autowired
@Lazy
private final IPsContractInfoService contractInfoService;
@Autowired
private SysUserMapper sysUserMapper;
/**
@ -105,6 +105,8 @@ public class PsTaskServiceImpl implements IPsTaskService {
* @return 主任务分页列表
*/
public TableDataInfo<PsTaskMainVo> queryPageList(PsTaskQueryBo bo, PageQuery pageQuery){
bo.setServiceCompanyName(bo.getCompanyName());
bo.setCompanyName(null);
QueryWrapper<PsTaskMain> lqw = buildQueryWrapper(bo);
Page<PsTaskMainVo> page;
if(StringUtils.equals(TaskTypeEnum.INVOICE.getCode(), bo.getType())){//发票任务无需数据权限
@ -611,6 +613,8 @@ public class PsTaskServiceImpl implements IPsTaskService {
lqw.like(StringUtils.isNotBlank(bo.getContractCode()), "main.contract_code", bo.getContractCode());
lqw.like(StringUtils.isNotBlank(bo.getCompanyName()), "com.company_name", bo.getCompanyName());//公司名称
lqw.like(StringUtils.isNotBlank(bo.getServiceCompanyName()), "scom.company_name", bo.getServiceCompanyName());//公司名称
lqw.like(StringUtils.isNotBlank(bo.getCustomerNum()), "com.customer_num", bo.getCustomerNum());//纳税人识别号
lqw.eq(StringUtils.isNotBlank(bo.getCustomerCert()), "com.customer_cert", bo.getCustomerCert());//纳税人资格
lqw.like(StringUtils.isNotBlank(bo.getCustomManagerName()), "usr.nick_name", bo.getCustomManagerName());//销售经理姓名
@ -618,8 +622,8 @@ public class PsTaskServiceImpl implements IPsTaskService {
lqw.like(StringUtils.isNotBlank(bo.getMobile()), "com.legal_person_phone", bo.getMobile());//法人手机号
lqw.like(StringUtils.isNotBlank(bo.getIdNo()), "com.legal_person_idcard", bo.getIdNo());//法人身份证
lqw.like(StringUtils.isNotBlank(bo.getName()), "com.legal_person_name", bo.getName());//法人姓名
lqw.like(StringUtils.isNotBlank(bo.getCustomName()), "com.contact_person_name", bo.getCustomName());//客户姓名
lqw.like(StringUtils.isNotBlank(bo.getCustomMobile()), "com.contact_person_phone", bo.getCustomMobile());//客户电话
lqw.like(StringUtils.isNotBlank(bo.getCustomName()), "scom.contact_person_name", bo.getCustomName());//客户姓名
lqw.like(StringUtils.isNotBlank(bo.getCustomMobile()), "scom.contact_person_phone", bo.getCustomMobile());//客户电话
lqw.eq(StringUtils.isNotBlank(bo.getCustomScene()), "con.custom_scene", bo.getCustomScene());//是否到达现场
lqw.eq(StringUtils.isNotBlank(bo.getIsProxy()), "bus.is_proxy", bo.getIsProxy());//是否代账

View File

@ -1,5 +1,6 @@
package com.pusong.business.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.pusong.business.domain.PsTaskAppoint;
import com.pusong.business.domain.PsTaskMain;
@ -49,10 +50,11 @@ public class PsTaskWorkRecordServiceImpl implements IPsTaskWorkRecordService {
*/
@Override
public List<PsTaskWorkRecordVo> queryListByAppointId(Long id) {
LambdaQueryWrapper<PsTaskWorkRecord> lqw = Wrappers.lambdaQuery();
lqw.eq(PsTaskWorkRecord::getDelFlag,"0");
lqw.eq(PsTaskWorkRecord::getTaskAppointId,id);
return baseMapper.selectVoList(lqw);
QueryWrapper<PsTaskWorkRecord> lqw = new QueryWrapper();
lqw.eq("record.del_flag", "0");
lqw.eq("record.task_appoint_id", id);
return baseMapper.selectListAndUser(lqw);
}
/**
* 根据主任务id查询工作进度列表
@ -68,8 +70,11 @@ public class PsTaskWorkRecordServiceImpl implements IPsTaskWorkRecordService {
}
//转map
Map<Long, PsTaskAppoint> map = list.stream().collect(Collectors.toMap(PsTaskAppoint::getId, Function.identity()));
List<PsTaskWorkRecordVo> lis = baseMapper.selectVoList(Wrappers.<PsTaskWorkRecord>lambdaQuery()
.eq(PsTaskWorkRecord::getDelFlag, "0").in(PsTaskWorkRecord::getTaskAppointId, map.keySet()));
QueryWrapper<PsTaskWorkRecord> lqw = new QueryWrapper();
lqw.eq("record.del_flag", "0");
lqw.in("record.task_appoint_id", map.keySet());
List<PsTaskWorkRecordVo> lis = baseMapper.selectListAndUser(lqw);
lis.forEach(item->{
item.setExecutor(map.get(item.getTaskAppointId()).getExecutor());
});

View File

@ -224,7 +224,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
) cost
from ps_contract_info info
left join ps_custom_info cus on info.custom_id = cus.id
left join ps_contract_pay pay on info.contract_code = pay.contract_code
left join ps_contract_pay pay on info.contract_code = pay.contract_code AND pay.pay_status = '1'
<if test="startTime != null">
AND pay.create_time &gt;= #{startTime}
</if>
<if test="endTime != null">
AND pay.create_time &gt;= #{endTime}
</if>
left join sys_user_post up on up.user_id = info.custom_manager
</sql>

View File

@ -52,7 +52,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectSumPayContractAmount">
select sum(money) from ps_contract_info info
select
(select sum(money) from ps_contract_info info
inner join ps_contract_pay pay on pay.contract_code = info.contract_code and pay.business_type = 1 and pay.del_flag = 0
where
info.contract_status != 10 and info.del_flag = 0
@ -62,6 +63,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="queryParam.endDate != null">
and info.create_time &lt; #{queryParam.endDate}
</if>
)
-
(select sum(money) from ps_contract_info info
inner join ps_contract_pay pay on pay.contract_code = info.contract_code and pay.business_type = 2 and pay.del_flag = 0
where
info.contract_status != 10 and info.del_flag = 0
<if test="queryParam.startDate != null">
and info.create_time >= #{queryParam.startDate}
</if>
<if test="queryParam.endDate != null">
and info.create_time &lt; #{queryParam.endDate}
</if>
)
</select>

View File

@ -75,9 +75,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
left join ps_company_info com on main.company_id = com.id
left join ps_custom_info cus on main.custom_id = cus.id
left join sys_user usr on cus.custom_manager = usr.user_id
left join ps_contract_business bus on bus.contract_code = con.contract_code and bus.company_id = main.service_company_id and bus.del_flag = '0'
</sql><!-- 这注释是上边sql 的,不知道为啥要加这个来着, 因为任务列表分页受影响所以删除left join ps_contract_business bus on bus.contract_code = con.contract_code and bus.company_id = main.service_company_id and bus.del_flag = '0'-->
</sql>
<select id="queryTaskPageList" resultMap="taskMainResult">
<include refid="queryTask"/>
${ew.getCustomSqlSegment}
@ -121,8 +121,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
(select IFNULL(sum(money),0) from ps_contract_pay pay where pay.business_type =1 and pay.contract_code = main.contract_code and pay.pay_status = '1' ) +
(select IFNULL(sum(money),0) from ps_contract_pay cpay where cpay.business_type =2 and cpay.contract_code = main.contract_code )
) > 0 THEN '半款' ELSE '全款' END) as pay_stauts_desc,
(select GROUP_CONCAT(business.business_type SEPARATOR ',') from ps_contract_business business where business.contract_code = con.contract_code and business.company_id = main.service_company_id and business.del_flag = '0') as business_type_name
(select 1 from ps_contract_business business2 where business2.contract_code = con.contract_code and business2.company_id = main.service_company_id and business2.del_flag = '0' and business2.is_proxy = '1' limit 1) as scom_is_proxy
,(select GROUP_CONCAT(business.business_type SEPARATOR ',') from ps_contract_business business where business.contract_code = con.contract_code and business.company_id = main.service_company_id and business.del_flag = '0') as business_type_name
-- ,
-- appoint.executor appoint_executor,
-- appoint.task_desc appoint_task_desc,

View File

@ -4,4 +4,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pusong.business.mapper.PsTaskWorkRecordMapper">
<select id="selectListAndUser" resultType="com.pusong.business.domain.vo.PsTaskWorkRecordVo">
select
record.*,
usr.nick_name createBy
from ps_task_work_record record
left join sys_user usr on usr.user_id = record.create_by
${ew.getCustomSqlSegment}
</select>
</mapper>

View File

@ -12,12 +12,14 @@ public enum RoleEnum {
superadmin("superadmin","超级管理员"),
admin("admin","管理员"),
xiaoshou("xiaoshou","销售"),
xiaoshou("xsry","销售"),
xszg("xszg","销售主管"),
zxzg("zxzg","执行主管"),
tqzxry("tqzxry","特勤执行人员"),
wqzxry("wqzxry","外勤执行人员"),
nqzxry("nqzxry","内勤执行人员"),
caiwu("caiwu","财务"),
cwzg("cwzg","财务主管"),
zongcai("zongcai","总裁"),
topmanage("topmanage","总经理"),
stopacc1("stopaccount","停止代账1"),

View File

@ -1,6 +1,10 @@
package com.pusong.system.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.pusong.common.core.utils.MapstructUtils;
import com.pusong.common.json.utils.JsonUtils;
import com.pusong.common.websocket.dto.WebSocketMessageDto;
import com.pusong.system.domain.SysNotice;
import lombok.RequiredArgsConstructor;
import com.pusong.common.core.domain.R;
import com.pusong.common.core.service.DictService;
@ -61,8 +65,11 @@ public class SysNoticeController extends BaseController {
if (rows <= 0) {
return R.fail();
}
String type = dictService.getDictLabel("sys_notice_type", notice.getNoticeType());
WebSocketUtils.publishAll("[" + type + "] " + notice.getNoticeTitle());
String type = dictService.getDictLabel("sys_notice_type", notice.getNoticeContent());
notice.setNoticeContent("[" + type + "] " + notice.getNoticeTitle());
SysNotice sysNotice = MapstructUtils.convert(notice, SysNotice.class);
SysNoticeVo vo = MapstructUtils.convert(sysNotice, SysNoticeVo.class);
WebSocketUtils.publishAll(JsonUtils.toJsonString(vo));
return R.ok();
}

View File

@ -97,7 +97,7 @@ public class SysNoticeBo extends BaseEntity {
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("\uD83C\uDF89【公海商机来袭\uD83C\uDF89【公海】有新客户啦速来认领抢占先机");
noticeBo.setRecRole(Arrays.asList(RoleEnum.xiaoshou.getCode()));
noticeBo.setRecRole(Arrays.asList(RoleEnum.xiaoshou.getCode(), RoleEnum.xszg.getCode()));
noticeBo.setJumpType(0);
return noticeBo;
}
@ -107,32 +107,32 @@ public class SysNoticeBo extends BaseEntity {
* @param uid
* @return
*/
public static SysNoticeBo getGonghaiShenpiInstance(long uid){
public static SysNoticeBo getGonghaiShenpiInstance(long uid, String customName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("认领客户【客户姓名】审批通过,客户已就绪,速速联系,把握良机!");
noticeBo.setNoticeContent("认领客户【"+ customName +"】审批通过,客户已就绪,速速联系,把握良机!");
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getGonghaiZhipaiInstance(long uid){
public static SysNoticeBo getGonghaiZhipaiInstance(long uid, String customName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("\uD83D\uDCAA客户【客户姓名】已派至名下,把握良机,全力出击,成交在望,动起来!");
noticeBo.setNoticeContent("\uD83D\uDCAA客户【"+ customName +"】已派至名下,把握良机,全力出击,成交在望,动起来!");
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getGonghaiZhipaiErrorInstance(long uid, String desc){
public static SysNoticeBo getGonghaiZhipaiErrorInstance(long uid, String customName, String desc){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("认领客户【客户姓名】审批未过,另选良缘,销售英雄,再攀高峰!拒绝原因:" + desc);
noticeBo.setNoticeContent("认领客户【"+ customName +"】审批未过,另选良缘,销售英雄,再攀高峰!拒绝原因:" + desc);
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
@ -273,7 +273,7 @@ public class SysNoticeBo extends BaseEntity {
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("有一笔【"+ coustomName +"】的待处理的退款,请及时处理。");
noticeBo.setRecRole(Arrays.asList(RoleEnum.caiwu.getCode()));
noticeBo.setRecRole(Arrays.asList(RoleEnum.caiwu.getCode(), RoleEnum.cwzg.getCode()));
noticeBo.setJumpType(0);
return noticeBo;
}

View File

@ -160,14 +160,11 @@ public class SysNoticeServiceImpl implements ISysNoticeService {
for (SysNotice insertDatum : insertData) {
SysNoticeVo vo = MapstructUtils.convert(insertDatum, SysNoticeVo.class);
WebSocketMessageDto webSocketMessage = new WebSocketMessageDto();
// webSocketMessage.setMessage(bo.getNoticeContent());
webSocketMessage.setMessage(JsonUtils.toJsonString(vo));
webSocketMessage.setSessionKeys(Arrays.asList(insertDatum.getRecUid()));
WebSocketUtils.publishMessage(webSocketMessage);
}
return 1;
}catch (Exception e){
logger.error("sendNotice error", e);