消息通知

This commit is contained in:
mx 2024-10-31 10:49:37 +08:00
parent 223981e5e4
commit 9272f9a890
61 changed files with 1107 additions and 163 deletions

View File

@ -268,7 +268,7 @@
<div class="sign" >
<p class="content">乙方名称(签章): ${main.name?if_exists}</p>
<p class="content">乙方纳税人识别号: ${main.customer_num?if_exists}</p>
<p class="content">联系人: ${user.nickname?if_exists}</p>
<p class="content">联系人: ${user.nickName?if_exists}</p>
<p class="content">联系方式: ${user.phonenumber?if_exists}</p>
<p class="content">签约日期: ${contract.applyDate?string('yyyy年MM月dd日')}
<#--<span style=" text-decoration:underline"> </span> 年

View File

@ -19,7 +19,6 @@ import com.pusong.common.core.domain.R;
import com.pusong.common.core.domain.model.LoginBody;
import com.pusong.common.core.domain.model.RegisterBody;
import com.pusong.common.core.domain.model.SocialLoginBody;
import com.pusong.common.core.utils.*;
import com.pusong.common.encrypt.annotation.ApiEncrypt;
import com.pusong.common.json.utils.JsonUtils;
import com.pusong.common.satoken.utils.LoginHelper;
@ -40,7 +39,6 @@ import com.pusong.web.domain.vo.LoginTenantVo;
import com.pusong.web.domain.vo.LoginVo;
import com.pusong.web.domain.vo.TenantListVo;
import com.pusong.web.service.SysLoginService;
import com.pusong.common.core.utils.*;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -80,7 +78,7 @@ public class AuthController {
* @param body 登录信息
* @return 结果
*/
@ApiEncrypt
// @ApiEncrypt
@PostMapping("/login")
public R<LoginVo> login(@RequestBody String body) {
LoginBody loginBody = JsonUtils.parseObject(body, LoginBody.class);
@ -100,6 +98,9 @@ public class AuthController {
loginService.checkTenant(loginBody.getTenantId());
// 登录
LoginVo loginVo = IAuthStrategy.login(body, client, grantType);
if (loginVo.getOpenid() != null){
return R.ok(loginVo);
}
Long userId = LoginHelper.getUserId();
scheduledExecutorService.schedule(() -> {

View File

@ -51,4 +51,9 @@ public class LoginVo {
*/
private String openid;
/**
* 1时需要后台开通 2需要手机号授权登录null时登录成功
*/
private Integer code;
}

View File

@ -11,6 +11,7 @@ import com.pusong.common.core.domain.model.LoginUser;
import com.pusong.common.core.domain.model.WxLoginBody;
import com.pusong.common.core.enums.LoginType;
import com.pusong.common.core.enums.UserStatus;
import com.pusong.common.core.exception.ServiceException;
import com.pusong.common.core.exception.user.CaptchaExpireException;
import com.pusong.common.core.exception.user.UserException;
import com.pusong.common.core.utils.MessageUtils;
@ -52,11 +53,17 @@ public class WxAuthStrategy implements IAuthStrategy {
WxLoginBody loginBody = JsonUtils.parseObject(body, WxLoginBody.class);
ValidatorUtils.validate(loginBody);
String tenantId = loginBody.getTenantId();
String loginCode = loginBody.getLoginCode();
String phoneCode = loginBody.getPhoneCode();
// String loginCode = loginBody.getLoginCode();
// String phoneCode = loginBody.getPhoneCode();
// 通过邮箱查找用户
SysUserVo user = loadUserByWx(tenantId, loginBody);
if (user.getCode() != null){
LoginVo loginVo = new LoginVo();
loginVo.setOpenid(user.getOpenid());
loginVo.setCode(user.getCode());
return loginVo;
}
// loginService.checkLogin(LoginType.EMAIL, tenantId, user.getUserName(), () -> !validateEmailCode(tenantId, email, emailCode));
// 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
@ -109,23 +116,30 @@ public class WxAuthStrategy implements IAuthStrategy {
SysUserVo user = null;
if (phoneNumber == null){
user = userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>()
.eq(phoneNumber == null, SysUser::getOpenid, openid));
if (user == null){
return null;
}
.eq(SysUser::getOpenid, openid));
}else{
user = userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>()
.eq(SysUser::getPhonenumber, phoneNumber));
if (user != null){
SysUser update = new SysUser();
update.setUserId(user.getUserId());
update.setOpenid(openid);
userMapper.updateOpenIdById(update);
}else{
SysUserVo ret = new SysUserVo();
ret.setCode(1);
return ret;
}
}
user = userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>()
.eq(phoneNumber == null, SysUser::getOpenid, openid)
.eq(phoneNumber != null, SysUser::getPhonenumber, phoneNumber))
;
if (ObjectUtil.isNull(user)) {
SysUserVo ret = new SysUserVo();
ret.setOpenid(openid);
ret.setCode(2);
return ret;
} else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
log.info("登录用户:{} 已被停用.");
throw new UserException("user.blocked");
}
return user;
});

View File

@ -26,4 +26,6 @@ public interface OssService {
* @return 列表
*/
List<OssDTO> selectByIds(String ossIds);
OssDTO selectById(Long ossId);
}

View File

@ -78,11 +78,11 @@
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>10.1.24</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.apache.tomcat.embed</groupId>-->
<!-- <artifactId>tomcat-embed-core</artifactId>-->
<!-- <version>10.1.24</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel-support</artifactId>

View File

@ -4,7 +4,6 @@ import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider;
import com.itextpdf.layout.font.FontProvider;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
@ -19,7 +18,7 @@ import java.io.*;
* @Description:
*/
public class PdfItext {
Logger log = LoggerFactory.getLogger(PdfItext.class);
static final Logger log = LoggerFactory.getLogger(PdfItext.class);
/**
* @param templatePath 模板全路径
@ -54,8 +53,6 @@ public class PdfItext {
public static void main(String[] args) throws Exception {
//模板内容填充参数
Context context = new Context();
// context.setVariable("name2", "晨曦话java");
// context.setVariable("name1", "晨曦话三国");
PdfItext.htmlToPdf("C:\\Users\\Administrator\\Desktop\\aa.html", "C:\\Users\\Administrator\\Downloads\\", "temp.pdf", context);
}
@ -110,10 +107,12 @@ public class PdfItext {
outStream.write(buffer);
return file.getAbsolutePath();
} finally {
IOUtils.closeQuietly(inputStream);
if (inputStream != null){
inputStream.close();
}
}
} catch (Exception e) {
System.out.println("FileUtil getFilePath Fail cause by:"+ e);
log.error("FileUtil getFilePath Fail cause by:", e);
}
return null;
}

View File

@ -48,6 +48,7 @@ public class PlusWebSocketHandler extends AbstractWebSocketHandler {
// 从WebSocket会话中获取登录用户信息
LoginUser loginUser = (LoginUser) session.getAttributes().get(WebSocketConstants.LOGIN_USER_KEY);
// 创建WebSocket消息DTO对象
WebSocketMessageDto webSocketMessageDto = new WebSocketMessageDto();
webSocketMessageDto.setSessionKeys(List.of(loginUser.getUserId()));

View File

@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Collection;
import java.util.Map;
import java.util.List;
@ -50,6 +51,14 @@ public class HomeController extends BaseController {
return R.ok(homeService.selectMakeAmount(type));
}
/**
* 本月到期续费统计
*/
@SaCheckPermission("business:salary:list")
@GetMapping("/renewal")
public R<RenewalInfoVo> renewal(@RequestParam() Integer type) {
return R.ok(homeService.renewal(type));
}
/**
* 首页大盘数据回款情况
* @param type 1本月 2上月 3本季度 4本年 5所有
@ -61,37 +70,7 @@ public class HomeController extends BaseController {
return R.ok(homeService.returnMoney(type));
}
/**
* 首页大盘数据人员成交数据列表
* @param type 1本月 2上月 3本季度 4本年 5所有
* @return
*/
@SaCheckPermission("business:salary:list")
@GetMapping("/getUserContractAmounts")
public R<List> getUserContractAmounts(@RequestParam() Integer type, @RequestParam() Long deptId) {
return R.ok(homeService.getUserContractAmountsByDeptId(type,deptId));
}
/**
* 首页大盘数据人员转介绍成交数据列表
* @param type 1本月 2上月 3本季度 4本年 5所有
* @return
*/
@SaCheckPermission("business:salary:list")
@GetMapping("/getUserContractSourceAmounts")
public R<Object> getUserContractSourceAmounts(@RequestParam() Integer type, @RequestParam() Long deptId){
return R.ok(homeService.getUserContractSourceAmountsByDeptId(type,deptId));
}
/**
* 首页大盘数据人员成交数据饼图
* @param type
* @return
*/
@GetMapping("/getUserContractAndPayInfo")
public R<Object> getUserContractAndPayInfo(@RequestParam() Integer type){
return R.ok(homeService.getUserContractAndPayInfo(type));
}
/**
* 首页大盘数据各渠道成交(公司总数居)
* @param type 1本月 2上月 3本季度 4本年 5所有
@ -102,16 +81,57 @@ public class HomeController extends BaseController {
public R<ChannelAmountVo> byChannel(@RequestParam() Integer type) {
return R.ok(homeService.byChannel(type,1));
}
// /**
// * 各渠道成交统计
// */
// @SaCheckPermission("business:salary:list")
// @GetMapping("/sourceData")
// public R<ReturnMoneyInfoVo> sourceData(@RequestParam() Integer type) {
// return R.ok(homeService.returnMoney(type));
// }
/**
* 首页大盘数据销售个人数据
* 首页大盘数据人员成交数据饼图列表
* @param type
* @return
*/
@GetMapping("/getUserContractAndPayInfo")
public R<Collection<UserAmountInfoVo>> getUserContractAndPayInfo(@RequestParam() Integer type){
return R.ok(homeService.getUserContractAndPayInfo(type));
}
// /**
// * 首页大盘数据人员成交数据列表
// * @param type 1本月 2上月 3本季度 4本年 5所有
// * @return
// */
// @SaCheckPermission("business:salary:list")
// @GetMapping("/getUserContractAmounts")
// public R<List<UserContractAmountVo>> getUserContractAmounts(@RequestParam() Integer type, @RequestParam() Long deptId) {
// return R.ok(homeService.getUserContractAmountsByDeptId(type,deptId));//缺少已回款未回款金额
// }
/**
* 首页大盘数据人员转介绍成交数据列表
* @param type 1本月 2上月 3本季度 4本年 5所有
* @return
*/
@SaCheckPermission("business:salary:list")
@GetMapping("/channelByUser")
public R<ChannelAmountVo> channelByUser(@RequestParam() Integer type) {
return R.ok(homeService.byChannel(type,2));
@GetMapping("/getUserContractSourceAmounts")
public R<List<UserContractAmountVo>> getUserContractSourceAmounts(@RequestParam() Integer type, @RequestParam() Long deptId){
return R.ok(homeService.getUserContractSourceAmountsByDeptId(type,deptId));//缺少已回款未回款金额
}
// /**
// * 首页大盘数据销售个人数据
// * @param type 1本月 2上月 3本季度 4本年 5所有
// * @return
// */
// @SaCheckPermission("business:salary:list")
// @GetMapping("/channelByUser")
// public R<ChannelAmountVo> channelByUser(@RequestParam() Integer type) {
// return R.ok(homeService.byChannel(type,2));
// }
/**
* 首页大盘数据任务完成情况
* @param type 1本月 2上月 3本季度 4本年 5所有

View File

@ -70,7 +70,7 @@ public class PsCompanyInfoController extends BaseController {
return psCompanyInfoService.queryServiceCompany(queryBo, pageQuery);
}
@SaCheckPermission("business:companyInfo:list")
@SaCheckPermission("business:companyInfo:followUsers")
@Log(title = "分盘跟进人员" )
@GetMapping("/followUsers")
public R<Void> followUsers(PsCompanyFollowBo queryBo) {

View File

@ -2,16 +2,15 @@ package com.pusong.business.controller;
import java.util.List;
import cn.dev33.satoken.annotation.SaIgnore;
import com.pusong.business.domain.bo.PsContractInfoQueryBo;
import com.pusong.business.domain.bo.PsInvoiceBo;
import com.pusong.business.domain.vo.PsContractBusinessVo;
import com.pusong.business.domain.vo.PsSalaryContractVo;
import com.pusong.business.domain.vo.ServiceScheduleVo;
import com.pusong.business.service.IPsContractBusinessService;
import com.pusong.common.core.validate.QueryGroup;
import com.pusong.common.satoken.utils.LoginHelper;
import com.pusong.common.websocket.dto.WebSocketMessageDto;
import com.pusong.common.websocket.utils.WebSocketUtils;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
@ -24,14 +23,11 @@ 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.log.enums.BusinessType;
import com.pusong.common.excel.utils.ExcelUtil;
import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.domain.bo.PsContractInfoBo;
import com.pusong.business.service.IPsContractInfoService;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import javax.management.Query;
/**
* 合同基本信息
*
@ -47,7 +43,6 @@ public class PsContractInfoController extends BaseController {
private final IPsContractInfoService psContractInfoService;
private final IPsContractBusinessService businessService;
/**
* 生成合同
*/

View File

@ -1,14 +1,15 @@
package com.pusong.business.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
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.bo.PsCustomRecordQueryBo;
import cn.dev33.satoken.annotation.SaIgnore;
import com.pusong.business.domain.PsCustomInfo;
import com.pusong.business.domain.bo.*;
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.service.DictService;
import com.pusong.common.core.utils.MapstructUtils;
import com.pusong.common.core.validate.AddGroup;
import com.pusong.common.core.validate.EditGroup;
import com.pusong.common.idempotent.annotation.RepeatSubmit;
@ -17,11 +18,15 @@ 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 com.pusong.system.RoleEnum;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.service.ISysNoticeService;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -36,8 +41,9 @@ import java.util.Map;
@RestController
@RequestMapping("/business/customInfo")
public class PsCustomController extends BaseController {
private final DictService dictService;
private final IPsCustomInfoService psCustomInfoService;
private final ISysNoticeService noticeService;
/**
* 查询登陆人下所有的客户名称和id
*/
@ -81,6 +87,35 @@ public class PsCustomController extends BaseController {
public R<Long> add(@Validated(AddGroup.class) @RequestBody PsCustomInfoBo bo) {
return R.ok(psCustomInfoService.insertByBo(bo));
}
/**
* 新增客户基本信息
*/
@RepeatSubmit()
@PostMapping("/officialWebsiteAdd")
@SaIgnore
public R<Long> officialWebsiteAdd(@Validated(AddGroup.class) @RequestBody PsCustomInfoWebBo bo) {
PsCustomInfoBo add = new PsCustomInfoBo();
add.setType(3);
add.setCustomSource("官网");
add.setCustomLevel("2");
add.setCreateTime(new Date());
add.setCustomMobile(bo.getCustomMobile());
add.setServiceType(bo.getServiceType());
add.setTenantId("000000");
psCustomInfoService.insertByBo(add);
noticeService.sendNotice(SysNoticeBo.getGonghaiInstance());
return R.ok();
}
@SaIgnore
@Log(title = "getAllServiceType", businessType = BusinessType.INSERT)
@RepeatSubmit()
@GetMapping("/getAllServiceType")
public R<Map<String, String>> getAllDictByDictType() {
Map<String, String> allDictByDictType = dictService.getAllDictByDictType("contract_type");
return R.ok(allDictByDictType);
}
/**
* 修改客户基本信息
@ -90,6 +125,7 @@ public class PsCustomController extends BaseController {
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody PsCustomInfoBo bo) {
return toAjax(psCustomInfoService.updateByBo(bo));
}

View File

@ -48,4 +48,11 @@ public class PsHomeController extends BaseController {
// }
@RepeatSubmit()
@SaCheckPermission("business:statistics")
@GetMapping("/statistics")
public R<List<PsCustomInfoVo>> statistics() {
return R.ok();
}
}

View File

@ -3,6 +3,7 @@ package com.pusong.business.controller;
import java.util.List;
import cn.dev33.satoken.annotation.SaIgnore;
import com.pusong.business.service.IPsTaskService;
import lombok.RequiredArgsConstructor;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
@ -66,6 +67,17 @@ public class PsTaskWorkRecordController extends BaseController {
public R<Void> add(@Validated(AddGroup.class) @RequestBody PsTaskWorkRecordBo bo) {
return toAjax(psTaskWorkRecordService.insertByBo(bo));
}
/**
* 外勤任务记录和上传公司资料
*/
@SaCheckPermission("business:taskWorkRecord:add")
@Log(title = "外勤任务记录和上传公司资料", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("addRecordAndSaveCompanyInfo")
public R<Void> addRecordAndSaveCompanyInfo(@Validated(AddGroup.class) @RequestBody PsTaskWorkRecordBo bo) {
psTaskWorkRecordService.insertAndMedia(bo);
return toAjax(true);
}
// /**
// * 导出外勤任务记录列表

View File

@ -94,4 +94,9 @@ public class PsCustomInfo extends TenantEntity {
*/
private Date acceptDate;
/**
* 服务类别
*/
private String serviceType;;
}

View File

@ -43,7 +43,7 @@ public class PsContractInfoQueryBo {
private String customName;
/**
* 合同id
* 客户id
*/
private Long customId;
/**

View File

@ -124,4 +124,16 @@ public class PsCustomInfoBo {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private Date createTime;
/**
* 服务类别
*/
private String serviceType;;
private String tenantId;
/**
* app 搜索时关键字客户姓名签约公司名称 客户手机号后4位
*/
private String appKeyWord;
}

View File

@ -0,0 +1,58 @@
package com.pusong.business.domain.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pusong.business.domain.PsCustomInfo;
import com.pusong.common.core.validate.AddGroup;
import com.pusong.common.core.validate.EditGroup;
import com.pusong.common.core.validate.QueryGroup;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import java.util.Date;
import java.util.List;
/**
* 客户基本信息业务对象 ps_custom_info
*
* @author Lion Li
* @date 2024-07-25
*/
@Data
@EqualsAndHashCode
@AutoMapper(target = PsCustomInfo.class)
public class PsCustomInfoWebBo {
/**
* 类型 1客户列表 2黑名单 3公海
*/
private Integer type;
/**
* 客户来源
*/
private String customSource;
/**
* 客户级别
*/
private String customLevel;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private Date createTime;
/**
* 服务类别
*/
private String serviceType;;
/**
* 客户电话客户电话(多个用英文逗号分割)
*/
@NotBlank(message = "客户电话客户电话",groups = { EditGroup.class, AddGroup.class })
@Length(max = 500)
private String customMobile;
}

View File

@ -117,5 +117,9 @@ public class PsTaskQueryBo {
*/
private List<String> extendList;
/**
* app 搜索时关键字客户姓名签约公司名称 客户手机号后4位
*/
private String appKeyWord;
}

View File

@ -9,6 +9,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
@ -76,4 +78,14 @@ public class PsTaskWorkRecordBo extends BaseEntity {
private Date nextDate;
/**
* 资料信息
*/
private List<PsTaskMediaBo> mediaBoList;
private Long taskId;
// private Long customerId;
//
// private Long companyId;
}

View File

@ -72,4 +72,5 @@ public class PsContractBusinessDetailVo implements Serializable {
private String extentInfo;
private Long companyId;
}

View File

@ -66,7 +66,7 @@ public class PsContractInfoVo implements Serializable {
private BigDecimal contractAmount;
/**
* 合同状态
* 合同状态 ContractStatusEnum
*/
private String contractStatus;

View File

@ -183,4 +183,9 @@ public class PsCustomInfoVo implements Serializable {
* 公司信息DTO
*/
private List<PsCompanyInfoVo> psCompanyInfoVos;
/**
* 服务类别
*/
private String serviceType;;
}

View File

@ -2,6 +2,7 @@ package com.pusong.business.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pusong.business.domain.PsContractBusiness;
import com.pusong.business.domain.PsTaskMain;
import com.pusong.common.translation.annotation.Translation;
import com.pusong.common.translation.constant.TransConstant;
@ -167,5 +168,10 @@ public class PsTaskMainVo implements Serializable {
* 是否代账
*/
private String isProxy;
/**
* 服务项目
*/
List<PsContractBusinessDetailVo> psContractBusinesses;
}

View File

@ -0,0 +1,52 @@
package com.pusong.business.domain.vo.home;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class RenewalInfoVo {
/**
* 当前时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private Date currentDate = new Date();
/**
* 统计范围
*/
private String dateStr;
/**
* 到期合同总数
*/
private Integer contractNum;
/**
* 已续费合同总数
*/
private Integer renewalContractNum;
/**
* 未续费合同总数
*/
private Integer unRenewalContractNum;
/**
* 已续费金额
*/
private BigDecimal payMoney;
/**
* 当月未续费金额
*/
private BigDecimal unPayMoney;
/**
* 已回款金额占比
*/
private String payMoneyPer;
/**
* 未回款金额占比
*/
private String unPayMoneyPer;
}

View File

@ -23,7 +23,7 @@ public class UserContractAmountVo {
/**
* 转介绍合同数量
*/
private Integer jieShaoContractNum=0;
private Integer jieShaoContractNum = 0;
/**
* 转介绍合同金额占比
*/
@ -31,27 +31,27 @@ public class UserContractAmountVo {
/**
* 用户所有合同总金额
*/
private BigDecimal sumAmount=new BigDecimal(0);
private BigDecimal sumAmount = new BigDecimal(0);
/**
* 托管类型合同总金额 类型号:4
*/
private BigDecimal tuoGuanAmount=new BigDecimal(0);
private BigDecimal tuoGuanAmount = new BigDecimal(0);
/**
* 续费类型合同总金额
*/
private BigDecimal xuFeiAmount=new BigDecimal(0);
private BigDecimal xuFeiAmount = new BigDecimal(0);
/**
* 软件定制类型合同总金额 类型号:9
*/
private BigDecimal softwareDevAmount=new BigDecimal(0);
private BigDecimal softwareDevAmount = new BigDecimal(0);
/**
* 其他类型合同总金额
*/
private BigDecimal otherAmount=new BigDecimal(0);
private BigDecimal otherAmount = new BigDecimal(0);
/**
* 转介绍的合同金额
*/
private BigDecimal jieShaoAmount=new BigDecimal(0);
private BigDecimal jieShaoAmount = new BigDecimal(0);
public void addSumAmount(BigDecimal amount){
sumAmount=sumAmount.add(amount);

View File

@ -3,6 +3,7 @@ package com.pusong.business.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.pusong.business.domain.PsContractBusiness;
import com.pusong.business.domain.vo.PsContractBusinessDetailVo;
import com.pusong.business.domain.vo.PsContractBusinessVo;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
@ -25,4 +26,6 @@ public interface PsContractBusinessMapper extends BaseMapperPlus<PsContractBusin
List<PsContractBusinessVo> selectTuoGuanBusinessList(@Param(Constants.WRAPPER) Wrapper<PsContractBusiness> queryWrapper);
List<PsContractBusinessDetailVo> selectListByContractCodeAndComanyId(@Param(Constants.WRAPPER) Wrapper<PsContractBusiness> queryWrapper);
}

View File

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.PsCustomInfo;
import com.pusong.business.domain.PsSalaryContract;
import com.pusong.business.domain.vo.PsContractBusinessVo;
import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.domain.vo.PsCustomInfoVo;
import com.pusong.business.domain.vo.PsSalaryContractVo;
@ -60,4 +61,8 @@ public interface PsContractInfoMapper extends BaseMapperPlus<PsContractInfo, PsC
@DataColumn(key = "userName", value = "info.custom_manager")
})
List<ChannelPayInfo> byChannelUser(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
List<PsContractBusinessVo> selectRenewalContract(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
}

View File

@ -2,6 +2,7 @@ package com.pusong.business.service;
import com.pusong.business.domain.vo.home.*;
import java.util.Collection;
import java.util.Map;
import java.util.List;
@ -14,9 +15,10 @@ public interface HomeService {
MakeAmountVo selectMakeAmount(Integer type);
ReturnMoneyInfoVo returnMoney(Integer type);
Object getUserContractSourceAmountsByDeptId(Integer type,Long deptId);
List getUserContractAmountsByDeptId(Integer type, Long deptId);
Object getUserContractAndPayInfo(Integer type);
RenewalInfoVo renewal(Integer type);
List<UserContractAmountVo> getUserContractSourceAmountsByDeptId(Integer type,Long deptId);
List<UserContractAmountVo> getUserContractAmountsByDeptId(Integer type, Long deptId);
Collection<UserAmountInfoVo> getUserContractAndPayInfo(Integer type);
/**
* 首页大盘数据各渠道成交
* @param type

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pusong.business.domain.PsTaskMain;
import com.pusong.business.domain.bo.AppointBo;
import com.pusong.business.domain.bo.MediaCompanySaveBo;
import com.pusong.business.domain.bo.PsTaskMediaBo;
import com.pusong.business.domain.bo.PsTaskQueryBo;
import com.pusong.business.domain.vo.PsApproverRecordVo;
import com.pusong.business.domain.vo.PsTaskAppointVo;
@ -87,6 +88,8 @@ public interface IPsTaskService {
*/
void saveInfo(MediaCompanySaveBo save);
void saveMedia(List<PsTaskMediaBo> mediaBoList, Long customerId, Long companyId);
/**
* 任务委派
*

View File

@ -38,7 +38,7 @@ public interface IPsTaskWorkRecordService {
* @return 是否新增成功
*/
Boolean insertByBo(PsTaskWorkRecordBo bo);
Boolean insertAndMedia(PsTaskWorkRecordBo bo);
// /**
// * 查询外勤任务记录
// *

View File

@ -9,6 +9,7 @@ import com.pusong.business.domain.PsTaskMain;
import com.pusong.business.domain.bo.PsApproverRecordBo;
import com.pusong.business.domain.vo.PsApproverRecordVo;
import com.pusong.business.domain.vo.PsCompanyInfoVo;
import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.domain.vo.PsContractPayVo;
import com.pusong.business.enums.ApproverTypeEnum;
import com.pusong.business.enums.PayStatusEnum;
@ -22,6 +23,8 @@ import com.pusong.business.service.IPsContractInfoService;
import com.pusong.common.core.utils.DateUtils;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.service.ISysNoticeService;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -47,6 +50,7 @@ public class FreeApproverServiceImpl extends ApproverAbstractServiceImpl {
private final IPsCompanyInfoService companyInfoService;
@Resource
private PsApproverRecordMapper recordMapper;
private final ISysNoticeService noticeService;
/**
* 1 审批成功
* @param psApproverRecord 神瀑类
@ -73,6 +77,9 @@ public class FreeApproverServiceImpl extends ApproverAbstractServiceImpl {
// info.setContractCode(vo.getContractCode());
// contractInfoService.updateByCode(info);
// }
noticeService.sendNotice(SysNoticeBo.getFreeTaskInstance(psApproverRecord.getCreateBy(), psCompanyInfoVo.getCompanyName()));
noticeService.sendNotice(SysNoticeBo.getFreeTaskToRoleInstance(psCompanyInfoVo.getCompanyName()));
}
@ -82,7 +89,8 @@ public class FreeApproverServiceImpl extends ApproverAbstractServiceImpl {
*/
@Override
public void fail(PsApproverRecord psApproverRecord) {
PsCompanyInfoVo psCompanyInfoVo = companyInfoService.queryById(Long.valueOf(psApproverRecord.getBusinessId()));
// noticeService.sendNotice(SysNoticeBo.getFreeTaskErrorInstance(psCompanyInfoVo.getCompanyName()));
}
/**

View File

@ -11,6 +11,8 @@ import com.pusong.business.service.IPsContractInfoService;
import com.pusong.business.service.IPsContractPayService;
import com.pusong.business.service.IPsTaskService;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.service.ISysNoticeService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -29,6 +31,7 @@ public class PayContractApproverServiceImpl extends ApproverAbstractServiceImpl
private final IPsContractInfoService psContractInfoService;
private final IPsContractPayService payService;
private final IPsTaskService taskMainService;
private final ISysNoticeService noticeService;
@Override
public String approverType() {
return ApproverTypeEnum.PAY.getCode();
@ -57,10 +60,9 @@ public class PayContractApproverServiceImpl extends ApproverAbstractServiceImpl
updateInfo.setContractCode(info.getContractCode());
if("1".equals(info.getIsDue())){
if(StringUtils.equals(ContractStatusEnum.CREATE.getCode(), info.getContractStatus())){
updateInfo.setContractStatus(ContractStatusEnum.EXECUTION.getCode());
updateInfo.setContractStatus(ContractStatusEnum.SUCCESS.getCode());
psContractInfoService.updateByCode(updateInfo);
}
return;//续费合同不生成任务直接return
}else{
if(StringUtils.equals(ContractStatusEnum.CREATE.getCode(), info.getContractStatus())){
updateInfo.setContractStatus(ContractStatusEnum.RETURN.getCode());
@ -73,7 +75,7 @@ public class PayContractApproverServiceImpl extends ApproverAbstractServiceImpl
// log.info("查询回款记录数量{}任务状态{}", list.size(),info.getContractStatus());
List<PsTaskMain> tasks = taskMainService.queryByContractCode(psApproverRecord.getContractCode());
if(tasks.isEmpty() || tasks.get(0).getId() == null){
if(!"1".equals(info.getIsDue()) && (tasks.isEmpty() || tasks.get(0).getId() == null)){
log.info("任务未初始化,初始化任务主表");
List<PsTaskMain> psTaskMainList = new ArrayList<>();
for (PsCompanyInfoVo psCompanyInfoVo : info.getPsCompanySerivceVo()) {
@ -89,6 +91,16 @@ public class PayContractApproverServiceImpl extends ApproverAbstractServiceImpl
taskMainService.insertBatch(psTaskMainList);
}
psContractInfoService.fillMoney(info);
if (ContractStatusEnum.CREATE.getCode().equals(info.getContractStatus())){
noticeService.sendNotice(SysNoticeBo.getFirstPayInstance(info.getCustomManager(), info.getPsCustomInfoVo().getCustomName()));
}else{
if (info.getResidualMoney().doubleValue() > 0){
noticeService.sendNotice(SysNoticeBo.getPayInstance(info.getCustomManager(), info.getPsCustomInfoVo().getCustomName()));
}else{
noticeService.sendNotice(SysNoticeBo.getLastPayInstance(info.getCustomManager(), info.getPsCustomInfoVo().getCustomName()));
}
}
}
@Override
@ -98,6 +110,17 @@ public class PayContractApproverServiceImpl extends ApproverAbstractServiceImpl
update.setPayStatus(PayStatusEnum.FILE.getCode());
payService.updateById(update);
PsContractInfoVo info = psContractInfoService.queryContractByCode(psApproverRecord.getContractCode());
if (ContractStatusEnum.CREATE.getCode().equals(info.getContractStatus())){
noticeService.sendNotice(SysNoticeBo.getFirstPayErrorInstance(info.getCustomManager(), info.getPsCustomInfoVo().getCustomName(), psApproverRecord.getApproverDesc()));
}else{
if (info.getResidualMoney().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()));
}
}
// //如果是修改不做处理
// if(StringUtils.isNotBlank(psApproverRecord.getUpdateData())){
//

View File

@ -24,6 +24,8 @@ import com.pusong.common.core.service.UserService;
import com.pusong.common.core.utils.DateUtils;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.service.ISysNoticeService;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -49,6 +51,7 @@ public class PublicApproverServiceImpl extends ApproverAbstractServiceImpl {
@Resource
private final PsCompanyInfoMapper companyInfoMapper;
private final UserService userService;
private final ISysNoticeService noticeService;
/**
* 1 审批成功 退款审批成功
* @param psApproverRecord 神瀑类
@ -60,6 +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()));
}
/**
@ -72,6 +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()));
}
/**

View File

@ -24,6 +24,8 @@ import com.pusong.business.service.IPsTaskService;
import com.pusong.common.core.utils.DateUtils;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.service.ISysNoticeService;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -51,6 +53,9 @@ public class ReturnApproverServiceImpl extends ApproverAbstractServiceImpl {
@Resource
private IPsCompanyInfoService companyInfoService;
private final ISysNoticeService noticeService;
private final IPsContractInfoService contractInfoService;
/**
* 1 审批成功 退款审批成功
* @param psApproverRecord 神瀑类
@ -60,6 +65,10 @@ public class ReturnApproverServiceImpl extends ApproverAbstractServiceImpl {
PsContractPay info = baseMapper.selectById(psApproverRecord.getBusinessId());
info.setPayStatus(PayStatusEnum.PAYING.getCode());
baseMapper.updateById(info);
PsContractInfoVo src = contractInfoService.queryContractByCode(psApproverRecord.getContractCode());
noticeService.sendNotice(SysNoticeBo.getReturningPayToCaowuInstance(src.getPsCustomInfoVo().getCustomName()));
noticeService.sendNotice(SysNoticeBo.getReturnPayInstance(psApproverRecord.getCreateBy(), src.getPsCustomInfoVo().getCustomName()));
}
/**
@ -71,6 +80,9 @@ public class ReturnApproverServiceImpl extends ApproverAbstractServiceImpl {
PsContractPay info = baseMapper.selectById(psApproverRecord.getBusinessId());
info.setPayStatus(PayStatusEnum.FILE.getCode());
baseMapper.updateById(info);
PsContractInfoVo src = contractInfoService.queryContractByCode(psApproverRecord.getContractCode());
noticeService.sendNotice(SysNoticeBo.getReturnPayErrorInstance(psApproverRecord.getCreateBy(), src.getPsCustomInfoVo().getCustomName(), psApproverRecord.getApproverDesc()));
}

View File

@ -11,6 +11,8 @@ import com.pusong.business.enums.ApproverTypeEnum;
import com.pusong.business.enums.CommonStatusEnum;
import com.pusong.business.service.IPsContractBusinessService;
import com.pusong.business.service.IPsContractInfoService;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.service.ISysNoticeService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@ -32,7 +34,7 @@ public class RolbackApproverServiceImpl extends ApproverAbstractServiceImpl {
}
private final IPsContractBusinessService businessService;
private final IPsContractInfoService contractInfoService;
private final ISysNoticeService noticeService;
/**
* 1 审批成功修改回传状态并把回传的合同ossid放入合同表
* @param psApproverRecord 神瀑类
@ -45,6 +47,10 @@ public class RolbackApproverServiceImpl extends ApproverAbstractServiceImpl {
psContractInfo.setRollBackStatus(CommonStatusEnum.SUCCESS.getCode());
psContractInfo.setRollBackPdf(Long.valueOf(psApproverRecord.getUpdateData()));
contractInfoService.updateByCode(psContractInfo);
PsContractInfoVo src = contractInfoService.queryContractByCode(psApproverRecord.getContractCode());
noticeService.sendNotice(SysNoticeBo.getPdfRolbackInstance(src.getCustomManager(), src.getPsCustomInfoVo().getCustomName()));
}
@Override
@ -53,5 +59,8 @@ public class RolbackApproverServiceImpl extends ApproverAbstractServiceImpl {
info.setContractCode(psApproverRecord.getContractCode());
info.setRollBackStatus(CommonStatusEnum.FAIL.getCode());
contractInfoService.updateByCode(info);
PsContractInfoVo src = contractInfoService.queryContractByCode(psApproverRecord.getContractCode());
noticeService.sendNotice(SysNoticeBo.getPdfRolbackErrorInstance(src.getCustomManager(), src.getPsCustomInfoVo().getCustomName(), psApproverRecord.getApproverDesc()));
}
}

View File

@ -13,6 +13,8 @@ import com.pusong.business.enums.ApproverTypeEnum;
import com.pusong.business.enums.CommonStatusEnum;
import com.pusong.business.service.IPsContractBusinessService;
import com.pusong.business.service.IPsContractInfoService;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.service.ISysNoticeService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@ -33,9 +35,9 @@ public class SignApproverServiceImpl extends ApproverAbstractServiceImpl {
return ApproverTypeEnum.SIGN.getCode();
}
private final IPsContractBusinessService businessService;
private final ISysNoticeService noticeService;
private final IPsContractInfoService contractInfoService;
/**
* 1 审批成功生成签章合同 修改签章状态
* @param psApproverRecord 神瀑类
@ -95,6 +97,8 @@ public class SignApproverServiceImpl extends ApproverAbstractServiceImpl {
contractInfoService.updateByCode(info);
//生成合同
contractInfoService.makePdf(info, bo,true);
noticeService.sendNotice(SysNoticeBo.getSignInstance(psApproverRecord.getCreateBy(), vo.getPsCustomInfoVo().getCustomName()));
}
//修改签章状态
@ -104,6 +108,8 @@ public class SignApproverServiceImpl extends ApproverAbstractServiceImpl {
info.setContractCode(psApproverRecord.getContractCode());
info.setSignStatus(CommonStatusEnum.FAIL.getCode());
contractInfoService.updateByCode(info);
PsContractInfoVo src = contractInfoService.queryContractByCode(psApproverRecord.getContractCode());
noticeService.sendNotice(SysNoticeBo.getSignErrorInstance(psApproverRecord.getCreateBy(), src.getPsCustomInfoVo().getCustomName(), psApproverRecord.getApproverDesc()));
}

View File

@ -14,6 +14,8 @@ import com.pusong.business.service.IPsContractBusinessService;
import com.pusong.business.service.IPsContractInfoService;
import com.pusong.business.service.IPsTaskService;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.service.ISysNoticeService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -35,7 +37,7 @@ public class UpdateContractApproverServiceImpl extends ApproverAbstractServiceIm
private final PsTaskMainMapper taskMainMapper;
private final PsTaskAppointMapper appointMapper;
private final IPsCompanyInfoService companyInfoService;
private final ISysNoticeService noticeService;
/**
* 1 审批成功 合同状态变为待派单 合同已派单任务重置
*
@ -55,6 +57,7 @@ public class UpdateContractApproverServiceImpl extends ApproverAbstractServiceIm
contractInfoService.update(src, bo);
noticeService.sendNotice(SysNoticeBo.getUpdateContractInstance(src.getCustomManager(), psApproverRecord.getApproverDesc()));
//3.修改后操作
// afterUpdateOperate(bo, src);
@ -107,5 +110,8 @@ public class UpdateContractApproverServiceImpl extends ApproverAbstractServiceIm
add.setContractCode(psApproverRecord.getContractCode());
add.setContractStatus(bo.getBeforeContractStatus());
contractInfoService.updateByCode(add);
PsContractInfoVo src = contractInfoService.queryContractByCode(psApproverRecord.getContractCode());
noticeService.sendNotice(SysNoticeBo.getUpdateContractErrorInstance(src.getCustomManager(), src.getPsCustomInfoVo().getCustomName(), psApproverRecord.getApproverDesc()));
}
}

View File

@ -5,19 +5,14 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.PsContractPay;
import com.pusong.business.domain.PsTaskAppoint;
import com.pusong.business.domain.PsTaskMain;
import com.pusong.business.domain.*;
import com.pusong.business.domain.vo.PsContractBusinessVo;
import com.pusong.business.domain.vo.home.*;
import com.pusong.business.enums.CommonStatusEnum;
import com.pusong.business.enums.ContractStatusEnum;
import com.pusong.business.enums.PayStatusEnum;
import com.pusong.business.enums.TaskStatusEnum;
import com.pusong.business.mapper.PsContractInfoMapper;
import com.pusong.business.mapper.PsContractPayMapper;
import com.pusong.business.mapper.PsTaskAppointMapper;
import com.pusong.business.mapper.PsTaskMainMapper;
import com.pusong.business.mapper.*;
import com.pusong.business.service.HomeService;
import com.pusong.common.core.constant.CacheNames;
import com.pusong.common.core.utils.DateUtils;
@ -51,6 +46,9 @@ public class HomeServiceImpl implements HomeService {
private final ISysDictDataService dictDataService;
private final PsContractBusinessMapper psContractBusinessMapper;
/**
* 查询成交总金额
* @param type
@ -211,6 +209,47 @@ public class HomeServiceImpl implements HomeService {
return res;
}
@Cacheable(cacheNames = CacheNames.HOME_D, key = "#type")
public RenewalInfoVo renewal(Integer type){
Map<String, Object> mapParam = this.getDate(type);
LocalDate startDate = (LocalDate)mapParam.get("startDate");
LocalDate endDate = (LocalDate)mapParam.get("endDate");
String date = (String)mapParam.get("date");
QueryWrapper<PsContractBusiness> wrapper = new QueryWrapper<PsContractBusiness>()
.eq("business_type", "2")
.between("end_date", startDate, endDate)
.groupBy("company_id")
.groupBy("contract_code");
//到期的合同
List<PsContractBusiness> expireContact = psContractBusinessMapper.selectList(wrapper);
List<Long> companyIds = expireContact.stream().map(PsContractBusiness::getCompanyId).toList();
List<String> contractCodeList = expireContact.stream().map(PsContractBusiness::getContractCode).toList();
//总到期金额
BigDecimal sumExpireAmount = expireContact.stream().map(PsContractBusiness::getBusinessAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
QueryWrapper<PsContractInfo> contractWrapper = new QueryWrapper<PsContractInfo>()
.between("apply_date", startDate, endDate)
.eq("con.is_due", 1)
.in("cc.company_id", companyIds)
.notIn("cc.contract_code", contractCodeList);
//已续费的合同
List<PsContractBusinessVo> renewalContact = psContractInfoMapper.selectRenewalContract(contractWrapper);
//总已续费金额
BigDecimal sumRenewalAmount = renewalContact.stream().map(PsContractBusinessVo::getBusinessAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
RenewalInfoVo renewalInfoVo = new RenewalInfoVo();
renewalInfoVo.setContractNum(expireContact.size());
renewalInfoVo.setRenewalContractNum(renewalContact.size());
renewalInfoVo.setUnRenewalContractNum(contractCodeList.size() - renewalContact.size());
renewalInfoVo.setPayMoney(sumRenewalAmount);
renewalInfoVo.setUnPayMoney(sumExpireAmount.subtract(sumRenewalAmount));
renewalInfoVo.setDateStr(date);
renewalInfoVo.setPayMoneyPer(renewalInfoVo.getPayMoney().divide(sumExpireAmount, 2, BigDecimal.ROUND_UP).toString());
renewalInfoVo.setUnPayMoneyPer(renewalInfoVo.getUnPayMoney().divide(sumExpireAmount, 2, BigDecimal.ROUND_UP).toString());
return renewalInfoVo;
}
private String contractSource="转介绍";
/**
* 按人员成交转介绍列表根据部门获取
@ -218,23 +257,23 @@ public class HomeServiceImpl implements HomeService {
* @param deptId
* @return
*/
public Object getUserContractSourceAmountsByDeptId(Integer type,Long deptId){
public List<UserContractAmountVo> getUserContractSourceAmountsByDeptId(Integer type, Long deptId){
Map<String, Object> mapParam = this.getDate(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<>();
Map<String,Object> queryParam = new HashMap<>();
queryParam.put("startDate",startDate);
queryParam.put("endDate",endDate);
queryParam.put("contractStatus",ContractStatusEnum.INIT.getCode());
queryParam.put("isCancel",CommonStatusEnum.SUCCESS.getCode());
queryParam.put("deptId",deptId);
List<UserContractAmountInfo> list=psContractInfoMapper.getUserContractSourceAmountsByDeptId(queryParam);
Map<Long,UserContractAmountVo> res=new HashMap<>();
List<UserContractAmountInfo> list = psContractInfoMapper.getUserContractSourceAmountsByDeptId(queryParam);
Map<Long,UserContractAmountVo> res = new HashMap<>();
//记录合同编码防止重复
Map<String,String> repeatContractCode=new HashMap<>();
Map<String,String> repeatContractCode = new HashMap<>();
for(UserContractAmountInfo obj:list){
UserContractAmountVo vo=res.get(obj.getUserId());
if(vo==null){
@ -290,28 +329,28 @@ public class HomeServiceImpl implements HomeService {
* @param deptId 部门id
* @return
*/
public List getUserContractAmountsByDeptId(Integer type,Long deptId) {
public List<UserContractAmountVo> getUserContractAmountsByDeptId(Integer type,Long deptId) {
Map<String, Object> mapParam = this.getDate(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);
queryParam.put("contractStatus",ContractStatusEnum.INIT.getCode());
queryParam.put("isCancel",CommonStatusEnum.SUCCESS.getCode());
queryParam.put("deptId",deptId);
queryParam.put("startDate", startDate);
queryParam.put("endDate", endDate);
queryParam.put("contractStatus", ContractStatusEnum.INIT.getCode());
queryParam.put("isCancel", CommonStatusEnum.SUCCESS.getCode());
queryParam.put("deptId", deptId);
//查询各类合同总金额
List<UserContractAmountInfo> list=psContractInfoMapper.getUserContractTypeAmountsByDeptId(queryParam);
Map<Long,UserContractAmountVo> res=new HashMap<>();
List<UserContractAmountInfo> list = psContractInfoMapper.getUserContractTypeAmountsByDeptId(queryParam);
Map<Long,UserContractAmountVo> res = new HashMap<>();
//记录合同编码防止重复
Map<String,String> repeatContractCode=new HashMap<>();
for(UserContractAmountInfo obj:list){
UserContractAmountVo vo=res.get(obj.getUserId());
Map<String,String> repeatContractCode = new HashMap<>();
for(UserContractAmountInfo obj : list){
UserContractAmountVo vo = res.get(obj.getUserId());
if(vo==null){
vo=new UserContractAmountVo();
if(vo == null){
vo = new UserContractAmountVo();
vo.setUserId(obj.getUserId());
vo.setNickName(obj.getNickName());
vo.setDateStr(date);
@ -323,15 +362,15 @@ public class HomeServiceImpl implements HomeService {
}
//托管合同金额累计
if(obj.getBusinessType()!=null&&obj.getBusinessType().equals("4")){
if(obj.getBusinessType() != null && obj.getBusinessType().equals("4")){
vo.addTuoGuanAmount(obj.getContractAmount());
} else
//软件开发合同金额累计
if (obj.getBusinessType()!=null&&obj.getBusinessType().equals("9")) {
if (obj.getBusinessType() != null && obj.getBusinessType().equals("9")) {
vo.addSoftwareDevAmount(obj.getContractAmount());
} else
//其他合同金额累计
if(obj.getIsDue()==null||obj.getIsDue().equals("0")){
if(obj.getIsDue() == null || obj.getIsDue().equals("0")){
vo.addOtherAmount(obj.getContractAmount());
}
@ -352,14 +391,14 @@ public class HomeServiceImpl implements HomeService {
title.setXuFeiAmount(null);
//按总金额降序处理
List<UserContractAmountVo> listData=res.values().stream().sorted(
List<UserContractAmountVo> listData = res.values().stream().sorted(
Comparator.comparing(UserContractAmountVo::getSumAmount,Comparator.reverseOrder())).collect(Collectors.toList());
for (UserContractAmountVo v:listData) {
for (UserContractAmountVo v : listData) {
title.addSumAmount(v.getSumAmount());
}
//计算金额占比
for (UserContractAmountVo v:listData) {
for (UserContractAmountVo v : listData) {
if(!v.getSumAmount().equals(BigDecimal.ZERO)) {
v.setAmountPer(v.getSumAmount().multiply(new BigDecimal("100.0")).divide(title.getSumAmount(), 2, RoundingMode.HALF_UP).toPlainString() + "%");
}else {
@ -367,7 +406,7 @@ public class HomeServiceImpl implements HomeService {
}
}
listData.add(0,title);
listData.add(0, title);
return listData;
}
@ -376,7 +415,7 @@ public class HomeServiceImpl implements HomeService {
* @param type
* @return
*/
public Object getUserContractAndPayInfo(Integer type){
public Collection<UserAmountInfoVo> getUserContractAndPayInfo(Integer type){
Map<String, Object> mapParam = this.getDate(type);
LocalDate startDate = (LocalDate)mapParam.get("startDate");
LocalDate endDate = (LocalDate)mapParam.get("endDate");

View File

@ -110,7 +110,7 @@ public class PsApproverRecordServiceImpl implements IPsApproverRecordService {
throw new ServiceException("操作失败:当前阶段总裁不能审批");
}
}
info.setApproverDesc(desc);
ApproverService service = container.getService(info.getBusinessType());
if(StringUtils.equals(ApproverStatusEnum.SUCCESS.getCode(),operate)){
info.setApproverStatus(ApproverStatusEnum.SUCCESS.getCode());
@ -122,7 +122,7 @@ public class PsApproverRecordServiceImpl implements IPsApproverRecordService {
throw new ServiceException("操作失败:不支持的操作类型");
}
info.setApproverDate(new Date());
info.setApproverDesc(desc);
baseMapper.updateById(info);
}
// if(StringUtils.equals(info.getBusinessType(), ApproverTypeEnum.PAY.getCode())||

View File

@ -27,13 +27,18 @@ import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.satoken.utils.LoginHelper;
import com.pusong.system.domain.SysDictData;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.domain.vo.SysOssVo;
import com.pusong.system.domain.vo.SysUserVo;
import com.pusong.system.mapper.SysUserMapper;
import com.pusong.system.service.ISysDictDataService;
import com.pusong.system.service.ISysNoticeService;
import com.pusong.system.service.ISysOssService;
import jakarta.annotation.Resource;
import jodd.util.StringUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -69,8 +74,8 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
private final IPsCustomInfoService customInfoService;
@Resource
private final ISysOssService ossService;
@Resource
private final IPsContractPayService contractPayService;
@Autowired
private IPsContractPayService contractPayService;
@Resource
private final ApproverContainer container;
@ -83,6 +88,9 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
private final PsContractBusinessDetailMapper businessDetailMapper;
private final ISysDictDataService dictDataService;
private final IPsApproverRecordService approverRecordService;
private final PsCustomInfoMapper customInfoMapper;
private final SysUserMapper sysUserMapper;
private final ISysNoticeService noticeService;
public static String getContractCode(){
Random random = new Random();
@ -156,9 +164,17 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
PsCustomInfo psCustomInfo = customInfoService.listById(bo.getCustomId());
add.setCustomManager(psCustomInfo.getCustomManager());//所属销售经理id
if (type == 2){
psCustomInfo.setCustomLevel("3");
customInfoMapper.updateById(psCustomInfo);
}
}else{
MapstructUtils.convert(bo, add);
}
if (bo.getFirstPartyType() == PsContractInfoBo.FIRSTPARTYTYPE.COMPANY.getType()) {
add.setCompanyId(bo.getCompanyInfoBo().getId());//公司id
}
@ -184,6 +200,12 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
businessService.saveList(list, add.getContractCode());
//7.生成合同
makePdf(add, bo,true);
//生成合同改完重要客户
if (type == 2){
PsCustomInfo psCustomInfo = customInfoService.listById(bo.getCustomId());
psCustomInfo.setCustomLevel("3");
customInfoMapper.updateById(psCustomInfo);
}
return add.getContractCode();
}
/**
@ -652,8 +674,9 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
//生成合同pdf
PsCustomInfo customer = customInfoService.listById(add.getCustomId());
Map<String,Object> map = new HashMap<>();
LoginUser user = LoginHelper.getLoginUser();
map.put("user", user);
// LoginUser user = LoginHelper.getLoginUser();
SysUserVo sysUserVo = sysUserMapper.selectVoById(customer.getCustomManager());
map.put("user", sysUserVo);
map.put("contract", add);
map.put("business", detailBos);
map.put("serviceCompany", bo.getServiceCompanyInfoList());
@ -737,6 +760,9 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
psTaskMain.setTaskStatus(TaskStatusEnum.INIT.getCode());
psTaskMain.setExtend(JSONObject.toJSONString(invoiceBo));
taskMainService.insert(psTaskMain);
noticeService.sendNotice(SysNoticeBo.getFapiaoReqInstance(info.getPsCustomInfoVo().getCustomName()));
}
/**
* 免费工单
@ -900,6 +926,7 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
//删除标志
qw.eq( "info.del_flag", 0);//删除标志
//合同表条件
qw.eq(bo.getCustomId() != null,"info.custom_id", bo.getCustomId());
qw.ne( "info.contract_status", ContractStatusEnum.INIT.getCode());
qw.eq( StringUtils.isNotBlank(bo.getContractStatus()),"info.contract_status", bo.getContractStatus());
qw.ne( StringUtils.isNotBlank(bo.getContractStatus()),"info.is_cancel", CommonStatusEnum.SUCCESS.getCode());

View File

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pusong.business.domain.PsContractPay;
import com.pusong.business.domain.bo.PsContractPayBo;
import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.domain.vo.PsContractPayVo;
import com.pusong.business.domain.vo.PsRefundVo;
import com.pusong.business.enums.ApproverTypeEnum;
@ -13,6 +14,7 @@ import com.pusong.business.enums.PayBuinessStatusEnum;
import com.pusong.business.enums.PayStatusEnum;
import com.pusong.business.mapper.PsContractPayMapper;
import com.pusong.business.service.IPsApproverRecordService;
import com.pusong.business.service.IPsContractInfoService;
import com.pusong.business.service.IPsContractPayService;
import com.pusong.business.service.approver.ApproverContainer;
import com.pusong.business.service.approver.ApproverService;
@ -21,10 +23,13 @@ import com.pusong.common.core.utils.MapstructUtils;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.domain.vo.SysOssVo;
import com.pusong.system.service.ISysNoticeService;
import com.pusong.system.service.ISysOssService;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@ -51,6 +56,9 @@ public class PsContractPayServiceImpl implements IPsContractPayService {
@Resource
private final ApproverContainer container;
private final IPsApproverRecordService approverRecordService;
// @Autowired
// private IPsContractInfoService contractInfoService;
private final ISysNoticeService noticeService;
/**
* 查询合同回款记录列表
*
@ -226,6 +234,10 @@ public class PsContractPayServiceImpl implements IPsContractPayService {
info.setPayCertification(StringUtils.join(payCertifications,","));
info.setPayStatus(PayStatusEnum.SUCCESS.getCode());
baseMapper.updateById(info);
// PsContractInfoVo src = contractInfoService.queryContractByCode(info.getContractCode());
// noticeService.sendNotice(SysNoticeBo.getReturnPayingInstance(info.getCreateBy(), src.getPsCustomInfoVo().getCustomName()));
return info.getContractCode();
}

View File

@ -11,10 +11,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pusong.business.domain.*;
import com.pusong.business.domain.bo.*;
import com.pusong.business.domain.vo.*;
import com.pusong.business.enums.ApproverTypeEnum;
import com.pusong.business.enums.CommonStatusEnum;
import com.pusong.business.enums.ContractStatusEnum;
import com.pusong.business.enums.CustomerStatusEnum;
import com.pusong.business.enums.*;
import com.pusong.business.mapper.*;
import com.pusong.business.service.IPsApproverRecordService;
import com.pusong.business.service.IPsCompanyInfoService;
@ -28,6 +25,9 @@ import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.satoken.utils.LoginHelper;
import com.pusong.system.RoleEnum;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.service.ISysNoticeService;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@ -57,7 +57,7 @@ public class PsCustomInfoServiceImpl implements IPsCustomInfoService {
private final ApproverContainer approverContainer;
private final IPsApproverRecordService approverRecordService;
private final ISysNoticeService noticeService;
/**
* 根据id查询客户
* @return 客户id和姓名
@ -65,7 +65,6 @@ public class PsCustomInfoServiceImpl implements IPsCustomInfoService {
@Override
public PsCustomInfo listById(Long id) {
return baseMapper.selectById(id);
}
/**
@ -230,6 +229,23 @@ public class PsCustomInfoServiceImpl implements IPsCustomInfoService {
qw.exists(StringUtils.isNotBlank(bo.getCompanyName()), "select 1 from ps_company_info com where info.id = com.custom_id and company_type = '1' and del_flag = '0' and com.company_name like '%"+bo.getCompanyName()+"%'");
qw.exists(bo.getHaveContract() != null && bo.getHaveContract() == 1,"SELECT 1 FROM ps_contract_info psci WHERE psci.custom_id = info.id and psci.contract_status != '10' and psci.is_cancel != '03'");
qw.notExists(bo.getHaveContract() != null && bo.getHaveContract() == 0,"SELECT 1 FROM ps_contract_info psci WHERE psci.custom_id = info.id and psci.contract_status != '10' and psci.is_cancel != '03'");
//app搜索
qw.and(StringUtils.isNotBlank(bo.getAppKeyWord()), wrapper -> wrapper
.like("psinfo.custom_name", bo.getAppKeyWord())
.or()
.likeLeft("info.custom_mobile", bo.getAppKeyWord())
.or()
.exists("select 1 from ps_company_info com where info.id = com.custom_id and company_type = '1' and del_flag = '0' and com.company_name like '%"+bo.getAppKeyWord()+"%'")
);
//关联客户信息表条件
qw.like(StringUtils.isNotBlank(bo.getCustomIntroducerName()), "psinfo.custom_name", bo.getCustomIntroducerName());//介绍人姓名
//公司名称
qw.exists(StringUtils.isNotBlank(bo.getCompanyName()), "select 1 from ps_company_info com where info.id = com.custom_id and company_type = '1' and del_flag = '0' and com.company_name like '%"+bo.getCompanyName()+"%'");
qw.like(StringUtils.isNotBlank(bo.getCustomMobile()), "info.custom_mobile", bo.getCustomMobile());//客户手机号
qw.orderByDesc("info.create_time");//创建时间排序
return qw;
}
@ -295,7 +311,7 @@ public class PsCustomInfoServiceImpl implements IPsCustomInfoService {
// .set("black", update.getBlack())
// .set("black_desc", update.getBlackDesc())
// .set("color", update.getColor())
.set("color", update.getColor())
// .set("history_custom_manager", update.getHistoryCustomManager())
// .set("del_flag", delFlag)
// .set("accept_date", update.getAcceptDate())
@ -371,6 +387,8 @@ public class PsCustomInfoServiceImpl implements IPsCustomInfoService {
}
wq.set(PsCustomInfo::getCustomManager,null);
psCustomInfo.setCustomManager(null);
noticeService.sendNotice(SysNoticeBo.getGonghaiInstance());
break;
case 2://拉黑
psCustomInfo.setBlack(CommonStatusEnum.Y.getCode());
@ -570,6 +588,7 @@ public class PsCustomInfoServiceImpl implements IPsCustomInfoService {
psCustomInfo.setCustomManager(userId);
psCustomInfo.setAcceptDate(new Date());
baseMapper.updateById(psCustomInfo);
noticeService.sendNotice(SysNoticeBo.getGonghaiZhipaiInstance(customerId));
}
}

View File

@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pusong.business.domain.PsApproverRecord;
import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.PsTaskAppoint;
import com.pusong.business.domain.PsTaskMain;
import com.pusong.business.domain.*;
import com.pusong.business.domain.bo.AppointBo;
import com.pusong.business.domain.bo.MediaCompanySaveBo;
import com.pusong.business.domain.bo.PsTaskMediaBo;
@ -19,14 +16,8 @@ import com.pusong.business.enums.ContractStatusEnum;
import com.pusong.business.enums.TaskStatusEnum;
import com.pusong.business.enums.TaskStatusEnum.AppointStatusEnum;
import com.pusong.business.enums.TaskTypeEnum;
import com.pusong.business.mapper.PsApproverRecordMapper;
import com.pusong.business.mapper.PsContractInfoMapper;
import com.pusong.business.mapper.PsTaskAppointMapper;
import com.pusong.business.mapper.PsTaskMainMapper;
import com.pusong.business.service.IPsApproverRecordService;
import com.pusong.business.service.IPsCompanyInfoService;
import com.pusong.business.service.IPsTaskMediaService;
import com.pusong.business.service.IPsTaskService;
import com.pusong.business.mapper.*;
import com.pusong.business.service.*;
import com.pusong.business.service.approver.ApproverContainer;
import com.pusong.common.core.exception.ServiceException;
import com.pusong.common.core.utils.DateUtils;
@ -34,7 +25,9 @@ import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.satoken.utils.LoginHelper;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.domain.vo.SysOssVo;
import com.pusong.system.service.ISysNoticeService;
import com.pusong.system.service.ISysOssService;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
@ -73,6 +66,11 @@ public class PsTaskServiceImpl implements IPsTaskService {
private final IPsApproverRecordService approverRecordService;
@Autowired
private PsApproverRecordMapper recordMapper;
@Autowired
private PsContractBusinessMapper businessMapper;
private final ISysNoticeService noticeService;
// private final IPsContractInfoService contractInfoService;
/**
* 新增主任务
*
@ -120,7 +118,23 @@ public class PsTaskServiceImpl implements IPsTaskService {
private void fillInfo(Page<PsTaskMainVo> page) {
String contractCode = null;
List<Long> serviceCompanyIdList = new ArrayList<>();
if (page.getRecords().isEmpty()){
return;
}
Map<String, List<PsContractBusinessDetailVo>> busMap = new HashMap<>();
List<Long> serviceCompanyIdList = page.getRecords().stream().map(PsTaskMainVo::getServiceCompanyId).toList();
List<String> contractCodeList = page.getRecords().stream().map(PsTaskMainVo::getContractCode).toList();
QueryWrapper<PsContractBusiness> objectQueryWrapper = new QueryWrapper<PsContractBusiness>()
.in("bus.contract_code", contractCodeList)
.in("bus.company_id", serviceCompanyIdList);
List<PsContractBusinessDetailVo> psContractBusinesses = businessMapper.selectListByContractCodeAndComanyId(objectQueryWrapper);
for (PsContractBusinessDetailVo psContractBusiness : psContractBusinesses) {
List<PsContractBusinessDetailVo> psContractBusinesses1 = busMap.computeIfAbsent(psContractBusiness.getContractCode() + "_" + psContractBusiness.getCompanyId(), a -> new ArrayList<>());
psContractBusinesses1.add(psContractBusiness);
}
for (PsTaskMainVo vo : page.getRecords()) {
if(vo.getStartDate() != null){
vo.setNumOfDat(DateUtils.calWorkDate(vo.getStartDate(),new Date()));
@ -138,6 +152,8 @@ public class PsTaskServiceImpl implements IPsTaskService {
if (vo.getTaskType().equals("2")){
vo.setBusinessTypeName(vo.getBusinessType());
}
vo.setPsContractBusinesses(busMap.get(vo.getContractCode() + "_" + vo.getServiceCompanyId()));
}
//装填服务公司信息
@ -170,7 +186,7 @@ public class PsTaskServiceImpl implements IPsTaskService {
lqw.eq("appo.appoint_type",bo.getAppointType());
lqw.eq(id != null,"appo.id",id);
lqw.eq(StringUtils.isNotBlank(bo.getAppointStatus()),"appo.appoint_status", bo.getAppointStatus());
log.info(lqw.getCustomSqlSegment());
Page<PsTaskMainVo> page = baseMapper.queryChildTaskPageList(pageQuery.build(), lqw);
fillInfo(page);
@ -296,11 +312,15 @@ public class PsTaskServiceImpl implements IPsTaskService {
if(CollectionUtils.isEmpty(save.getMediaBoList())){
return;
}
saveMedia(save.getMediaBoList(), customerId, companyId);
}
public void saveMedia(List<PsTaskMediaBo> mediaBoList, Long customerId, Long companyId) {
//2.1查询原始的合同资料信息
List<PsTaskMediaVo> mediaList = mediaService.queryMediaList(customerId,companyId);
List<PsTaskMediaVo> mediaList = mediaService.queryMediaList(customerId, companyId);
//此次需要保存的资料id后续删除使用
List<String> ossIdList = new ArrayList<>();
save.getMediaBoList().forEach(item->{
mediaBoList.forEach(item->{
item.setCustomId(customerId);
item.setCompanyId(companyId);
if(StringUtils.isNotBlank(item.getMediaOssId()) && !StringUtils.equals("-1",item.getMediaOssId())){
@ -308,7 +328,7 @@ public class PsTaskServiceImpl implements IPsTaskService {
}
});
//2.2保存最新的合同资料信息
mediaService.saveMediaList(save.getMediaBoList());
mediaService.saveMediaList(mediaBoList);
//把历史的资料id储存到list中
List<String> list = mediaList.stream().filter(item -> StringUtils.isNotBlank(item.getMediaOssId())).map(item -> item.getMediaOssId().split(",")).flatMap(Arrays::stream).collect(Collectors.toList());
//去掉与本次保存重叠的资料-1
@ -318,6 +338,7 @@ public class PsTaskServiceImpl implements IPsTaskService {
ossService.deleteWithValidByIds(list.stream().map(Long::parseLong).collect(Collectors.toList()),false);
}
}
/**
* 任务委派
*
@ -389,6 +410,10 @@ public class PsTaskServiceImpl implements IPsTaskService {
main.setTaskStatus(TaskStatusEnum.FINISH.getCode());
main.setFinishDate(new Date());
baseMapper.updateById(main);
// PsContractInfoVo contract = contractInfoService.queryContractByCode(main.getContractCode());
// noticeService.sendNotice(SysNoticeBo.getTaskFinishInstance(contract.getCustomManager(), contract.getPsCustomInfoVo().getCustomName()));
return main.getContractCode();
}
/**
@ -552,6 +577,16 @@ public class PsTaskServiceImpl implements IPsTaskService {
//执行者姓名
lqw.exists(StringUtils.isNotBlank(bo.getExecutor()), "select 1 from ps_task_appoint appoint,sys_user su " +
"where appoint.appoint_status != '50' and appoint.executor = su.user_id and appoint.task_id = main.id and su.nick_name like '%" + bo.getExecutor() + "%'");
//app搜索
lqw.and(StringUtils.isNotBlank(bo.getAppKeyWord()), wrapper -> wrapper
.like("cus.custom_name", bo.getAppKeyWord())
.or()
.likeLeft("cus.custom_mobile", bo.getAppKeyWord())
.or()
.exists("com.company_name", bo.getAppKeyWord())
);
lqw.orderByDesc("main.create_time");
return lqw;
}
@ -570,6 +605,9 @@ public class PsTaskServiceImpl implements IPsTaskService {
info.setInvoice(vo.getOssId()+"");
info.setTaskStatus(TaskStatusEnum.FINISH.getCode());
baseMapper.updateById(info);
// PsContractInfoVo contract = contractInfoService.queryContractByCode(info.getContractCode());
// noticeService.sendNotice(SysNoticeBo.getFapiaoInstance(contract.getCustomManager(), contract.getPsCustomInfoVo().getCustomName()));
}
/**
* 任务暂停

View File

@ -5,6 +5,7 @@ import com.pusong.business.domain.PsTaskAppoint;
import com.pusong.business.domain.PsTaskMain;
import com.pusong.business.mapper.PsTaskAppointMapper;
import com.pusong.business.mapper.PsTaskMainMapper;
import com.pusong.business.service.IPsTaskService;
import com.pusong.common.core.utils.MapstructUtils;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.TableDataInfo;
@ -19,6 +20,7 @@ import com.pusong.business.domain.vo.PsTaskWorkRecordVo;
import com.pusong.business.domain.PsTaskWorkRecord;
import com.pusong.business.mapper.PsTaskWorkRecordMapper;
import com.pusong.business.service.IPsTaskWorkRecordService;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.function.Function;
@ -37,7 +39,7 @@ public class PsTaskWorkRecordServiceImpl implements IPsTaskWorkRecordService {
private final PsTaskWorkRecordMapper baseMapper;
private final PsTaskAppointMapper appointMapper;
private final PsTaskMainMapper taskMainMapper;
private final IPsTaskService taskService;
/**
* 根据任务委派id查询工作进度列表
@ -88,6 +90,25 @@ public class PsTaskWorkRecordServiceImpl implements IPsTaskWorkRecordService {
return flag;
}
/**
* 新增外勤任务记录
*
* @param bo 外勤任务记录
* @return 是否新增成功
*/
@Override
@Transactional
public Boolean insertAndMedia(PsTaskWorkRecordBo bo) {
PsTaskMain taskMain = taskMainMapper.selectById(bo.getTaskId());
if (taskMain == null){
return false;
}
long customerId = taskMain.getCustomId();
long companyId = taskMain.getServiceCompanyId();
taskService.saveMedia(bo.getMediaBoList(), customerId, companyId);
insertByBo(bo);
return true;
}
// /**
// * 查询外勤任务记录

View File

@ -51,4 +51,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
inner join ps_contract_business bus on bus.contract_code = cc.contract_code and bus.company_id = cc.company_id and business_type = '2'
where cc.company_id = ${companyId}
</select>
<select id="selectListByContractCodeAndComanyId" resultType="com.pusong.business.domain.vo.PsContractBusinessDetailVo">
select
detail.*,
bus.company_id
from ps_contract_business bus
left join ps_contract_business_detail detail on bus.id = detail.business_id
</select>
</mapper>

View File

@ -221,4 +221,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
${ew.getCustomSqlSegment}
</select>
<select id="selectRenewalContract" resultType="com.pusong.business.domain.vo.PsContractBusinessVo">
select
bus.*
from ps_contract_company cc
left join ps_contract_info con on con.contract_code = cc.contract_code
left join ps_contract_business bus on bus.contract_code = con.contract_code and bus.business_type = '2'
</select>
</mapper>

View File

@ -135,6 +135,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
left join ps_company_info com on main.service_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_task_appoint appoint on appoint.task_id = main.id and appoint.appoint_status != '50' and appoint.del_flag = '0'
${ew.getCustomSqlSegment}

View File

@ -0,0 +1,28 @@
package com.pusong.system;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* sys_role表 角色
*/
@Getter
@AllArgsConstructor
public enum RoleEnum {
superadmin("superadmin","超级管理员"),
admin("admin","管理员"),
xiaoshou("xiaoshou","销售"),
zxzg("zxzg","执行主管"),
tqzxry("tqzxry","特勤执行人员"),
wqzxry("wqzxry","外勤执行人员"),
nqzxry("nqzxry","内勤执行人员"),
caiwu("caiwu","财务"),
zongcai("zongcai","总裁"),
topmanage("topmanage","总经理")
;
private String code;
private String text;
}

View File

@ -5,6 +5,8 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.util.ObjectUtil;
import com.pusong.common.core.domain.R;
import com.pusong.common.core.domain.dto.OssDTO;
import com.pusong.common.core.service.OssService;
import com.pusong.common.core.validate.QueryGroup;
import com.pusong.common.web.core.BaseController;
import com.pusong.common.log.annotation.Log;
@ -41,6 +43,9 @@ public class SysOssController extends BaseController {
private final ISysOssService ossService;
private final OssService ossService2;
/**
* 查询OSS对象存储列表
*/
@ -95,6 +100,13 @@ public class SysOssController extends BaseController {
ossService.download(ossId, response);
}
@SaIgnore
@SaCheckPermission("system:oss:download")
@GetMapping("/getOss/{ossId}")
public R<OssDTO> getOss(@PathVariable Long ossId, HttpServletResponse response) throws IOException {
return R.ok(ossService2.selectById(ossId));
}
/**
* 删除OSS对象存储
*

View File

@ -48,4 +48,21 @@ public class SysNotice extends TenantEntity {
*/
private String remark;
/**
* 接收角色
*/
private String recRole;
/**
* 接收uid
*/
private Long recUid;
/**
* 跳转类型
*/
private int jumpType;
}

View File

@ -1,5 +1,6 @@
package com.pusong.system.domain.bo;
import com.pusong.system.RoleEnum;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
@ -9,6 +10,8 @@ import com.pusong.common.core.xss.Xss;
import com.pusong.common.mybatis.core.domain.BaseEntity;
import com.pusong.system.domain.SysNotice;
import javax.management.relation.Role;
/**
* 通知公告业务对象 sys_notice
*
@ -58,4 +61,290 @@ public class SysNoticeBo extends BaseEntity {
*/
private String createByName;
/**
* 接收角色
*/
private String recRole;
/**
* 接收uid
*/
private Long recUid;
/**
* 跳转类型
*/
private int jumpType;
public static SysNoticeBo getGonghaiInstance(){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("\uD83C\uDF89【公海商机来袭\uD83C\uDF89【公海】有新客户啦速来认领抢占先机");
noticeBo.setRecRole(RoleEnum.xiaoshou.getCode());
noticeBo.setJumpType(0);
return noticeBo;
}
/**
* 公海审批通过
* @param uid
* @return
*/
public static SysNoticeBo getGonghaiShenpiInstance(long uid){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("认领客户【客户姓名】审批通过,客户已就绪,速速联系,把握良机!");
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getGonghaiZhipaiInstance(long uid){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("\uD83D\uDCAA客户【客户姓名】已派至名下把握良机全力出击成交在望动起来");
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getGonghaiZhipaiErrorInstance(long uid, String desc){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("认领客户【客户姓名】审批未过,另选良缘,销售英雄,再攀高峰!拒绝原因:" + desc);
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getFirstPayInstance(long uid, String coustomName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ coustomName +"】的首笔回款也已成功入账,辛勤耕耘终获硕果,再接再厉,未来更可期!");
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getFirstPayErrorInstance(long uid, String coustomName, String desc){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ coustomName +"】的首笔回款存在问题,请确认相关问题,拒绝原因:" + desc);
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getPayInstance(long uid, String coustomName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ coustomName +"】的回款也已成功入账,辛勤耕耘终获硕果,再接再厉,未来更可期!");
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getPayErrorInstance(long uid, String coustomName, String desc){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ coustomName +"】的回款存在问题,请确认相关问题,拒绝原因:" + desc);
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getLastPayInstance(long uid, String coustomName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ coustomName +"】的最后一笔回款已成功入账,佳绩在握!再接再厉,共创辉煌!");
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getLastPayErrorInstance(long uid, String coustomName, String desc){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ coustomName +"】的最后一笔回款存在问题,请确认相关信息,拒绝原因:" + desc);
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getUpdateContractInstance(long uid, String coustomName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("修改【"+ coustomName +"】的合同审批通过,请告知客户并确认回传合同。");
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getUpdateContractErrorInstance(long uid, String coustomName, String desc){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("修改【"+ coustomName +"】的合同审批被拒绝,请检查并确认问题,拒绝原因:" + desc);
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getPdfRolbackInstance(long uid, String coustomName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("回传【"+ coustomName +"】的合同审批通过,佳绩在握!再接再厉,共创辉煌!");
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getPdfRolbackErrorInstance(long uid, String coustomName, String desc){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("回传【"+ coustomName +"】的合同审批被拒,请确认相关问题后重新回传,拒绝原因:拒绝原因说明" + desc);
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getReturnPayInstance(long uid, String coustomName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ coustomName +"】的退款申请已审批通过,财务处理退款中,请继续跟进。");
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getReturnPayingInstance(long uid, String coustomName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ coustomName +"】的退款财务已完成退款,请告知客户确认退款是否到账。");
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getReturnPayErrorInstance(long uid, String coustomName, String desc){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ coustomName +"】的退款申请被拒绝,请确认相关问题,拒绝原因:" + desc);
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getReturningPayToCaowuInstance(String coustomName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("有一笔【"+ coustomName +"】的待处理的退款,请及时处理。");
noticeBo.setRecRole(RoleEnum.caiwu.getCode());
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getSignInstance(long uid, String coustomName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ coustomName +"】的申请盖章审批通过,胜利在望,再接再厉!");
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getSignErrorInstance(long uid, String coustomName, String desc){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ coustomName +"】的申请盖章审批被拒,请确认相关问题后重新申请,拒绝原因:" + desc);
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getFapiaoInstance(long uid, String coustomName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ coustomName +"】的发票已上传,请到合同查看发票。合同圆满收尾,销售精英再创新高,继续加油!");
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getFapiaoReqInstance(String coustomName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("新增【"+ coustomName +"】的开票需求,请及时处理。");
noticeBo.setRecRole(RoleEnum.caiwu.getCode());
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getTaskFinishInstance(long uid, String coustomName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ coustomName +"】的合同任务已完成,请确认回款是否全部完成,回传合同是否上传,冲刺收官,共创佳绩!");
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getFreeTaskInstance(long uid, String serviceCompanyName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ serviceCompanyName +"】的免费工单已审批通过,免费工单任务已生成,请继续跟进。");
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getFreeTaskToRoleInstance(String serviceCompanyName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ serviceCompanyName +"】的免费工单已审批通过,免费工单任务已生成,请继续跟进。");
noticeBo.setRecRole(RoleEnum.zxzg.getCode());
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getFreeTaskErrorToUidInstance(long uid, String serviceCompanyName, String desc){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ serviceCompanyName +"】的免费工单已拒绝,请确认相关信息,拒绝原因:" + desc);
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
}

View File

@ -107,6 +107,11 @@ public class SysUserBo extends BaseEntity {
*/
private Long roleId;
/**
* 数据权限 当前角色key
*/
private String roleKey;
/**
* 排除不查询的用户(工作流用)
*/

View File

@ -139,4 +139,11 @@ public class SysUserVo implements Serializable {
*/
private Long roleId;
private String openid;
/**
* 1时需要后台开通 2需要手机号授权登录
*/
private Integer code;
}

View File

@ -88,4 +88,5 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
})
int updateById(@Param(Constants.ENTITY) SysUser user);
int updateOpenIdById(SysUser user);
}

View File

@ -41,6 +41,7 @@ public interface ISysNoticeService {
*/
int insertNotice(SysNoticeBo bo);
int sendNotice(SysNoticeBo bo);
/**
* 修改公告
*

View File

@ -4,21 +4,30 @@ import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pusong.common.core.domain.R;
import com.pusong.common.core.service.DictService;
import com.pusong.common.core.utils.MapstructUtils;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.websocket.dto.WebSocketMessageDto;
import com.pusong.common.websocket.holder.WebSocketSessionHolder;
import com.pusong.common.websocket.utils.WebSocketUtils;
import com.pusong.system.domain.SysNotice;
import com.pusong.system.domain.SysUser;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.domain.bo.SysUserBo;
import com.pusong.system.domain.vo.SysNoticeVo;
import com.pusong.system.domain.vo.SysUserVo;
import com.pusong.system.mapper.SysNoticeMapper;
import com.pusong.system.mapper.SysUserMapper;
import com.pusong.system.service.ISysNoticeService;
import com.pusong.system.service.ISysUserService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.web.socket.WebSocketSession;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@ -33,6 +42,8 @@ public class SysNoticeServiceImpl implements ISysNoticeService {
private final SysNoticeMapper baseMapper;
private final SysUserMapper userMapper;
private final DictService dictService;
private final ISysUserService userService;
@Override
public TableDataInfo<SysNoticeVo> selectPageNoticeList(SysNoticeBo notice, PageQuery pageQuery) {
@ -87,7 +98,50 @@ public class SysNoticeServiceImpl implements ISysNoticeService {
SysNotice notice = MapstructUtils.convert(bo, SysNotice.class);
return baseMapper.insert(notice);
}
@Override
public int sendNotice(SysNoticeBo bo) {
String type = dictService.getDictLabel("sys_notice_type", bo.getNoticeType());
List<SysNotice> insertData = new ArrayList<>();
List<Long> uids = new ArrayList<>();
if (bo.getRecRole() != null){
SysUserBo query = new SysUserBo();
query.setRoleKey(bo.getRecRole());
PageQuery pageQuery = new PageQuery();
pageQuery.setPageSize(999);
TableDataInfo<SysUserVo> sysUserVoTableDataInfo = userService.selectAllocatedList(query, pageQuery);
for (SysUserVo row : sysUserVoTableDataInfo.getRows()) {
uids.add(row.getUserId());
SysNotice sysNoticeBo = MapstructUtils.convert(bo, SysNotice.class);
sysNoticeBo.setRecUid(row.getUserId());
insertData.add(sysNoticeBo);
}
}else if (bo.getRecUid() != null){
uids.add(bo.getRecUid());
SysNotice sysNoticeBo = MapstructUtils.convert(bo, SysNotice.class);
sysNoticeBo.setRecUid(bo.getRecUid());
insertData.add(sysNoticeBo);
}else{
//全员
SysUserBo user = new SysUserBo();
PageQuery pageQuery = new PageQuery();
pageQuery.setPageSize(100000);
TableDataInfo<SysUserVo> sysUserVoTableDataInfo = userService.selectPageUserList(user, pageQuery);
for (SysUserVo row : sysUserVoTableDataInfo.getRows()) {
uids.add(row.getUserId());
SysNotice sysNoticeBo = MapstructUtils.convert(bo, SysNotice.class);
sysNoticeBo.setRecUid(row.getUserId());
insertData.add(sysNoticeBo);
}
}
WebSocketMessageDto webSocketMessage = new WebSocketMessageDto();
webSocketMessage.setMessage(bo.getNoticeContent());
webSocketMessage.setSessionKeys(uids);
WebSocketUtils.publishMessage(webSocketMessage);
baseMapper.insertBatch(insertData);
return 1;
}
/**
* 修改公告
*

View File

@ -134,6 +134,20 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
}
return list;
}
@Override
public OssDTO selectById(Long ossId) {
SysOssVo vo = SpringUtils.getAopProxy(this).getById(ossId);
if (ObjectUtil.isNotNull(vo)) {
try {
vo.setUrl(this.matchingUrl(vo).getUrl());
return BeanUtil.toBean(vo, OssDTO.class);
} catch (Exception ignored) {
// 如果oss异常无法连接则将数据直接返回
return BeanUtil.toBean(vo, OssDTO.class);
}
}
return null;
}
private LambdaQueryWrapper<SysOss> buildQueryWrapper(SysOssBo bo) {
Map<String, Object> params = bo.getParams();

View File

@ -130,6 +130,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
QueryWrapper<SysUser> wrapper = Wrappers.query();
wrapper.eq("u.del_flag", UserConstants.USER_NORMAL)
.eq(ObjectUtil.isNotNull(user.getRoleId()), "r.role_id", user.getRoleId())
.eq(ObjectUtil.isNotNull(user.getRoleKey()), "r.role_key", user.getRoleKey().split(","))
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())

View File

@ -69,5 +69,11 @@
select count(*) from sys_user where del_flag = '0' and user_id = #{userId}
</select>
<update id="updateOpenIdById" parameterType="SysUser">
update sys_user
<trim prefix="SET" suffixOverrides=",">
<if test="openid != null">openid = #{openid},</if>
</trim>
where user_id = #{userId}
</update>
</mapper>

View File

@ -4,3 +4,9 @@ alter table ps_company_info add `contact_person_idcard` varchar(20) comment '联
alter table sys_user add `openid` varchar(30) comment '微信openid';
alter table ps_custom_info add `service_type` varchar(200) comment '服务类别';
alter table sys_notice add `rec_role` bigint(20) comment '接收角色';
alter table sys_notice add `rec_uid` bigint(20) comment '接收用户';
alter table sys_notice add `jump_type` int(2) comment '跳转类型';