Merge remote-tracking branch 'origin/master'

This commit is contained in:
zhangqinlin
2021-09-24 18:27:58 +08:00
63 changed files with 1409 additions and 685 deletions
@@ -6,7 +6,9 @@ import com.jero.common.api.dto.OnlineAuthDTO;
import com.jero.common.api.dto.message.*;
import com.jero.common.system.vo.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
@@ -280,6 +282,14 @@ public interface ISysBaseAPI extends CommonAPI {
* @param content
*/
void sendEmailMsg(String email,String title,String content);
/**
* 40发送m模板邮件消息
* @param email 接收人 必传
* @param title 标题 (不传取模板标题)
* @param templateCode 模板编码 必传
* @param map 模板替换参数 必传
*/
void sendEmailTemplateMsg(String email, String title, String templateCode, Map<String,String> map);
/**
* 41根据部门id查询部门所有的父级(不包含自己)
* @author 马志朝
@@ -314,4 +324,13 @@ public interface ISysBaseAPI extends CommonAPI {
* 发送短信验证码
*/
void sendVerificationCode(String phone, String codeType, String codeTime,String templateParas);
/**
* 发送短信
* @param phone 手机号
* @param codeType 发送类型
* @param codeTime 超时时间
* @param templateCode 模板编码
* @param map 参数集合
*/
void sendSMS(String phone, String codeType, String codeTime,String templateCode,HashMap<String,String> map);
}
@@ -11,7 +11,35 @@ public enum SysAnnmentTypeEnum {
/**
* 工作流跳转链接我的办公
*/
BPM("bpm", "url", "/bpm/task/MyTaskList");
BPM("bpm", "url", "/bpm/task/MyTaskList"),
// 管理端
M_OPEN_TYPE1("M_OPEN_TYPE1","component","@comp/ProjectDetailModal"),
M_OPEN_TYPE2("M_OPEN_TYPE2","url","/contractManagement/RevenueContractDetail"),
M_OPEN_TYPE3("M_OPEN_TYPE3","url","/contractManagement/RevenueContractDetail"),
M_OPEN_TYPE4("M_OPEN_TYPE4","url","/contractManagement/RevenueContractDetail"),
M_OPEN_TYPE5("M_OPEN_TYPE5","component","@views/incomePayments/meetManage/modules/AuditModal"),
M_OPEN_TYPE6("M_OPEN_TYPE6","component","@comp/ProjectDetailModal"),
M_OPEN_TYPE7("M_OPEN_TYPE7","component","@comp/ProjectDetailModal"),
M_OPEN_TYPE8("M_OPEN_TYPE8","url","/incomePayments/meetManage/SignUpInfoDetail"),
M_OPEN_TYPE9("M_OPEN_TYPE9","url","/businessManagement/BusinessManagement"),
// todo 待定企业端
C_OPEN_TYPE1("C_OPEN_TYPE1","url",""),
C_OPEN_TYPE2("C_OPEN_TYPE2","component",""),
C_OPEN_TYPE3("C_OPEN_TYPE3","component",""),
C_OPEN_TYPE4("C_OPEN_TYPE4","component",""),
C_OPEN_TYPE5("C_OPEN_TYPE5","component",""),
C_OPEN_TYPE6("C_OPEN_TYPE6","component",""),
C_OPEN_TYPE7("C_OPEN_TYPE7","component",""),
C_OPEN_TYPE8("C_OPEN_TYPE8","none",""),
C_OPEN_TYPE9("C_OPEN_TYPE9","",""),
C_OPEN_TYPE10("C_OPEN_TYPE10","",""),
C_OPEN_TYPE11("C_OPEN_TYPE11","component",""),
C_OPEN_TYPE12("C_OPEN_TYPE12","component","");
/**
* 业务类型(email:邮件 bpm:流程)
@@ -93,10 +93,15 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/sys/common/pdf/**", "anon");//pdf预览
filterChainDefinitionMap.put("/generic/**", "anon");//pdf预览需要文件
filterChainDefinitionMap.put("/paymentRecord/payPaymentRecord/standardsAddAR", "anon");//标协会员添加来款
filterChainDefinitionMap.put("/sys/sendVerificationCode", "anon"); //发送验证码
filterChainDefinitionMap.put("/sys/verificationChangePassword", "anon"); //短信验证码修改密码
//企业端登录
filterChainDefinitionMap.put("/company/login", "anon");//登录接口排除
filterChainDefinitionMap.put("/company/smsLogin", "anon");//短信登录接口排除
filterChainDefinitionMap.put("/company/logout", "anon");//登出接口排除
filterChainDefinitionMap.put("/company/changePassword", "anon");//短信验证码修改密码
filterChainDefinitionMap.put("/company/verificationChangePassword", "anon");//短信验证码修改密码
filterChainDefinitionMap.put("/company/sendVerificationCode", "anon");//企业端发送验证码
//和会员系统交互的接口
@@ -94,4 +94,52 @@ public class ProjectCommon {
* 邮寄状态(0:未邮寄,1:已邮寄)
*/
public final static Integer POST_STATUS1 = 1;
/**
* 收入合同处新增标识 flag = 1
*/
public final static String FLAG = "1";
/**
* 项目提醒
*/
public final static String ALERT1 = "1";
/**
* 合同提醒
*/
public final static String ALERT2 = "2";
/**
* 会议提醒
*/
public final static String ALERT3 = "3";
/**
* 打包提醒
*/
public final static String ALERT4 = "4";
/**
* 企业提醒
*/
public final static String ALERT5 = "5";
/**
* 文件提醒
*/
public final static String ALERT6 = "6";
/**
* 邮寄提醒
*/
public final static String ALERT7 = "7";
/**
* 催款提醒
*/
public final static String ALERT8 = "8";
/**
* 1短信 2邮件 3系统
*/
public final static String MESSAGE_TYPE1 = "1";
/**
* 1短信 2邮件 3系统
*/
public final static String MESSAGE_TYPE2 = "2";
/**
* 1短信 2邮件 3系统
*/
public final static String MESSAGE_TYPE3 = "3";
}
@@ -0,0 +1,13 @@
package com.jero.common.common;
public class RoleCommon {
/**
* 项目负责人
*/
public final static String XMFZR = "xmfzr";
/**
* 财务人员
*/
public final static String CWRY = "cwry";
}
@@ -0,0 +1,47 @@
package com.jero.common.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.HashMap;
/**
* @Description 发送短信,消息,邮件
* @Author lqt
* @Date 2021/9/24
*/
@Data
public class SendMessageDTO implements Serializable {
/**
* 发送人(用户登录账户)
*/
private String fromUser;
/**
* 发送给(用户登录账户)
*/
private String toUser;
/**
* 手机号(发送短信必传)
*/
private String phone;
/**
* 邮箱地址(发送邮箱必传)
*/
private String email;
/**
* 业务类型
*/
private String busType;
/**
* 业务id
*/
private String busId;
/**
* 模板编码
*/
private String templateCode;
/**
* 模板参数
*/
private HashMap<String, String> templateParam;
}
@@ -12,18 +12,18 @@ import org.apache.commons.lang3.StringUtils;
*/
public enum CompanyMessageEnums {
MSG1("HYTZ_WORK_GROUP_CREATE","会议提醒","点击跳转到报名页面"),
MSG2("HYTZ_WORK_GROUP_SIGN_UP","会议提醒","弹窗:查看该会议详情"),
MSG3("HYTZ_WORK_GROUP_UPLOAD","会议提醒","弹窗:查看该会议详情"),
MSG4("HYTZ_WORK_GROUP_NOT_UPLOAD","会议提醒","弹窗:查看该会议详情"),
MSG5("HYTZ_NOT_AUDIT","会议提醒","弹窗:上传汇款凭证"),
MSG6("HYTZ_AUDIT","会议提醒","弹窗:查看该会议详情"),
MSG7("WJTZ_MEETING_SEND","文件提醒","弹窗:查看该会议详情"),
MSG8("HTTZ_PHASE","合同提醒",""),
MSG9("YJTZ_MAIL","邮寄提醒","查看该物流信息"),
MSG10("YJTZ_MAIL_CONTRACT","邮寄提醒","查看该物流信息"),
MSG11("CKTZ_PAY","催款提醒","弹窗:查看该项目详情"),
MSG12("WJTZ_WORK_GROUP_SEND","文件提醒","弹窗:查看该项目详情");
MSG1("HYTZ_WORK_GROUP_CREATE","会议通知"),//点击跳转到报名页面meetingNamebusId
MSG2("HYTZ_WORK_GROUP_SIGN_UP","会议通知"),//弹窗:查看该会议详情meetingName
MSG3("HYTZ_WORK_GROUP_UPLOAD","会议通知"),//弹窗:查看该会议详情meetingName
MSG4("HYTZ_WORK_GROUP_NOT_UPLOAD","会议通知"),//弹窗:查看该会议详情meetingName
MSG5("HYTZ_NOT_AUDIT","会议通知"),//弹窗:上传汇款凭证meetingName
MSG6("HYTZ_AUDIT","会议通知"),//弹窗:查看该会议详情meetingName
MSG7("WJTZ_MEETING_SEND","文件通知"),//弹窗:查看该会议详情meetingName
MSG8("HTTZ_PHASE","合同通知"),//无,contractnumamount
MSG9("YJTZ_MAIL","邮寄通知"),//查看该物流信息,projectName
MSG10("YJTZ_MAIL_CONTRACT","邮寄通知"),//查看该物流信息,contractName
MSG11("CKTZ_PAY","催款通知"),//弹窗:查看该项目详情projectName
MSG12("WJTZ_WORK_GROUP_SEND","文件通知");//弹窗:查看该项目详情workGroupName
private String code;
@@ -32,10 +32,9 @@ public enum CompanyMessageEnums {
private String detail;
CompanyMessageEnums(String code, String value, String detail){
CompanyMessageEnums(String code, String value){
this.code = code;
this.value = value;
this.detail = detail;
}
public String getCode() {
@@ -54,14 +53,6 @@ public enum CompanyMessageEnums {
this.value = value;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
public static CompanyMessageEnums getByCode(String code) {
if (StringUtils.isBlank(code)) {
return null;
@@ -11,26 +11,23 @@ import org.apache.commons.lang3.StringUtils;
*/
public enum ManagementMessageEnums {
MSG1("HTTZ_CREATE_PROJECT","项目提醒","查看详情"),
MSG2("HTTZ_SUBMIT","合同提醒","跳转到合同的详情页面"),
MSG3("HTTZ_AUDIT","合同提醒","跳转到合同的详情页面"),
MSG4("HTTZ_NOT_AUDIT","合同提醒","跳转到合同的详情页面"),
MSG5("HYTZ_SIGN_UP_UPLOAD","会议提醒","审核弹窗"),
MSG6("DBTZ_ADD","打包提醒","查看该项目详情"),
MSG7("DBTZ_CONTRACT","打包提醒","查看项目详情"),
MSG8("HYTZ_ON_ACCESS_UPDATE","会议提醒","查看该参会人详情"),
MSG9("QYTZ_CREATE","企业提醒","企业列表页");
MSG1("HTTZ_CREATE_PROJECT","项目通知"),// 查看详情,projectName
MSG2("HTTZ_SUBMIT","合同通知"),// 跳转到合同的详情页面,contractNum,contractName
MSG3("HTTZ_AUDIT","合同通知"),//跳转到合同的详情页面,contractNum,contractName
MSG4("HTTZ_NOT_AUDIT","合同通知"),//跳转到合同的详情页面,contractNum,contractName
MSG5("HYTZ_SIGN_UP_UPLOAD","会议通知"),//审核弹窗
MSG6("DBTZ_ADD","打包通知"),//查看该项目详情,projectName
MSG7("DBTZ_CONTRACT","打包通知"),//查看项目详情,projectName
MSG8("HYTZ_ON_ACCESS_UPDATE","会议通知"),//查看该参会人详情,meetingNameusername1username2
MSG9("QYTZ_CREATE","企业通知");//企业列表页
private String code;
private String value;
private String detail;
ManagementMessageEnums(String code, String value, String detail){
ManagementMessageEnums(String code, String value){
this.code = code;
this.value = value;
this.detail = detail;
}
public String getCode() {
@@ -49,14 +46,6 @@ public enum ManagementMessageEnums {
this.value = value;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
public static ManagementMessageEnums getByCode(String code) {
if (StringUtils.isBlank(code)) {
return null;
@@ -0,0 +1,13 @@
package com.jero.common.service;
public interface ContractCreateProjectSendMessageService {
/**
* @Description 合同创建项目发送消息,通知项目负责人
* @Author lqt
* @Date 2021/9/24
* @Param projectName 项目名称
* @Return
* @Exception
*/
void ContractCreateProjectSendMessageService(String projectName);
}
@@ -0,0 +1,15 @@
package com.jero.common.service;
import com.jero.common.dto.SendMessageDTO;
public interface SendMessageService {
/**
* @Description 发送短信,消息,邮件
* @Author lqt
* @Date 2021/9/24
* @Param sendMessageDTO
* @Return
* @Exception
*/
void SendMessageService(SendMessageDTO sendMessageDTO);
}
@@ -0,0 +1,58 @@
package com.jero.common.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.jero.common.common.RoleCommon;
import com.jero.common.dto.SendMessageDTO;
import com.jero.common.enums.CompanyMessageEnums;
import com.jero.common.enums.ManagementMessageEnums;
import com.jero.common.service.ContractCreateProjectSendMessageService;
import com.jero.common.service.SendMessageService;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.PasswordUtil;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@Service
public class ContractCreateProjectSendMessageServiceImpl implements ContractCreateProjectSendMessageService {
@Autowired
private ISysUserService sysUserService;
@Autowired
private SendMessageService sendMessageService;
@Override
public void ContractCreateProjectSendMessageService(String projectName) {
// 获取项目负责人,发送消息
List<SysUser> list = sysUserService.getRolesUser(Arrays.asList(RoleCommon.XMFZR));
if(!CollectionUtils.isEmpty(list)){
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
list.forEach(p->{
// 发送消息
SendMessageDTO sendMessageDTO = new SendMessageDTO();
if(!StringUtils.isBlank(p.getEmail())){
sendMessageDTO.setEmail(PasswordUtil.decrypt(p.getEmail()));
}
HashMap<String,String> map = new HashMap<>();
map.put("projectName",projectName);
sendMessageDTO.setFromUser(sysUser.getId());
sendMessageDTO.setToUser(p.getUsername());
sendMessageDTO.setTemplateCode(ManagementMessageEnums.MSG1.getCode());
sendMessageDTO.setTemplateParam(map);
sendMessageDTO.setBusType("M_OPEN_TYPE1");
JSONObject json = new JSONObject();
json.put("id",p.getId());
sendMessageDTO.setBusId(json.toJSONString());
sendMessageService.SendMessageService(sendMessageDTO);
});
}
}
}
@@ -124,8 +124,9 @@ public class ProjectDetailServiceImpl implements ProjectDetailService {
if(!Objects.isNull(payCommonProject.getPack())){
projectDetailVO.setPack_dictText(sysBaseAPI.translateDict("yn",String.valueOf(payCommonProject.getPack())));
}
// 标协会员,直接查询企业,联系人
if(Objects.equals(String.valueOf(payCommonProject.getProjectType()), ProjectCommon.PROJECT_TYPE5)){
// 标协会员和会议,直接查询企业,联系人
if(Objects.equals(String.valueOf(payCommonProject.getProjectType()), ProjectCommon.PROJECT_TYPE5)
|| Objects.equals(String.valueOf(payCommonProject.getProjectType()), ProjectCommon.PROJECT_TYPE3)){
PayCompanyManagement payCompanyManagement = payCompanyManagementService.getById(payCommonProject.getChargeCompanyTemporaryId());
if(Objects.isNull(payCompanyManagement)){
throw new JeroBootException("企业不存在!");
@@ -0,0 +1,156 @@
package com.jero.common.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.jero.common.common.ProjectCommon;
import com.jero.common.constant.CommonConstant;
import com.jero.common.constant.WebsocketConst;
import com.jero.common.dto.SendMessageDTO;
import com.jero.common.exception.JeroBootException;
import com.jero.common.service.SendMessageService;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.common.util.SysAnnmentTypeEnum;
import com.jero.common.util.oConvertUtils;
import com.jero.modules.message.entity.SysMessageTemplate;
import com.jero.modules.message.handle.impl.EmailSendMsgHandle;
import com.jero.modules.message.service.ISysMessageTemplateService;
import com.jero.modules.message.websocket.WebSocket;
import com.jero.modules.system.entity.SysAnnouncement;
import com.jero.modules.system.entity.SysAnnouncementSend;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysAnnouncementSendService;
import com.jero.modules.system.service.ISysAnnouncementService;
import com.jero.modules.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
@Slf4j
@Service
public class SendMessageServiceImpl implements SendMessageService {
@Autowired
private ISysBaseAPI sysBaseAPI;
@Autowired
private ISysMessageTemplateService sysMessageTemplateService;
@Resource
private ISysAnnouncementService sysAnnouncementService;
@Resource
private ISysUserService sysUserService;
@Resource
private ISysAnnouncementSendService sysAnnouncementSendService;
@Resource
private WebSocket webSocket;
/**
* 超时时间
*/
private String time = "60";
/**
* 短信类型
*/
private String type = "5";
@Override
public void SendMessageService(SendMessageDTO sendMessageDTO) {
if(StringUtils.isEmpty(sendMessageDTO.getTemplateCode())){
throw new JeroBootException("模板编码不能为空!");
}
List<SysMessageTemplate> sysSmsTemplates = sysMessageTemplateService.selectByCode(sendMessageDTO.getTemplateCode());
if(CollectionUtils.isEmpty(sysSmsTemplates)){
throw new JeroBootException("消息模板不能为空!");
}
SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0);
// 没有选项,不发送消息
String templateType = sysSmsTemplate.getTemplateType();
if(StringUtils.isBlank(templateType)){
return;
}
//模板标题
String title = sysBaseAPI.translateDict("notice_type",sysSmsTemplate.getTemplateName());
//模板内容
String content = sysSmsTemplate.getTemplateContent();
HashMap<String,String> map = sendMessageDTO.getTemplateParam();
if(!Objects.isNull(map)) {
for (Map.Entry<String, String> entry : map.entrySet()) {
String str = "${" + entry.getKey() + "}";
content = content.replace(str, entry.getValue());
}
}
// 1短信 2邮件 3系统
// 发送邮件 true
if(templateType.contains(ProjectCommon.MESSAGE_TYPE2) && !StringUtils.isEmpty(sendMessageDTO.getEmail())){
try {
EmailSendMsgHandle emailHandle = new EmailSendMsgHandle();
emailHandle.SendMsg(sendMessageDTO.getEmail(), title, content);
}catch (Exception e){
log.error("发送邮件异常",e);
}
}
// 发送消息
if(templateType.contains(ProjectCommon.MESSAGE_TYPE3) && !StringUtils.isEmpty(sendMessageDTO.getToUser())){
try {
String fromUser = sendMessageDTO.getFromUser();
String toUser = sendMessageDTO.getToUser();
String busId = sendMessageDTO.getBusId();
String busType = sendMessageDTO.getBusType();
SysAnnouncement announcement = new SysAnnouncement();
announcement.setTitile(sysSmsTemplate.getTemplateName());
announcement.setMsgContent(content);
announcement.setSender(fromUser);
announcement.setPriority(CommonConstant.PRIORITY_M);
announcement.setMsgType(CommonConstant.MSG_TYPE_UESR);
announcement.setSendStatus(CommonConstant.HAS_SEND);
announcement.setSendTime(new Date());
announcement.setMsgCategory(CommonConstant.MSG_CATEGORY_2);
announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0));
announcement.setBusId(busId);
announcement.setBusType(busType);
if(!StringUtils.isEmpty(busType)){
announcement.setOpenType(SysAnnmentTypeEnum.getByType(busType).getOpenType());
announcement.setOpenPage(SysAnnmentTypeEnum.getByType(busType).getOpenPage());
}
announcement.setTemplateCode(sendMessageDTO.getTemplateCode());
sysAnnouncementService.save(announcement);
// 2.插入用户通告阅读标记表记录
String userId = toUser;
String[] userIds = userId.split(",");
String anntId = announcement.getId();
for(int i=0;i<userIds.length;i++) {
if(oConvertUtils.isNotEmpty(userIds[i])) {
SysUser sysUser = sysUserService.getUserByName(userIds[i]);
if(Objects.isNull(sysUser)) {
continue;
}
SysAnnouncementSend announcementSend = new SysAnnouncementSend();
announcementSend.setAnntId(anntId);
announcementSend.setUserId(sysUser.getId());
announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
sysAnnouncementSendService.save(announcementSend);
JSONObject obj = new JSONObject();
obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER);
obj.put(WebsocketConst.MSG_USER_ID, sysUser.getId());
obj.put(WebsocketConst.MSG_ID, announcement.getId());
obj.put(WebsocketConst.MSG_TXT, title);
webSocket.sendMessage(sysUser.getId(), obj.toJSONString());
}
}
}catch (Exception e){
log.error("发送消息异常",e);
}
}
// todo 发送短信 待完成
if(templateType.contains(ProjectCommon.MESSAGE_TYPE1) && !StringUtils.isEmpty(sendMessageDTO.getPhone())){
try {
sysBaseAPI.sendSMS(sendMessageDTO.getPhone(),type,time,sendMessageDTO.getTemplateCode(),sendMessageDTO.getTemplateParam());
}catch (Exception e){
log.error("发送短信异常",e);
}
}
}
}
@@ -3,7 +3,6 @@ package com.jero.company.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.api.vo.Result;
import com.jero.common.constant.CacheConstant;
import com.jero.common.constant.CommonConstant;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.api.ISysBaseAPI;
@@ -23,6 +22,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -49,6 +49,8 @@ public class CompanyLoginController {
private ISysDictService sysDictService;
@Resource
private BaseCommonService baseCommonService;
@Value("${defaultPassword}")
private String defaultPassword;
/**
* 密码登录错误的次数前缀
*/
@@ -62,9 +64,9 @@ public class CompanyLoginController {
@PostMapping(value = "/login")
public Result<JSONObject> login(@RequestBody SysLoginModel sysLoginModel) {
Result<JSONObject> result = new Result<>();
String username = PasswordUtil.encrypt(sysLoginModel.getUsername());
String phone = sysLoginModel.getUsername();
String password = sysLoginModel.getPassword();
/*String rsaPublicKey = sysLoginModel.getRsaPublicKey();
String rsaPublicKey = sysLoginModel.getRsaPublicKey();
String rsaPrivateKey = String.valueOf(redisUtil.get(rsaPublicKey));
//update-begin--Author:scott Date:20190805 for:暂时注释掉密码加密逻辑,有点问题
//前端密码加密,后端进行密码解密
@@ -89,14 +91,14 @@ public class CompanyLoginController {
try {
//解密获取密码和用户名
password = CommonUtils.decryptBtRsaPriKey(password, rsaPrivateKey);
username = CommonUtils.decryptBtRsaPriKey(username, rsaPrivateKey);
phone = CommonUtils.decryptBtRsaPriKey(phone, rsaPrivateKey);
} catch (Exception e) {
e.printStackTrace();
}*/
}
//1. 校验用户是否有效
//update-begin-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug,if条件永远为false
LambdaQueryWrapper<PayContactsManagement> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PayContactsManagement::getPhone, username);
queryWrapper.eq(PayContactsManagement::getPhone, PasswordUtil.encrypt(phone));
PayContactsManagement contactsManagement = payContactsManagementService.getOne(queryWrapper);
//update-end-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug,if条件永远为false
if (Objects.isNull(contactsManagement)) {
@@ -105,41 +107,95 @@ public class CompanyLoginController {
// 若用户名有效,则查询该账号的登陆失败次数是否符合等保要求
int retryCount = 0;
if (redisUtil.get(RETRY_LOGIN_PREFIX + username) != null) {
retryCount = (int) redisUtil.get(RETRY_LOGIN_PREFIX + username);
if (redisUtil.get(RETRY_LOGIN_PREFIX + phone) != null) {
retryCount = (int) redisUtil.get(RETRY_LOGIN_PREFIX + phone);
}
if (retryCount >= RETRY_LOGIN_MAX_COUNT) {
result.error500("密码错误次数过多,请稍后重试");
return result;
}
//2. 校验用户名或密码是否正确
String userpassword = PasswordUtil.encrypt(username, password, contactsManagement.getSalt());
String userpassword = PasswordUtil.encrypt(phone, password, contactsManagement.getSalt());
String syspassword = contactsManagement.getPassword();
if (!syspassword.equals(userpassword)) {
// 重试登录次数加一
retryCount++;
if (retryCount == 1) {
redisUtil.set(RETRY_LOGIN_PREFIX + username, retryCount, 60 * 30);
redisUtil.set(RETRY_LOGIN_PREFIX + phone, retryCount, 60 * 30);
} else {
redisUtil.set(RETRY_LOGIN_PREFIX + username, retryCount, redisUtil.getExpire(RETRY_LOGIN_PREFIX + username));
redisUtil.set(RETRY_LOGIN_PREFIX + phone, retryCount, redisUtil.getExpire(RETRY_LOGIN_PREFIX + phone));
}
String msg = retryCount == RETRY_LOGIN_MAX_COUNT ? "密码错误次数过多,请稍后重试" : "用户名或密码错误,剩余可登录次数:" + (RETRY_LOGIN_MAX_COUNT - retryCount);
result.error500(msg);
return result;
}
//登录成功,清除错误登录次数
redisUtil.del(RETRY_LOGIN_PREFIX + username);
redisUtil.del(RETRY_LOGIN_PREFIX + phone);
//用户登录信息
userInfo(contactsManagement, result);
//update-begin--Author:wangshuai Date:20200714 for:登录日志没有记录人员
LoginUser loginUser = new LoginUser();
BeanUtils.copyProperties(contactsManagement, loginUser);
baseCommonService.addLog("用户名: " + username + ",登录成功!", CommonConstant.LOG_TYPE_1, null, loginUser);
baseCommonService.addLog("用户名: " + phone + ",登录成功!", CommonConstant.LOG_TYPE_1, null, loginUser);
//update-end--Author:wangshuai Date:20200714 for:登录日志没有记录人员
return result;
}
@ApiOperation("短信登录接口")
@PostMapping(value = "/smsLogin")
public Result<JSONObject> smsLogin(@RequestBody SysLoginModel sysLoginModel) {
Result<JSONObject> result = new Result<>();
String phone = sysLoginModel.getUsername();
String rsaPublicKey = sysLoginModel.getRsaPublicKey();
String rsaPrivateKey = String.valueOf(redisUtil.get(rsaPublicKey));
//update-begin--Author:scott Date:20190805 for:暂时注释掉密码加密逻辑,有点问题
//前端密码加密,后端进行密码解密
//password = AesEncryptUtil.desEncrypt(sysLoginModel.getPassword().replaceAll("%2B", "\\+")).trim();//密码解密
//update-begin--Author:scott Date:20190805 for:暂时注释掉密码加密逻辑,有点问题
//update-begin-author:taoyan date:20190828 for:校验验证码
try {
//解密获取密码和用户名
phone = CommonUtils.decryptBtRsaPriKey(phone, rsaPrivateKey);
} catch (Exception e) {
e.printStackTrace();
}
String captcha = sysLoginModel.getCaptcha();
if (captcha == null) {
result.error500("验证码无效");
return result;
}
Object checkCode = redisUtil.get("_verification:_phone:" + phone);
if (checkCode == null) {
result.error500("验证码错误");
return result;
} else {
redisUtil.del("_verification:_phone:" + phone);
}
//1. 校验用户是否有效
//update-begin-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug,if条件永远为false
LambdaQueryWrapper<PayContactsManagement> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PayContactsManagement::getPhone, PasswordUtil.encrypt(phone));
PayContactsManagement contactsManagement = payContactsManagementService.getOne(queryWrapper);
//update-end-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug,if条件永远为false
if (Objects.isNull(contactsManagement)) {
throw new JeroBootException("手机号不存在");
}
//用户登录信息
userInfo(contactsManagement, result);
//update-begin--Author:wangshuai Date:20200714 for:登录日志没有记录人员
LoginUser loginUser = new LoginUser();
BeanUtils.copyProperties(contactsManagement, loginUser);
baseCommonService.addLog("用户名: " + phone + ",登录成功!", CommonConstant.LOG_TYPE_1, null, loginUser);
//update-end--Author:wangshuai Date:20200714 for:登录日志没有记录人员
if (Objects.isNull(contactsManagement.getPassword())){
result.setMessage("updatePassword");
}
return result;
}
/**
* 退出登录
*
@@ -181,13 +237,15 @@ public class CompanyLoginController {
private void userInfo(PayContactsManagement contactsManagement, Result<JSONObject> result) {
String syspassword = contactsManagement.getPassword();
String username = contactsManagement.getPhone();
if (Objects.isNull(syspassword)) {
syspassword = defaultPassword;
}
// 生成token
String token = JwtUtil.sign(username, syspassword);
// 设置token缓存有效时间
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000);
// 获取用户部门信息
JSONObject obj = new JSONObject();
obj.put("token", token);
@@ -199,25 +257,31 @@ public class CompanyLoginController {
@ApiOperation(value = "发送手机号验证码")
@GetMapping(value = "/sendVerificationCode")
public Result<?> sendVerificationCode(String mobile) {
mobile = PasswordUtil.encrypt(mobile);
public Result<?> sendVerificationCode(String phone) {
phone = PasswordUtil.encrypt(phone);
LambdaQueryWrapper<PayContactsManagement> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PayContactsManagement::getPhone, mobile);
queryWrapper.eq(PayContactsManagement::getPhone, phone);
PayContactsManagement contactsManagement = payContactsManagementService.getOne(queryWrapper);
if (Objects.isNull(contactsManagement)){
throw new JeroBootException("手机号不是企业联系人");
}
sysBaseAPI.sendVerificationCode(mobile,"2",null,null);
if (StringUtils.isBlank(contactsManagement.getPassword())){
return Result.error("updatePassword");
}
return Result.OK();
sysBaseAPI.sendVerificationCode(phone,"2",null,null);
String string = redisUtil.get("_verification:_phone:" + PasswordUtil.decrypt(phone)).toString();
return Result.OK(string);
}
@ApiOperation(value = "短信验证码修改密码")
@PostMapping(value = "/verificationChangePassword")
public Result<?> verificationChangePassword(@RequestBody CompanyLoginVO companyLoginVO) {
payContactsManagementService.verificationChangePassword(companyLoginVO);
return Result.OK("修改密码成功");
}
@ApiOperation(value = "修改密码")
@PostMapping(value = "/changePassword")
public Result<?> changePassword(@RequestBody CompanyLoginVO companyLoginVO) {
payContactsManagementService.changePassword(companyLoginVO);
return Result.OK("修改密码成功");
}
@@ -147,16 +147,6 @@ public class PayCompanyManagementController extends JeroController<PayCompanyMan
if(!StringUtils.isBlank(msg)){
return Result.error(msg.toString());
}
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
// 查看角色是否为财务人员
int dataSource = PayCompanyManagementCommon.DATA_SOURCE2;
int status = PayCompanyManagementCommon.STATUS2;
if(Objects.equals(sysUser.getRoleCode(),PayCompanyManagementCommon.ROLE_CODE)){
dataSource = PayCompanyManagementCommon.DATA_SOURCE1;
status = PayCompanyManagementCommon.STATUS1;
}
payCompanyManagement.setDataSource(dataSource);
payCompanyManagement.setStatus(status);
try {
// 新增企业前在次校验企业名称是否存在
LambdaQueryWrapper<PayCompanyManagement> queryWrapper = new LambdaQueryWrapper<>();
@@ -49,5 +49,7 @@ public interface IPayContactsManagementService extends IService<PayContactsManag
*/
List<PayContactsManagement> listPayContactsManagement(List<String> phoneList);
void verificationChangePassword(CompanyLoginVO companyLoginVO);
void changePassword(CompanyLoginVO companyLoginVO);
}
@@ -5,17 +5,17 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.api.vo.Result;
import com.jero.common.exception.JeroBootException;
import com.jero.common.util.CommonUtils;
import com.jero.common.util.PasswordUtil;
import com.jero.common.util.RedisUtil;
import com.jero.common.util.ValidUtil;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.*;
import com.jero.company.entity.PayContactsManagement;
import com.jero.company.mapper.PayContactsManagementMapper;
import com.jero.company.service.IPayContactsManagementService;
import com.jero.company.vo.CompanyLoginVO;
import com.jero.modules.system.entity.SysUser;
import org.apache.commons.collections.CollectionUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -64,18 +64,21 @@ public class PayContactsManagementServiceImpl extends ServiceImpl<PayContactsMan
}
@Override
public void changePassword(CompanyLoginVO companyLoginVO) {
ValidUtil.validate(companyLoginVO);
public void verificationChangePassword(CompanyLoginVO companyLoginVO) {
//前端传入密码解密
String phone = companyLoginVO.getPhone();
String password = companyLoginVO.getPassword();
String verifyPassword = companyLoginVO.getVerifyPassword();
String RSAPublicKey = companyLoginVO.getRsapublickey();
String RSAPublicKey = companyLoginVO.getRsaPublicKey();
String RSAPrivateKey = String.valueOf(redisUtil.get(RSAPublicKey));
try {
phone = CommonUtils.decryptBtRsaPriKey(phone, RSAPrivateKey);
password = CommonUtils.decryptBtRsaPriKey(password, RSAPrivateKey);
verifyPassword = CommonUtils.decryptBtRsaPriKey(verifyPassword, RSAPrivateKey);
companyLoginVO.setPhone(phone);
ValidUtil.validate(companyLoginVO);
companyLoginVO.setPassword(password);
companyLoginVO.setVerifyPassword(verifyPassword);
} catch (Exception e) {
@@ -83,7 +86,7 @@ public class PayContactsManagementServiceImpl extends ServiceImpl<PayContactsMan
}
//处理手机获取验证码的逻辑
Object obj = redisUtil.get("_verification:_phone:" + companyLoginVO.getPhone());
Object obj = redisUtil.get("_verification:_phone:" + phone);
if (obj == null) {
throw new JeroBootException("验证码失效,请重新发送");
}
@@ -96,14 +99,37 @@ public class PayContactsManagementServiceImpl extends ServiceImpl<PayContactsMan
throw new JeroBootException("新密码和确认密码不一致,请重新输入");
}
LambdaQueryWrapper<PayContactsManagement> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PayContactsManagement::getPhone, phone);
queryWrapper.eq(PayContactsManagement::getPhone, PasswordUtil.encrypt(phone));
PayContactsManagement contactsManagement = this.getOne(queryWrapper);
if (ObjectUtils.isEmpty(contactsManagement)) {
throw new JeroBootException("用户不存在");
}
String passwordEncode = PasswordUtil.encrypt(contactsManagement.getPhone(), password, contactsManagement.getSalt());
companyLoginVO.setPassword(passwordEncode);
payContactsManagementMapper.forgetPassword(companyLoginVO);
redisUtil.del("_verification:_phone:" + companyLoginVO.getPhone());
String salt = oConvertUtils.randomGen(8);
String managementPhone = contactsManagement.getPhone();
String passwordEncode = PasswordUtil.encrypt(PasswordUtil.decrypt(managementPhone), password, salt);
contactsManagement.setPassword(passwordEncode);
contactsManagement.setSalt(salt);
this.saveOrUpdate(contactsManagement);
redisUtil.del("_verification:_phone:" + phone);
}
@Override
public void changePassword(CompanyLoginVO companyLoginVO) {
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String newPassword = companyLoginVO.getNewPassword();
String verifyPassword = companyLoginVO.getVerifyPassword();
String phone = loginUser.getPhone();
LambdaQueryWrapper<PayContactsManagement> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PayContactsManagement::getPhone, PasswordUtil.encrypt(phone));
PayContactsManagement contactsManagement = this.getOne(queryWrapper);
if (oConvertUtils.isEmpty(newPassword)) {
throw new JeroBootException("新密码不允许为空!");
}
if (!newPassword.equals(verifyPassword)) {
throw new JeroBootException("两次输入密码不一致!");
}
String password = PasswordUtil.encrypt(phone, newPassword, contactsManagement.getSalt());
this.update(new PayContactsManagement().setPassword(password), new LambdaQueryWrapper<PayContactsManagement>().eq(PayContactsManagement::getPhone, phone));
}
}
@@ -25,15 +25,16 @@ public class CompanyLoginVO {
/**
* 密码
*/
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
@ApiModelProperty(value = "密码")
@NotEmpty(message = "密码不能为空!")
private String password;
@ApiModelProperty(value = "新密码")
private String newPassword;
/**
* 确认密码
*/
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
@ApiModelProperty(value = "确认密码")
@NotEmpty(message = "确认密码不能为空!")
private String verifyPassword;
@@ -47,6 +48,6 @@ public class CompanyLoginVO {
@ApiModelProperty(value = "RSA公钥")
@NotEmpty(message = "RSA公钥不能为空!")
private String rsapublickey;
private String rsaPublicKey;
}
@@ -5,8 +5,16 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.api.dto.message.BusTemplateMessageDTO;
import com.jero.common.common.RoleCommon;
import com.jero.common.dto.SendMessageDTO;
import com.jero.common.enums.CompanyMessageEnums;
import com.jero.common.enums.ManagementMessageEnums;
import com.jero.common.exception.JeroBootException;
import com.jero.common.service.SendMessageService;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.PasswordUtil;
import com.jero.common.util.ValidUtil;
import com.jero.contract.common.PayIncomeContractCommon;
import com.jero.contract.entity.PayIncomeContract;
@@ -20,6 +28,7 @@ import com.jero.contract.service.IPayIncomeContractInstallmentService;
import com.jero.contract.service.IPayIncomeContractService;
import com.jero.contract.vo.PayIncomeContractInput;
import com.jero.contract.vo.ProjectOutput;
import com.jero.meeting.common.MeetingSubitemCommon;
import com.jero.meeting.entity.PayMeetingSituation;
import com.jero.meeting.service.IPayMeetingSituationService;
import com.jero.member.entity.PayMemberProject;
@@ -32,6 +41,7 @@ import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService;
import com.jero.pack.entity.PayPackCompanyProject;
import com.jero.pack.service.IPayPackCompanyProjectService;
import com.jero.project.common.PayProjectCommon;
import com.jero.project.entity.PayCommonProject;
import com.jero.project.entity.PayWorkingGroup;
import com.jero.project.entity.PayWorkingGroupSubItem;
@@ -95,6 +105,8 @@ public class PayIncomeContractServiceImpl extends ServiceImpl<PayIncomeContractM
private IPayMemberProjectSubitemService memberProjectSubitemService;
@Resource
private ITbMemberProjectSubitemService tbMemberProjectSubitemService;
@Resource
private SendMessageService sendMessageService;
@Override
public IPage<PayIncomeContract> queryPageList(Page<PayIncomeContract> page, PayIncomeContract payIncomeContract, String chargeStatus,String projectName, String startTime, String endTime) {
@@ -384,6 +396,11 @@ public class PayIncomeContractServiceImpl extends ServiceImpl<PayIncomeContractM
if(!Objects.equals(payMeetingSituation.getCompanyId(),payIncomeContract.getSignedCompanyId())){
throw new JeroBootException("企业不匹配!");
}
//验证参会人是否审核已通过
if (Objects.nonNull(payMeetingSituation.getPaymentRecord())
&& payMeetingSituation.getCheckResult().equals(MeetingSubitemCommon.SIGNUP_STATUS_1)) {
throw new JeroBootException("未通过审核,不可关联。");
}
// 验证项目是否已被关联
getIncomeContractAssociated(p.getContractId(),payMeetingSituation.getId());
// 更新项目id
@@ -651,6 +668,27 @@ public class PayIncomeContractServiceImpl extends ServiceImpl<PayIncomeContractM
updatePayIncomeContract.set(PayIncomeContract::getStatus,PayIncomeContractCommon.STATUS2);
payIncomeContractService.update(updatePayIncomeContract);
// todo 缺少发送消息
// 获取项目负责人,发送消息
List<SysUser> list = sysUserService.getRolesUser(Arrays.asList(RoleCommon.CWRY));
if(!CollectionUtils.isEmpty(list)){
list.forEach(p->{
// 发送消息
SendMessageDTO sendMessageDTO = new SendMessageDTO();
if(!StringUtils.isBlank(p.getEmail())){
sendMessageDTO.setEmail(PasswordUtil.decrypt(p.getEmail()));
}
HashMap<String,String> map = new HashMap<>();
map.put("contractNum",payIncomeContractNew.getContractNum());
map.put("contractName",payIncomeContractNew.getContractName());
sendMessageDTO.setFromUser(sysUser.getId());
sendMessageDTO.setToUser(p.getUsername());
sendMessageDTO.setTemplateCode(ManagementMessageEnums.MSG2.getCode());
sendMessageDTO.setTemplateParam(map);
sendMessageDTO.setBusType("email");
sendMessageDTO.setBusId(p.getId());
sendMessageService.SendMessageService(sendMessageDTO);
});
}
}
/**
@@ -0,0 +1,40 @@
package com.jero.home;
import com.jero.common.api.vo.Result;
import com.jero.payment.service.IPayPaymentRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description: 首页
* @Author: jeecg-boot
* @Date: 2021-09-24
* @Version: V1.0
*/
@Api(tags="首页")
@RestController
@RequestMapping("/home")
@Slf4j
public class HomeController {
@Autowired
private IPayPaymentRecordService payPaymentRecordService;
/**
* 首页-数据统计
*
* @return
*/
@ApiOperation(value="首页-数据统计", notes="首页-数据统计")
@GetMapping(value = "/dataStatistics")
public Result<?> dataStatistics() {
return null;
}
}
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.mail.PayMailBillVO;
import com.jero.mail.entity.PayMailBill;
import com.jero.mail.entity.PayMailBillSearch;
import io.lettuce.core.dynamic.annotation.Param;
@@ -29,6 +30,8 @@ public interface PayMailBillMapper extends BaseMapper<PayMailBill> {
*/
List<PayMailBill> selectCommonProjectMailBillVO(@Param("projectId") String projectId);
List<PayMailBill> selectInvoicingStage(@Param("projectId")String projectId);
}
@@ -13,8 +13,9 @@
<result property="sendMethod" column="send_method"></result>
<result property="postNo" column="post_no"></result>
<result property="postNo" column="post_no"></result>
<result property="liaisonMan" column="liaison_man"></result>
<result property="mobile" column="mobile"></result>
<result property="contactId" column="contact_id"></result>
<result property="contactName" column="contact_name"></result>
<result property="contactMobile" column="contact_mobile"></result>
<result property="billDate" column="bill_date"></result>
<result property="sendDate" column="send_date"></result>
<result property="remark" column="remark"></result>
@@ -32,8 +33,8 @@
pmb.post_status,
pmb.send_method,
pmb.post_no,
pmb.liaison_man,
pmb.mobile,
pmb.contact_name,
pmb.contact_mobile,
pmb.bill_date,
pmb.send_date,
pmb.remark,
@@ -42,5 +43,12 @@
WHERE pmb.id IN (SELECT bill_id FROM pay_mail_bill_project WHERE project_id=#{projectId})
</select>
<select id="selectInvoicingStage" resultType="com.jero.mail.entity.PayMailBill">
select pmb.project_name,pmbp.invoice_amount,pmb.bill_no,pmb.bill_date,pmbp.remark
from pay_mail_bill pmb
inner JOIN pay_mail_bill_project pmbp on pmb.id = pmbp.bill_id
where pmbp.project_id=#{projectId}
</select>
</mapper>
@@ -30,6 +30,13 @@ public interface IPayMailBillService extends IService<PayMailBill> {
*/
List<PayMailBill> selectMailBillVO(String projectId);
/**
* 查询开票阶段
* @param projectId
* @return
*/
List<PayMailBill> selectInvoicingStage(String projectId);
/**
* 添加开票
* @param payMailBill
@@ -82,6 +82,8 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
private TbMemberProjectMapper tbMemberProjectMapper;
@Resource
private PayContactsManagementMapper payContactsManagementMapper;
@Resource
private PayMailBillMapper payMailBillMapper;
@Override
public List<PayMailBill> selectMailBillVO(String projectId) {
@@ -101,6 +103,12 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
return list;
}
@Override
public List<PayMailBill> selectInvoicingStage(String projectId) {
return payMailBillMapper.selectInvoicingStage(projectId);
}
/**
* 添加开票
*
@@ -135,13 +143,30 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
}
}
//更新项目表开票状态,逗号拼接邮寄信息
StringBuilder projectName = new StringBuilder();
StringBuilder chargeCompanyName = new StringBuilder();
StringBuilder principalName = new StringBuilder();
StringBuilder principalId = new StringBuilder();
for(int i=0; i<bmpList.size();i++){
bmpList.get(i).setBillId(payMailBill.getId());
//更新项目表开票状态,逗号拼接邮寄信息
getMakeInvoice(bmpList.get(i),payMailBill,i,bmpList.size());
getMakeInvoice(bmpList.get(i),
projectName,chargeCompanyName,principalName,principalId,
i,bmpList.size());
}
payMailBill.setProjectName(projectName.toString());
payMailBill.setChargeCompanyName(chargeCompanyName.toString());
payMailBill.setPrincipalName(principalName.toString());
payMailBill.setPrincipalId(principalId.toString());
//新增票据邮寄表
payMailBillInsert(payMailBill);
//填充billId
for(int i=0; i<bmpList.size();i++){
bmpList.get(i).setBillId(payMailBill.getId());
}
//批量插入票据关联项目表
payMailBillProjectService.saveBatch(bmpList);
@@ -366,7 +391,9 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
* 更新项目表开票状态,逗号拼接邮寄信息
* @return
*/
private void getMakeInvoice(PayMailBillProject payMailBillProject,PayMailBillVO payMailBill,int i,int size) {
private void getMakeInvoice(PayMailBillProject payMailBillProject,
StringBuilder projectName,StringBuilder chargeCompanyName,StringBuilder principalName,StringBuilder principalId,
int i,int size) {
int makeInvoice=4;
BigDecimal amountReceivable=new BigDecimal("0");//应收金额
Integer needInvoice = 0;//是否需要发票
@@ -389,16 +416,16 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
//之前开票总额+本次开票金额
invoiceAmount = oldInvoiceAmount.add(invoiceAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
//逗号拼接邮寄信息
if(i==size-1){
payMailBill.setProjectName(payCommonProject.getChargeProject());
payMailBill.setChargeCompanyName(payCommonProject.getChargeCompanyTemporaryName());
payMailBill.setPrincipalName(payCommonProject.getPrincipalName());
payMailBill.setPrincipalId(payCommonProject.getPrincipalId());
if(i==0){
projectName.append(payCommonProject.getChargeProject());
chargeCompanyName.append(payCommonProject.getChargeCompanyTemporaryName());
principalName.append(payCommonProject.getPrincipalId());
principalId.append(payCommonProject.getPrincipalId());
}else{
payMailBill.setProjectName(payCommonProject.getChargeProject()+",");
payMailBill.setChargeCompanyName(payCommonProject.getChargeCompanyTemporaryName()+",");
payMailBill.setPrincipalName(payCommonProject.getPrincipalName()+",");
payMailBill.setPrincipalId(payCommonProject.getPrincipalId()+",");
projectName.append(",").append(payCommonProject.getChargeProject());
chargeCompanyName.append(",").append(payCommonProject.getChargeCompanyTemporaryName());
principalName.append(",").append(payCommonProject.getPrincipalId());
principalId.append(",").append(payCommonProject.getPrincipalId());
}
break;
// 工作组项目
@@ -416,16 +443,16 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
//查父表
PayWorkingGroup payWorkingGroup = payWorkingGroupMapper.selectById(workingGroup.getWorkingGroupId());
//逗号拼接邮寄信息
if(i==size-1){
payMailBill.setProjectName(payWorkingGroup.getWorkingGroupProject());
payMailBill.setChargeCompanyName(workingGroup.getChargeCompanyTemporaryName());
payMailBill.setPrincipalName(payWorkingGroup.getPrincipalNameA());
payMailBill.setPrincipalId(payWorkingGroup.getPrincipalIdA());
}else {
payMailBill.setProjectName(payWorkingGroup.getWorkingGroupProject() + ",");
payMailBill.setChargeCompanyName(workingGroup.getChargeCompanyTemporaryName() + ",");
payMailBill.setPrincipalName(payWorkingGroup.getPrincipalNameA() + ",");
payMailBill.setPrincipalId(payWorkingGroup.getPrincipalIdA() + ",");
if(i==0){
projectName.append(payWorkingGroup.getWorkingGroupProject());
chargeCompanyName.append(workingGroup.getChargeCompanyTemporaryName());
principalName.append(workingGroup.getChargeCompanyTemporaryName());
principalId.append(payWorkingGroup.getPrincipalNameA());
}else{
projectName.append(",").append(payWorkingGroup.getWorkingGroupProject());
chargeCompanyName.append(",").append(workingGroup.getChargeCompanyTemporaryName());
principalName.append(",").append(workingGroup.getChargeCompanyTemporaryName());
principalId.append(",").append(payWorkingGroup.getPrincipalNameA());
}
break;
//会议项目
@@ -443,16 +470,16 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
//查父表
PayMeeting payMeeting = payMeetingMapper.selectById(meeting.getMeetingId());
//逗号拼接邮寄信息
if(i==size-1){
payMailBill.setProjectName(payMeeting.getMeetingName());
payMailBill.setChargeCompanyName(meeting.getCompanyName());
payMailBill.setPrincipalName(payMeeting.getDirectorName());
payMailBill.setPrincipalId(payMeeting.getDirectorId());
}else {
payMailBill.setProjectName(payMeeting.getMeetingName() + ",");
payMailBill.setChargeCompanyName(meeting.getCompanyName() + ",");
payMailBill.setPrincipalName(payMeeting.getDirectorName() + ",");
payMailBill.setPrincipalId(payMeeting.getDirectorId() + ",");
if(i==0){
projectName.append(payMeeting.getMeetingName());
chargeCompanyName.append(meeting.getCompanyName());
principalName.append(payMeeting.getDirectorName());
principalId.append(payMeeting.getDirectorId());
}else{
projectName.append(",").append(payMeeting.getMeetingName());
chargeCompanyName.append(",").append(meeting.getCompanyName());
principalName.append(",").append(payMeeting.getDirectorName());
principalId.append(",").append(payMeeting.getDirectorId());
}
break;
//会员项目
@@ -470,16 +497,16 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
//查父表
PayMemberProject payMemberProject = payMemberProjectMapper.selectById(memberProject.getProjectId());
//逗号拼接邮寄信息
if(i==size-1){
payMailBill.setProjectName(payMemberProject.getProjectName());
payMailBill.setChargeCompanyName(memberProject.getCompanyName());
payMailBill.setPrincipalName(payMemberProject.getDirectorName());
payMailBill.setPrincipalId(payMemberProject.getDirectorId());
}else {
payMailBill.setProjectName(payMemberProject.getProjectName() + ",");
payMailBill.setChargeCompanyName(memberProject.getCompanyName() + ",");
payMailBill.setPrincipalName(payMemberProject.getDirectorName() + ",");
payMailBill.setPrincipalId(payMemberProject.getDirectorId() + ",");
if(i==0){
projectName.append(payMemberProject.getProjectName());
chargeCompanyName.append(memberProject.getCompanyName());
principalName.append(payMemberProject.getDirectorName());
principalId.append(payMemberProject.getDirectorId());
}else{
projectName.append(",").append(payMemberProject.getProjectName());
chargeCompanyName.append(",").append(memberProject.getCompanyName());
principalName.append(",").append(payMemberProject.getDirectorName());
principalId.append(",").append(payMemberProject.getDirectorId());
}
break;
//标协会员
@@ -497,12 +524,12 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
//查父表
TbMemberProject tbProject = tbMemberProjectMapper.selectById(tbMemberProject.getProjectId());
//逗号拼接邮寄信息
if(i==size-1){
payMailBill.setProjectName(tbProject.getProjectName());
payMailBill.setChargeCompanyName(tbMemberProject.getCompanyName());
}else {
payMailBill.setProjectName(tbProject.getProjectName() + ",");
payMailBill.setChargeCompanyName(tbMemberProject.getCompanyName() + ",");
if(i==0){
projectName.append(tbProject.getProjectName());
chargeCompanyName.append(tbMemberProject.getCompanyName());
}else{
projectName.append(",").append(tbProject.getProjectName());
chargeCompanyName.append(",").append(tbMemberProject.getCompanyName());
}
break;
default:
@@ -18,6 +18,11 @@ public class MeetingSubitemCommon {
*/
public final static Integer NEI_BU_QI_YE = 3;
/**
* 缴费方式:线上缴费
*/
public final static Integer PAY_MODE_2 = 2;
/**
* 缴费方式:打包
*/
@@ -43,6 +43,7 @@ import com.jero.util.QrcodeUtil;
import io.swagger.annotations.ApiImplicitParam;
import lombok.extern.slf4j.Slf4j;
import com.jero.common.system.base.controller.JeroController;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
@@ -79,7 +80,7 @@ public class PayMeetingController extends JeroController<PayMeeting, IPayMeeting
/**
* 分页列表查询
*/
@AutoLog(value = "会议管理-分页列表查询")
@RequiresPermissions("meeting:search")
@ApiOperation(value = "会议管理-分页列表查询", notes = "会议管理-分页列表查询")
@GetMapping(value = "/page")
public Result<?> queryPageList(PayMeeting payMeeting,
@@ -127,7 +128,7 @@ public class PayMeetingController extends JeroController<PayMeeting, IPayMeeting
/**
* 列表查询
*/
@AutoLog(value = "会议管理-列表查询")
@RequiresPermissions("meeting:search")
@ApiOperation(value = "会议管理-列表查询", notes = "会议管理-列表查询")
@GetMapping(value = "/list")
public Result<List<PayMeeting>> queryList() {
@@ -138,6 +139,7 @@ public class PayMeetingController extends JeroController<PayMeeting, IPayMeeting
/**
* 添加
*/
@RequiresPermissions("meeting:add")
@AutoLog(value = "会议管理-添加")
@ApiOperation(value = "会议管理-添加", notes = "会议管理-添加")
@PostMapping(value = "/add")
@@ -150,6 +152,7 @@ public class PayMeetingController extends JeroController<PayMeeting, IPayMeeting
/**
* 编辑
*/
@RequiresPermissions("meeting:edit")
@AutoLog(value = "会议管理-编辑")
@ApiOperation(value = "会议管理-编辑", notes = "会议管理-编辑")
@PostMapping(value = "/edit")
@@ -162,6 +165,7 @@ public class PayMeetingController extends JeroController<PayMeeting, IPayMeeting
/**
* 通过id删除
*/
@RequiresPermissions("meeting:delete")
@AutoLog(value = "会议管理-通过id删除")
@ApiOperation(value = "会议管理-通过id删除", notes = "会议管理-通过id删除")
@GetMapping(value = "/delete")
@@ -173,6 +177,7 @@ public class PayMeetingController extends JeroController<PayMeeting, IPayMeeting
/**
* 批量删除
*/
@RequiresPermissions("meeting:batchDel")
@AutoLog(value = "会议管理-批量删除")
@ApiOperation(value = "会议管理-批量删除", notes = "会议管理-批量删除")
@GetMapping(value = "/deleteBatch")
@@ -184,7 +189,7 @@ public class PayMeetingController extends JeroController<PayMeeting, IPayMeeting
/**
* 通过id查询
*/
@AutoLog(value = "会议管理-通过id查询")
@RequiresPermissions("meeting:search")
@ApiOperation(value = "会议管理-通过id查询", notes = "会议管理-通过id查询")
@GetMapping(value = "/queryById")
public Result<?> queryById(@RequestParam(name = "id") String id) {
@@ -225,6 +230,7 @@ public class PayMeetingController extends JeroController<PayMeeting, IPayMeeting
/**
* 导出excel
*/
@RequiresPermissions("meeting:export")
@GetMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, PayMeeting payMeeting) {
QueryWrapper<PayMeeting> queryWrapper = QueryGenerator.initQueryWrapper(payMeeting, request.getParameterMap());
@@ -320,45 +326,12 @@ public class PayMeetingController extends JeroController<PayMeeting, IPayMeeting
}
return super.exportListXls(exportList, classToExport, "会议管理");
}
/**
* 导出excel
*/
@GetMapping(value = "/exportWorkingGroupXls")
public ModelAndView exportWorkingGroupXls(HttpServletRequest request, PayMeeting payMeeting) {
QueryWrapper<PayMeeting> queryWrapper = QueryGenerator.initQueryWrapper(payMeeting, request.getParameterMap());
List<PayMeeting> pageList = payMeetingService.list(queryWrapper);
List<WorkingGroupMeetingExcel> exportList = new ArrayList<>();
// 过滤选中数据
String selections = request.getParameter("selections");
if (oConvertUtils.isNotEmpty(selections)) {
List<String> selectionList = Arrays.asList(selections.split(","));
pageList = pageList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList());
}
for (PayMeeting meeting : pageList) {
//查询会议负责人
LoginUser user = sysBaseApi.getUserById(meeting.getDirectorId());
meeting.setDirectorName(user.getUsername());
meeting.setDirectorPhone(PasswordUtil.decrypt(user.getPhone()));
WorkingGroupMeetingExcel workingGroupMeetingExcel = new WorkingGroupMeetingExcel();
BeanUtils.copyProperties(meeting, workingGroupMeetingExcel);
String meetingType = meeting.getMeetingType().toString();
String meetingType1 = sysBaseApi.translateDict("meeting_type", meetingType);
workingGroupMeetingExcel.setMeetingType(meetingType1);
// 工作组项目查询工作组项目名
if (meetingType.equals(MeetingCommon.WORKING_GROUP_MEETING)) {
String workingGroupId = meeting.getWorkingGroupId();
PayWorkingGroup workingGroup = payWorkingGroupService.getById(workingGroupId);
workingGroupMeetingExcel.setWorkingGroupName(workingGroup.getWorkingGroupProject());
}
exportList.add(workingGroupMeetingExcel);
}
return super.exportListXls(exportList, WorkingGroupMeetingExcel.class, "会议管理");
}
/**
* 上传资料
*/
@AutoLog(value = "上传资料")
@RequiresPermissions("meeting:upload")
@ApiOperation(value="上传资料", notes="上传资料")
@PostMapping(value = "/uploadFile")
public Result<?> uploadFile(@RequestBody UploadFileVO uploadFileVO) {
@@ -390,6 +363,8 @@ public class PayMeetingController extends JeroController<PayMeeting, IPayMeeting
/**
* 发布提醒
*/
@AutoLog("发布提醒")
@RequiresPermissions("meeting:publish")
@ApiOperation(value="发布提醒", notes="发布提醒")
@PostMapping(value = "/publishReminder")
public Result<?> publishReminder(@RequestBody PublishReminderVO publishReminderVO) {
@@ -407,7 +382,7 @@ public class PayMeetingController extends JeroController<PayMeeting, IPayMeeting
/**
* 新增标协会议
*/
@ApiOperation(value = "新增标协会议", notes = "新增标协会议")
@ApiOperation(value = "新增标协会议")
@PostMapping(value = "/addStandards")
public Result<?> addStandards(@RequestBody PayMeeting payMeeting, HttpServletRequest request) {
String publicKey = request.getParameter("publicKey");
@@ -35,6 +35,7 @@ import lombok.extern.slf4j.Slf4j;
import com.jero.common.system.base.controller.JeroController;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
@@ -65,7 +66,7 @@ public class PayMeetingSituationController extends JeroController<PayMeetingSitu
/**
* 分页列表查询
*/
@AutoLog(value = "参会人员信息-分页列表查询")
@RequiresPermissions("attendance:search")
@ApiOperation(value = "参会人员信息-分页列表查询", notes = "参会人员信息-分页列表查询")
@GetMapping(value = "/page")
public Result<?> queryPageList(PayMeetingSituation payMeetingSituation,
@@ -91,7 +92,6 @@ public class PayMeetingSituationController extends JeroController<PayMeetingSitu
/**
* 合同查询未关联参会人列表
*/
@AutoLog(value = "合同查询未关联参会人列表")
@ApiOperation(value = "合同查询未关联参会人列表", notes = "合同查询未关联参会人列表")
@GetMapping(value = "/contractPage")
public Result<?> contractPage(MeetingSituationContractVO meetingSituationContractVO,
@@ -106,7 +106,6 @@ public class PayMeetingSituationController extends JeroController<PayMeetingSitu
/**
* 分页列表查询
*/
@AutoLog(value = "参会人员信息-分页列表查询")
@ApiOperation(value = "参会人员信息-分页列表查询", notes = "参会人员信息-分页列表查询")
@GetMapping(value = "/page2")
public Result<?> queryPageList2(PayMeetingSituation payMeetingSituation,
@@ -125,8 +124,7 @@ public class PayMeetingSituationController extends JeroController<PayMeetingSitu
/**
* 分页列表查询
*/
@AutoLog(value = "报名信息-分页列表查询")
@ApiOperation(value = "报名信息-分页列表查询", notes = "报名信息-分页列表查询")
/*@ApiOperation(value = "报名信息-分页列表查询", notes = "报名信息-分页列表查询")
@GetMapping(value = "/signUpPage")
public Result<?> signUpPage(PayMeetingSituation payMeetingSituation,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@@ -137,12 +135,11 @@ public class PayMeetingSituationController extends JeroController<PayMeetingSitu
Page<PayMeetingSituation> page = new Page<>(pageNo, pageSize);
IPage<PayMeetingSituation> pageList = payMeetingSituationService.page(page, queryWrapper);
return Result.OK(pageList);
}
}*/
/**
* 列表查询
*/
@AutoLog(value = "参会人员信息-列表查询")
@ApiOperation(value = "参会人员信息-列表查询", notes = "参会人员信息-列表查询")
@GetMapping(value = "/list")
public Result<List<PayMeetingSituation>> queryList() {
@@ -153,6 +150,7 @@ public class PayMeetingSituationController extends JeroController<PayMeetingSitu
/**
* 添加参会人
*/
@RequiresPermissions("attendance:add")
@AutoLog(value = "参会人员信息-添加参会人")
@ApiOperation(value = "参会人员信息-添加参会人", notes = "参会人员信息-添加参会人")
@PostMapping(value = "/add")
@@ -177,6 +175,7 @@ public class PayMeetingSituationController extends JeroController<PayMeetingSitu
* 编辑
*/
@AutoLog(value = "参会人员信息-编辑")
@RequiresPermissions("attendance:edit")
@ApiOperation(value = "参会人员信息-编辑", notes = "参会人员信息-编辑")
@PostMapping(value = "/edit")
public Result<?> edit(@RequestBody PayMeetingSituationVO payMeetingSituationVO) {
@@ -187,6 +186,7 @@ public class PayMeetingSituationController extends JeroController<PayMeetingSitu
/**
* 通过id删除
*/
@RequiresPermissions("attendance:delete")
@AutoLog(value = "参会人员信息-通过id删除")
@ApiOperation(value = "参会人员信息-通过id删除", notes = "参会人员信息-通过id删除")
@GetMapping(value = "/delete")
@@ -198,6 +198,7 @@ public class PayMeetingSituationController extends JeroController<PayMeetingSitu
/**
* 批量删除
*/
@RequiresPermissions("attendance:batchDel")
@AutoLog(value = "参会人员信息-批量删除")
@ApiOperation(value = "参会人员信息-批量删除", notes = "参会人员信息-批量删除")
@GetMapping(value = "/deleteBatch")
@@ -223,6 +224,7 @@ public class PayMeetingSituationController extends JeroController<PayMeetingSitu
/**
* 导出excel
*/
@RequiresPermissions("attendance:export")
@GetMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, PayMeetingSituation payMeetingSituation) {
QueryWrapper<PayMeetingSituation> queryWrapper = QueryGenerator.initQueryWrapper(payMeetingSituation, request.getParameterMap());
@@ -309,6 +311,7 @@ public class PayMeetingSituationController extends JeroController<PayMeetingSitu
/**
* 设置对接人
*/
@RequiresPermissions("attendance:batchSetDocker")
@AutoLog(value = "设置对接人")
@ApiOperation(value = "设置对接人", notes = "设置对接人")
@PostMapping(value = "/addDock")
@@ -320,6 +323,7 @@ public class PayMeetingSituationController extends JeroController<PayMeetingSitu
/**
* 审核付款凭证
*/
@RequiresPermissions("attendance:auditCredentials")
@AutoLog(value = "审核付款凭证")
@ApiOperation(value = "审核付款凭证")
@PostMapping(value = "/check")
@@ -332,6 +336,7 @@ public class PayMeetingSituationController extends JeroController<PayMeetingSitu
* 审核报名信息
*/
@AutoLog(value = "审核报名信息")
@RequiresPermissions("attendance:auditSignUp")
@ApiOperation(value = "审核报名信息")
@PostMapping(value = "/checkRegister")
public Result<?> checkRegister(@RequestBody CheckVO checkVO) {
@@ -360,7 +365,7 @@ public class PayMeetingSituationController extends JeroController<PayMeetingSitu
public Result<?> signIn(@RequestBody SignInVO signInVO) {
ValidUtil.validate(signInVO);
payMeetingSituationService.signIn(signInVO);
return Result.OK("合并开票成功!");
return Result.OK("签到成功!");
}
@@ -0,0 +1,68 @@
package com.jero.meeting.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 会议提醒记录表
* @Author: jero-boot
* @Date: 2021-09-23
* @Version: V1.0
*/
@Data
@TableName("pay_meeting_remind_record")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="pay_meeting_remind_record对象", description="会议提醒记录表")
public class PayMeetingRemindRecord implements Serializable {
private static final long serialVersionUID = 1L;
/**id*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "id")
private String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**会议id*/
@Excel(name = "会议id", width = 15)
@ApiModelProperty(value = "会议id")
private String meetingId;
/**成员id*/
@Excel(name = "成员id", width = 15)
@ApiModelProperty(value = "成员id")
private String subitemId;
}
@@ -389,4 +389,11 @@ public class PayMeetingSituation implements Serializable {
@Dict(dicCode = "yn")
@TableField(exist = false)
private Integer identification;
/**
* 收入合同处新增标识 flag = 1
*/
@TableField(exist = false)
@ApiModelProperty(value = "收入合同处新增标识 flag = 1")
private String flag;
}
@@ -0,0 +1,17 @@
package com.jero.meeting.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.jero.meeting.entity.PayMeetingRemindRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 会议提醒记录表
* @Author: jero-boot
* @Date: 2021-09-23
* @Version: V1.0
*/
public interface PayMeetingRemindRecordMapper extends BaseMapper<PayMeetingRemindRecord> {
}
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.meeting.mapper.PayMeetingRemindRecordMapper">
<resultMap id="PayMeetingRemindRecordResultMap" type="com.jero.meeting.entity.PayMeetingRemindRecord">
<id column="id" property="id" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="meeting_id" property="meetingId" />
<result column="subitem_id" property="subitemId" />
</resultMap>
</mapper>
@@ -0,0 +1,54 @@
package com.jero.meeting.service;
import com.jero.meeting.entity.PayMeetingRemindRecord;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @Description: 会议提醒记录表
* @Author: jero-boot
* @Date: 2021-09-23
* @Version: V1.0
*/
public interface IPayMeetingRemindRecordService extends IService<PayMeetingRemindRecord> {
/**
* 保存
*/
void add(PayMeetingRemindRecord payMeetingRemindRecord);
/**
* 更新
*/
void editById(PayMeetingRemindRecord payMeetingRemindRecord);
/**
* 通过id删除
*/
void deleteById(String id);
/**
* 批量删除
*/
void deleteByIds(List<String> ids);
/**
* 通过id查询
*/
PayMeetingRemindRecord queryById(String id);
/**
* 列表查询
*/
List<PayMeetingRemindRecord> queryList();
/**
* 关联会议和工作组成员的提醒次数
* @author lijiaro
* @date 2021/9/23 17:54
* @param meetingIdList 会议id
* @param subitemIdList 成员id
*
*/
void addList(List<String> meetingIdList, List<String> subitemIdList);
}
@@ -0,0 +1,78 @@
package com.jero.meeting.service.impl;
import com.jero.meeting.entity.PayMeetingRemindRecord;
import com.jero.meeting.mapper.PayMeetingRemindRecordMapper;
import com.jero.meeting.service.IPayMeetingRemindRecordService;
import org.springframework.stereotype.Service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 会议提醒记录表
* @Author: jero-boot
* @Date: 2021-09-23
* @Version: V1.0
*/
@Service
public class PayMeetingRemindRecordServiceImpl extends ServiceImpl<PayMeetingRemindRecordMapper, PayMeetingRemindRecord> implements IPayMeetingRemindRecordService {
/**
* 保存
*/
@Override
public void add(PayMeetingRemindRecord payMeetingRemindRecord) {
save(payMeetingRemindRecord);
}
/**
* 更新
*/
@Override
public void editById(PayMeetingRemindRecord payMeetingRemindRecord) {
saveOrUpdate(payMeetingRemindRecord);
}
/**
* 通过id删除
*/
@Override
public void deleteById(String id) {
removeById(id);
}
/**
* 批量删除
*/
@Override
public void deleteByIds(List<String> ids) {
removeByIds(ids);
}
/**
* 通过id查询
*/
@Override
public PayMeetingRemindRecord queryById(String id) {
return getById(id);
}
/**
* 列表查询
*/
@Override
public List<PayMeetingRemindRecord> queryList() {
return list();
}
@Override
public void addList(List<String> meetingIdList, List<String> subitemIdList) {
for (String meetingId : meetingIdList) {
PayMeetingRemindRecord payMeetingRemindRecord = new PayMeetingRemindRecord();
payMeetingRemindRecord.setMeetingId(meetingId);
for (String subitemId : subitemIdList) {
payMeetingRemindRecord.setSubitemId(subitemId);
this.save(payMeetingRemindRecord);
}
}
}
}
@@ -7,14 +7,18 @@ import com.jero.common.exception.JeroBootException;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.ValidUtil;
import com.jero.company.entity.PayContactsManagement;
import com.jero.company.service.IPayContactsManagementService;
import com.jero.data.entity.PayCaseCommittee;
import com.jero.data.service.IPayCaseCommitteeService;
import com.jero.meeting.common.MeetingCommon;
import com.jero.meeting.entity.PayMeeting;
import com.jero.meeting.entity.PayMeetingHotelContacts;
import com.jero.meeting.entity.PayMeetingRemindRecord;
import com.jero.meeting.entity.PayMeetingSituation;
import com.jero.meeting.mapper.PayMeetingMapper;
import com.jero.meeting.service.IPayMeetingHotelContactsService;
import com.jero.meeting.service.IPayMeetingRemindRecordService;
import com.jero.meeting.service.IPayMeetingService;
import com.jero.meeting.service.IPayMeetingSituationService;
import com.jero.meeting.valid.group.CaseCommitteeMeeting;
@@ -66,9 +70,11 @@ public class PayMeetingServiceImpl extends ServiceImpl<PayMeetingMapper, PayMeet
@Resource
private IPayWorkingGroupSubItemService payWorkingGroupSubItemService;
@Resource
private IPayContactsManagementTemporaryService payContactsManagementTemporaryService;
private IPayContactsManagementService payContactsManagementService;
@Resource
private IPayCaseCommitteeService payCaseCommitteeService;
@Resource
private IPayMeetingRemindRecordService payMeetingRemindRecordService;
/**
* 新增会议
*/
@@ -305,8 +311,12 @@ public class PayMeetingServiceImpl extends ServiceImpl<PayMeetingMapper, PayMeet
public void publishReminder(List<String> meetingIds, List<String> subitemIds) {
List<PayWorkingGroupSubItem> payWorkingGroupSubItems = payWorkingGroupSubItemService.listByIds(subitemIds);
List<String> userIds = new ArrayList<>();
//用于新增关联关系
List<String> meetingIdList = new ArrayList<>();
List<String> subitemIdList = new ArrayList<>();
//把单位会员中所有的联系人和有机联系人取出
for (PayWorkingGroupSubItem payWorkingGroupSubItem : payWorkingGroupSubItems) {
subitemIdList.add(payWorkingGroupSubItem.getId());
String contactsTemporaryIdOne = payWorkingGroupSubItem.getContactsTemporaryIdOne();
if (StrUtil.isNotBlank(contactsTemporaryIdOne)){
userIds.add(contactsTemporaryIdOne);
@@ -323,19 +333,24 @@ public class PayMeetingServiceImpl extends ServiceImpl<PayMeetingMapper, PayMeet
if (StrUtil.isNotBlank(mailContactsTemporaryId)){
userIds.add(mailContactsTemporaryId);
}
}
//去重
userIds = userIds.stream().distinct().collect(Collectors.toList());
LambdaQueryWrapper<PayContactsManagementTemporary> wrapper = new LambdaQueryWrapper<>();
wrapper.in(PayContactsManagementTemporary::getId,userIds);
List<PayContactsManagementTemporary> list = payContactsManagementTemporaryService.list(wrapper);
List<PayMeeting> payMeetings = listByIds(meetingIds);
for (PayContactsManagementTemporary payContactsManagementTemporary : list) {
LambdaQueryWrapper<PayContactsManagement> wrapper = new LambdaQueryWrapper<>();
wrapper.in(PayContactsManagement::getId,userIds);
List<PayContactsManagement> list = payContactsManagementService.list(wrapper);
for (PayContactsManagement payContactsManagement : list) {
//TODO 发送消息
}
//标记会议为已提醒
List<PayMeeting> payMeetings = listByIds(meetingIds);
for (PayMeeting payMeeting : payMeetings) {
meetingIdList.add(payMeeting.getId());
payMeeting.setRemind(MeetingCommon.REMIND_1);
saveOrUpdate(payMeeting);
}
payMeetingRemindRecordService.addList(meetingIdList,subitemIdList);
}
}
@@ -6,9 +6,17 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.common.ProjectCommon;
import com.jero.common.dto.SendMessageDTO;
import com.jero.common.enums.CompanyMessageEnums;
import com.jero.common.enums.ManagementMessageEnums;
import com.jero.common.common.ProjectCommon;
import com.jero.common.exception.JeroBootException;
import com.jero.common.service.SendMessageService;
import com.jero.common.service.ContractCreateProjectSendMessageService;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.PasswordUtil;
import com.jero.common.util.ValidUtil;
import com.jero.company.entity.PayCompanyManagement;
import com.jero.company.entity.PayContactsManagement;
@@ -93,6 +101,10 @@ public class PayMeetingSituationServiceImpl extends ServiceImpl<PayMeetingSituat
private IPayWorkingGroupSubItemService payWorkingGroupSubItemService;
@Resource
private IPayCaseCommitteeSubitemService payCaseCommitteeSubitemService;
@Resource
private SendMessageService sendMessageService;
@Resource
private ContractCreateProjectSendMessageService contractCreateProjectSendMessageService;
/**
* 保存
@@ -106,6 +118,13 @@ public class PayMeetingSituationServiceImpl extends ServiceImpl<PayMeetingSituat
saveMeetingSituation(payMeetingSituation1);
handlePack(payMeetingSituation1);
// 收入合同创建项目发送消息到项目负责人
if(Objects.equals(ProjectCommon.FLAG,payMeetingSituation.getFlag())){
PayMeeting payMeeting = meetingService.getById(payMeetingSituation.getMeetingId());
contractCreateProjectSendMessageService.ContractCreateProjectSendMessageService(payMeeting.getMeetingName() + "" + payMeetingSituation.getCompanyName());
}
}
/**
@@ -398,6 +417,7 @@ public class PayMeetingSituationServiceImpl extends ServiceImpl<PayMeetingSituat
String record = ObjRecordUtil.addRecord(oldObject, payMeetingSituation1);
if (StringUtils.isNotBlank(record)){
//TODO 给负责人发送消息
//iSysBaseApi.
}
}
@@ -494,11 +514,23 @@ public class PayMeetingSituationServiceImpl extends ServiceImpl<PayMeetingSituat
} else {
ValidUtil.validate(commonPeopleVO, NotPack.class);
payMeetingSituation1.setNeedInvoice(payMeetingSituation.getNeedInvoice());
//缴费方式为线上缴费时,判断是否为会议期间
String paymentRecord = payMeetingSituation.getPaymentRecord();
payMeetingSituation1.setPaymentRecord(paymentRecord);
payMeetingSituation1.setOrderCode(payMeetingSituation.getOrderCode());
if (payMode.equals(MeetingSubitemCommon.PAY_MODE_2)){
Date startTime = payMeeting.getStartTime();
Date endTime = payMeeting.getEndTime();
//如果不在会议期间,不允许上传缴费凭证
if (!belongCalendar(new Date(),startTime,endTime)) {
throw new JeroBootException("线上缴费时,付款凭证和订单后四位编码只能在会议期间上传");
}
payMeetingSituation1.setPaymentRecord(paymentRecord);
payMeetingSituation1.setOrderCode(payMeetingSituation.getOrderCode());
}else {
payMeetingSituation1.setPaymentRecord(paymentRecord);
}
payMeetingSituation1.setNeedInvoice(payMeetingSituation.getNeedInvoice());
//如果是标协会议判断会员类型
if (meetingType.equals(Integer.parseInt(MeetingCommon.STANDARD_MEETING))) {
//根据企业名称和会员类型不为null判断是否为标协会员
@@ -5,6 +5,7 @@ import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.jero.common.aspect.annotation.Dict;
@@ -246,5 +247,11 @@ public class PayMemberProjectSubitem implements Serializable {
@DecimalMax(value = "9999999999.99",message = "开票金额格式错误")
@JsonFormat(shape = JsonFormat.Shape.STRING)
private BigDecimal invoiceAmount;
/**
* 收入合同处新增标识 flag = 1
*/
@TableField(exist = false)
@ApiModelProperty(value = "收入合同处新增标识 flag = 1")
private String flag;
}
@@ -2,14 +2,15 @@ package com.jero.member.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.jero.common.common.ProjectCommon;
import com.jero.common.exception.JeroBootException;
import com.jero.common.service.ContractCreateProjectSendMessageService;
import com.jero.common.service.ProjectDetailService;
import com.jero.common.util.ValidUtil;
import com.jero.common.vo.ProjectStatusVO;
import com.jero.company.entity.PayContactsManagement;
import com.jero.company.service.IPayContactsManagementService;
import com.jero.contract.entity.PayIncomeContract;
import com.jero.contract.service.IPayIncomeContractAssociatedService;
import com.jero.contract.service.IPayIncomeContractService;
import com.jero.pack.entity.PayPackCompanyProject;
import com.jero.pack.service.IPayPackCompanyProjectService;
@@ -64,7 +65,7 @@ public class PayPayMemberProjectSubitemServiceImpl extends ServiceImpl<PayMember
@Autowired
private ProjectDetailService projectDetailService;
@Autowired
private IPayIncomeContractAssociatedService payIncomeContractAssociatedService;
private ContractCreateProjectSendMessageService contractCreateProjectSendMessageService;
@Resource
private IPayMemberProjectSubitemService memberProjectSubitemService;
/**
@@ -114,6 +115,10 @@ public class PayPayMemberProjectSubitemServiceImpl extends ServiceImpl<PayMember
}
}
}
// 收入合同创建项目发送消息到项目负责人
if(Objects.equals(ProjectCommon.FLAG,payMemberProjectSubitem.getFlag())){
contractCreateProjectSendMessageService.ContractCreateProjectSendMessageService(memberProject.getProjectName() + "" + payMemberProjectSubitem.getCompanyName());
}
}
/**
@@ -1,12 +0,0 @@
package com.jero.message.common;
public class MessageCommon {
/**
* 阅读状态(0未读,1已读)
*/
public final static Integer READ_FLAG1 = 1;
/**
* 阅读状态(0未读,1已读)
*/
public final static Integer READ_FLAG0 = 0;
}
@@ -1,179 +0,0 @@
package com.jero.message.controller;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.common.system.base.controller.JeroController;
import com.jero.common.system.query.QueryGenerator;
import com.jero.common.system.vo.LoginUser;
import com.jero.message.common.MessageCommon;
import com.jero.message.entity.PayAnnouncementMessage;
import com.jero.message.service.IPayAnnouncementMessageService;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
/**
* @Description: 消息
* @Author: jeecg-boot
* @Date: 2021-09-22
* @Version: V1.0
*/
@Api(tags="消息")
@RestController
@RequestMapping("/message/payAnnouncementMessage")
@Slf4j
public class PayAnnouncementMessageController extends JeroController<PayAnnouncementMessage, IPayAnnouncementMessageService> {
@Autowired
private IPayAnnouncementMessageService payAnnouncementMessageService;
/**
* 分页列表查询
*
* @param payAnnouncementMessage
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "消息-分页列表查询")
@ApiOperation(value="消息-分页列表查询", notes="消息-分页列表查询")
@GetMapping(value = "/list")
public Result<?> queryPageList(PayAnnouncementMessage payAnnouncementMessage,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
payAnnouncementMessage.setRecipient(sysUser.getId());
QueryWrapper<PayAnnouncementMessage> queryWrapper = QueryGenerator.initQueryWrapper(payAnnouncementMessage, req.getParameterMap());
Page<PayAnnouncementMessage> page = new Page<>(pageNo, pageSize);
IPage<PayAnnouncementMessage> pageList = payAnnouncementMessageService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* @Description 已读
* @Author lqt
* @Date 2021/9/22
* @Param
* @Return
* @Exception
*/
@AutoLog(value = "消息-已读")
@ApiOperation(value="消息-已读", notes="消息-已读")
@PostMapping(value = "/add")
public Result<?> update(@RequestBody PayAnnouncementMessage payAnnouncementMessage) {
LambdaUpdateWrapper<PayAnnouncementMessage> update = new LambdaUpdateWrapper<>();
update.eq(PayAnnouncementMessage::getId,payAnnouncementMessage.getId());
update.set(PayAnnouncementMessage::getReadFlag,MessageCommon.READ_FLAG1);
payAnnouncementMessageService.update(update);
return Result.OK("操作成功!");
}
/**
* 添加
*
* @param payAnnouncementMessage
* @return
*/
// @AutoLog(value = "pay_announcement_message-添加")
// @ApiOperation(value="pay_announcement_message-添加", notes="pay_announcement_message-添加")
// @PostMapping(value = "/add")
public Result<?> add(@RequestBody PayAnnouncementMessage payAnnouncementMessage) {
payAnnouncementMessageService.save(payAnnouncementMessage);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param payAnnouncementMessage
* @return
*/
// @AutoLog(value = "pay_announcement_message-编辑")
// @ApiOperation(value="pay_announcement_message-编辑", notes="pay_announcement_message-编辑")
// @PutMapping(value = "/edit")
public Result<?> edit(@RequestBody PayAnnouncementMessage payAnnouncementMessage) {
payAnnouncementMessageService.updateById(payAnnouncementMessage);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
// @AutoLog(value = "pay_announcement_message-通过id删除")
// @ApiOperation(value="pay_announcement_message-通过id删除", notes="pay_announcement_message-通过id删除")
// @DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name="id",required=true) String id) {
payAnnouncementMessageService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
// @AutoLog(value = "pay_announcement_message-批量删除")
// @ApiOperation(value="pay_announcement_message-批量删除", notes="pay_announcement_message-批量删除")
// @DeleteMapping(value = "/deleteBatch")
public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.payAnnouncementMessageService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
@AutoLog(value = "pay_announcement_message-通过id查询")
@ApiOperation(value="pay_announcement_message-通过id查询", notes="pay_announcement_message-通过id查询")
@GetMapping(value = "/queryById")
public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
PayAnnouncementMessage payAnnouncementMessage = payAnnouncementMessageService.getById(id);
if(payAnnouncementMessage==null) {
return Result.error("未找到对应数据");
}
return Result.OK(payAnnouncementMessage);
}
/**
* 导出excel
*
* @param request
* @param payAnnouncementMessage
*/
// @RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, PayAnnouncementMessage payAnnouncementMessage) {
return super.exportXls(request, payAnnouncementMessage, PayAnnouncementMessage.class, "pay_announcement_message");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
// @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, PayAnnouncementMessage.class);
}
}
@@ -1,89 +0,0 @@
package com.jero.message.entity;
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: pay_announcement_message
* @Author: jeecg-boot
* @Date: 2021-09-22
* @Version: V1.0
*/
@Data
@TableName("pay_announcement_message")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="pay_announcement_message对象", description="pay_announcement_message")
public class PayAnnouncementMessage implements Serializable {
private static final long serialVersionUID = 1L;
/**id*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "id")
private String id;
/**标题*/
@Excel(name = "标题", width = 15)
@ApiModelProperty(value = "标题")
private String titile;
/**内容*/
@Excel(name = "内容", width = 15)
@ApiModelProperty(value = "内容")
private String msgContent;
/**发布人*/
@Excel(name = "发布人", width = 15)
@ApiModelProperty(value = "发布人")
private String sender;
/**接收用户*/
@Excel(name = "接收用户", width = 15)
@ApiModelProperty(value = "接收用户")
private String recipient;
/**消息类型(字典表)*/
@Excel(name = "消息类型(字典表)", width = 15)
@ApiModelProperty(value = "消息类型(字典表)")
private Integer msgCategory;
/**操作*/
@Excel(name = "操作", width = 15)
@ApiModelProperty(value = "操作")
private String operation;
/**业务id*/
@Excel(name = "业务id", width = 15)
@ApiModelProperty(value = "业务id")
private String busId;
/**阅读状态(0未读,1已读)*/
@Excel(name = "阅读状态(0未读,1已读)", width = 15)
@ApiModelProperty(value = "阅读状态(0未读,1已读)")
private Integer readFlag;
/**阅读时间*/
@Excel(name = "阅读时间", width = 15, format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "阅读时间")
private Date readTime;
/**创建人*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**创建时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private String updateBy;
/**更新时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "更新时间")
private Date updateTime;
}
@@ -1,15 +0,0 @@
package com.jero.message.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.message.entity.PayAnnouncementMessage;
/**
* @Description: pay_announcement_message
* @Author: jeecg-boot
* @Date: 2021-09-22
* @Version: V1.0
*/
public interface PayAnnouncementMessageMapper extends BaseMapper<PayAnnouncementMessage> {
}
@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.message.mapper.PayAnnouncementMessageMapper">
</mapper>
@@ -1,16 +0,0 @@
package com.jero.message.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.message.entity.PayAnnouncementMessage;
/**
* @Description: pay_announcement_message
* @Author: jeecg-boot
* @Date: 2021-09-22
* @Version: V1.0
*/
public interface IPayAnnouncementMessageService extends IService<PayAnnouncementMessage> {
void sendMessage(PayAnnouncementMessage payAnnouncementMessage);
}
@@ -1,46 +0,0 @@
package com.jero.message.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.constant.WebsocketConst;
import com.jero.common.exception.JeroBootException;
import com.jero.message.common.MessageCommon;
import com.jero.message.entity.PayAnnouncementMessage;
import com.jero.message.mapper.PayAnnouncementMessageMapper;
import com.jero.message.service.IPayAnnouncementMessageService;
import com.jero.modules.message.websocket.WebSocket;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Objects;
/**
* @Description: pay_announcement_message
* @Author: jeecg-boot
* @Date: 2021-09-22
* @Version: V1.0
*/
@Service
public class PayAnnouncementMessageServiceImpl extends ServiceImpl<PayAnnouncementMessageMapper, PayAnnouncementMessage> implements IPayAnnouncementMessageService {
@Autowired
private IPayAnnouncementMessageService payAnnouncementMessageService;
@Resource
private WebSocket webSocket;
@Override
@Transactional
public void sendMessage(PayAnnouncementMessage payAnnouncementMessage) {
if(Objects.isNull(payAnnouncementMessage)){
throw new JeroBootException("发送消息失败!");
}
payAnnouncementMessage.setReadFlag(MessageCommon.READ_FLAG0);
payAnnouncementMessageService.save(payAnnouncementMessage);
JSONObject obj = new JSONObject();
obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER);
obj.put(WebsocketConst.MSG_USER_ID, payAnnouncementMessage.getRecipient());
obj.put(WebsocketConst.MSG_ID, payAnnouncementMessage.getId());
obj.put(WebsocketConst.MSG_TXT, payAnnouncementMessage.getTitile());
webSocket.sendMessage(payAnnouncementMessage.getRecipient(), obj.toJSONString());
}
}
@@ -156,7 +156,7 @@ public class PayPaymentRecordController extends JeroController<PayPaymentRecord,
@PostMapping(value = "/payBillList")
public Result<?> payBillList(String id) {
return Result.OK(payMailBillService.selectMailBillVO(id));
return Result.OK(payMailBillService.selectInvoicingStage(id));
}
/**
@@ -13,6 +13,7 @@ import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.jero.common.api.vo.Result;
import com.jero.common.common.ProjectCommon;
import com.jero.common.exception.JeroBootException;
import com.jero.common.service.ProjectDetailService;
import com.jero.common.system.api.ISysBaseAPI;
@@ -5,17 +5,19 @@ import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.api.dto.message.BusTemplateMessageDTO;
import com.jero.common.api.dto.message.TemplateMessageDTO;
import com.jero.common.api.vo.Result;
import com.jero.common.common.ProjectCommon;
import com.jero.common.dto.SendMessageDTO;
import com.jero.common.enums.CompanyMessageEnums;
import com.jero.common.enums.ManagementMessageEnums;
import com.jero.common.service.ProjectDetailService;
import com.jero.common.service.SendMessageService;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.common.system.base.controller.JeroController;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.PasswordUtil;
import com.jero.common.util.ValidUtil;
import com.jero.common.vo.ProjectDetailVO;
import com.jero.message.service.IPayAnnouncementMessageService;
import com.jero.project.common.PayProjectCommon;
import com.jero.project.entity.*;
import com.jero.project.service.IPayWorkingGroupService;
@@ -56,7 +58,7 @@ public class PayWorkingGroupSubItemController extends JeroController<PayWorkingG
@Autowired
private ISysBaseAPI sysBaseAPI;
@Autowired
private IPayAnnouncementMessageService payAnnouncementMessageService;
private SendMessageService sendMessageService;
/**
* 分页列表查询
@@ -151,38 +153,30 @@ public class PayWorkingGroupSubItemController extends JeroController<PayWorkingG
if(CollectionUtils.isEmpty(listPayContactsManagementTemporary)){
return Result.error("联系人不存在!");
}
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
listPayWorkingGroupSubItem.forEach(p->{
List<PayContactsManagementTemporary> listContactsEmail = listPayContactsManagementTemporary.stream().filter(item->Objects.equals(p.getContactsTemporaryIdOne(),item.getId())).collect(Collectors.toList());
if(CollectionUtils.isEmpty(listContactsEmail)){
List<PayContactsManagementTemporary> listContactsInfo = listPayContactsManagementTemporary.stream().filter(item->Objects.equals(p.getContactsTemporaryIdOne(),item.getId())).collect(Collectors.toList());
if(CollectionUtils.isEmpty(listContactsInfo)){
return;
}
if(StringUtils.isBlank(listContactsEmail.get(0).getEmail())){
return;
// 发送消息
SendMessageDTO sendMessageDTO = new SendMessageDTO();
if(!StringUtils.isBlank(listContactsInfo.get(0).getEmail())){
sendMessageDTO.setEmail(PasswordUtil.decrypt(listContactsInfo.get(0).getEmail()));
}
String msg = "中汽数据中心提醒您,贵公司与中汽数据签订的" + payWorkingGroup.getWorkingGroupProject()
+ "项目款项仍未结余,请及时汇款,如已经汇款,请忽略此条通知。谢谢合作";
// sysBaseAPI.sendEmailMsg(PasswordUtil.decrypt(listContactsEmail.get(0).getEmail()), "", msg);
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
// PayAnnouncementMessage payAnnouncementMessage = new PayAnnouncementMessage();
// payAnnouncementMessage.setTitile(MessageEnums.MSG14.getValue());
// payAnnouncementMessage.setMsgContent(msg);
// payAnnouncementMessage.setSender(sysUser.getId());
// payAnnouncementMessage.setRecipient(sysUser.getId());
// payAnnouncementMessage.setMsgCategory(MessageEnums.MSG14.getCode());
// payAnnouncementMessage.setOperation(MessageEnums.MSG14.getDetail());
// payAnnouncementMessage.setBusId(p.getId());
// payAnnouncementMessageService.sendMessage(payAnnouncementMessage);
BusTemplateMessageDTO busTemplateMessageDTO = new BusTemplateMessageDTO();
busTemplateMessageDTO.setTitle(CompanyMessageEnums.MSG11.getValue());
busTemplateMessageDTO.setFromUser(sysUser.getId());
busTemplateMessageDTO.setToUser(sysUser.getUsername());
busTemplateMessageDTO.setTemplateCode(CompanyMessageEnums.MSG11.getCode());
busTemplateMessageDTO.setTemplateParam(null);
busTemplateMessageDTO.setBusId(p.getId());
sysBaseAPI.sendBusTemplateAnnouncement(busTemplateMessageDTO);
if(!StringUtils.isBlank(listContactsInfo.get(0).getPhone())){
sendMessageDTO.setToUser(PasswordUtil.decrypt(listContactsInfo.get(0).getPhone()));
sendMessageDTO.setPhone(PasswordUtil.decrypt(listContactsInfo.get(0).getPhone()));
}
HashMap<String,String> map = new HashMap<>();
map.put("projectName",payWorkingGroup.getWorkingGroupProject());
sendMessageDTO.setFromUser(sysUser.getId());
sendMessageDTO.setTemplateCode(CompanyMessageEnums.MSG11.getCode());
sendMessageDTO.setTemplateParam(map);
sendMessageDTO.setBusType("email");
sendMessageDTO.setBusId(p.getId());
sendMessageService.SendMessageService(sendMessageDTO);
});
// todo 缺少发送消息
return Result.OK("添加成功!");
}
@@ -199,4 +199,10 @@ public class PayCommonProject implements Serializable {
@TableField(exist = false)
@ApiModelProperty(value = "联系人邮箱")
private String email;
/**
* 收入合同处新增标识 flag = 1
*/
@TableField(exist = false)
@ApiModelProperty(value = "收入合同处新增标识 flag = 1")
private String flag;
}
@@ -192,4 +192,20 @@ public class PayWorkingGroupSubItem implements Serializable {
@TableField(exist = false)
@ApiModelProperty(value = "项目ids 多个以逗号分隔")
private java.lang.String projectIds;
/**已提醒*/
@TableField(exist = false)
@Dict(dicCode = "yn")
private Integer remind;
/**会议id*/
@TableField(exist = false)
private java.lang.String meetingId;
/**
* 收入合同处新增标识 flag = 1
*/
@TableField(exist = false)
@ApiModelProperty(value = "收入合同处新增标识 flag = 1")
private String flag;
}
@@ -5,15 +5,26 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.api.vo.Result;
import com.jero.common.common.ProjectCommon;
import com.jero.common.common.RoleCommon;
import com.jero.common.dto.SendMessageDTO;
import com.jero.common.enums.CompanyMessageEnums;
import com.jero.common.enums.ManagementMessageEnums;
import com.jero.common.exception.JeroBootException;
import com.jero.common.service.ContractCreateProjectSendMessageService;
import com.jero.common.service.ProjectDetailService;
import com.jero.common.service.SendMessageService;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.PasswordUtil;
import com.jero.common.vo.ProjectStatusVO;
import com.jero.contract.common.PayIncomeContractCommon;
import com.jero.contract.entity.PayIncomeContract;
import com.jero.contract.entity.PayIncomeContractAssociated;
import com.jero.contract.service.IPayIncomeContractAssociatedService;
import com.jero.contract.service.IPayIncomeContractService;
import com.jero.modules.system.entity.SysRole;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysRoleService;
import com.jero.modules.system.service.ISysUserService;
import com.jero.pack.entity.PayPackCompany;
import com.jero.pack.entity.PayPackCompanyProject;
@@ -34,6 +45,7 @@ import com.jero.temporary.service.IPayContactsManagementTemporaryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -43,10 +55,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.*;
/**
* @Description: pay_common_project
@@ -74,6 +83,9 @@ public class PayCommonProjectServiceImpl extends ServiceImpl<PayCommonProjectMap
private IPayPackCompanyProjectService payPackCompanyProjectService;
@Autowired
private ProjectDetailService projectDetailService;
@Autowired
private ContractCreateProjectSendMessageService contractCreateProjectSendMessageService;
@Override
@@ -120,6 +132,11 @@ public class PayCommonProjectServiceImpl extends ServiceImpl<PayCommonProjectMap
}
}
}
// 收入合同创建项目发送消息到项目负责人
if(Objects.equals(ProjectCommon.FLAG,payCommonProject.getFlag())){
contractCreateProjectSendMessageService.ContractCreateProjectSendMessageService(payCommonProject.getChargeProject());
}
}
@Override
@@ -5,8 +5,15 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.api.vo.Result;
import com.jero.common.common.ProjectCommon;
import com.jero.common.common.RoleCommon;
import com.jero.common.dto.SendMessageDTO;
import com.jero.common.enums.CompanyMessageEnums;
import com.jero.common.exception.JeroBootException;
import com.jero.common.service.ContractCreateProjectSendMessageService;
import com.jero.common.service.ProjectDetailService;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.PasswordUtil;
import com.jero.common.util.ValidUtil;
import com.jero.common.vo.ProjectStatusVO;
import com.jero.company.entity.PayCompanyManagement;
@@ -17,6 +24,9 @@ import com.jero.contract.entity.PayIncomeContract;
import com.jero.contract.entity.PayIncomeContractAssociated;
import com.jero.contract.service.IPayIncomeContractAssociatedService;
import com.jero.contract.service.IPayIncomeContractService;
import com.jero.meeting.entity.PayMeetingRemindRecord;
import com.jero.meeting.service.IPayMeetingRemindRecordService;
import com.jero.modules.system.entity.SysUser;
import com.jero.pack.entity.PayPackCompanyProject;
import com.jero.pack.service.IPayPackCompanyProjectService;
import com.jero.project.common.PayProjectCommon;
@@ -34,6 +44,7 @@ import com.jero.temporary.service.IPayContactsManagementTemporaryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.jeecgframework.poi.excel.ExcelImportCheckUtil;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.entity.ImportParams;
@@ -81,6 +92,10 @@ public class PayWorkingGroupSubItemServiceImpl extends ServiceImpl<PayWorkingGro
private IPayPackCompanyProjectService payPackCompanyProjectService;
@Autowired
private ProjectDetailService projectDetailService;
@Resource
private IPayMeetingRemindRecordService payMeetingRemindRecordService;
@Autowired
private ContractCreateProjectSendMessageService contractCreateProjectSendMessageService;
@Override
public void updateBatchSetCharge(SetChargeInput input) {
@@ -89,7 +104,20 @@ public class PayWorkingGroupSubItemServiceImpl extends ServiceImpl<PayWorkingGro
@Override
public IPage<PayWorkingGroupSubItem> queryPageList(Page<PayWorkingGroupSubItem> page, PayWorkingGroupSubItem payWorkingGroupSubitem,String paymentDate) {
return payWorkingGroupSubItemMapper.queryPageList(page,payWorkingGroupSubitem,paymentDate);
IPage<PayWorkingGroupSubItem> payWorkingGroupSubItemIPage = payWorkingGroupSubItemMapper.queryPageList(page, payWorkingGroupSubitem, paymentDate);
if (StringUtils.isNotBlank(payWorkingGroupSubitem.getMeetingId())){
List<PayWorkingGroupSubItem> records = payWorkingGroupSubItemIPage.getRecords();
for (PayWorkingGroupSubItem workingGroupSubItem : records) {
String workingGroupSubItemId = workingGroupSubItem.getId();
LambdaQueryWrapper<PayMeetingRemindRecord> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(PayMeetingRemindRecord::getId,workingGroupSubItemId);
int count = payMeetingRemindRecordService.count(wrapper);
if (count>0){
workingGroupSubItem.setRemind(PayProjectCommon.YES);
}
}
}
return payWorkingGroupSubItemIPage;
}
@Override
@@ -156,7 +184,10 @@ public class PayWorkingGroupSubItemServiceImpl extends ServiceImpl<PayWorkingGro
}
}
}
// 收入合同创建项目发送消息到项目负责人
if(Objects.equals(ProjectCommon.FLAG,payWorkingGroupSubItem.getFlag())){
contractCreateProjectSendMessageService.ContractCreateProjectSendMessageService(payWorkingGroup.getWorkingGroupProject() + "" + payWorkingGroupSubItem.getChargeCompanyTemporaryName());
}
}
@Override
@@ -1,5 +1,6 @@
package com.jero.modules.message.entity;
import com.jero.common.aspect.annotation.Dict;
import com.jero.common.system.base.entity.JeroEntity;
import org.jeecgframework.poi.excel.annotation.Excel;
@@ -25,6 +26,7 @@ public class SysMessageTemplate extends JeroEntity {
private java.lang.String templateCode;
/**模板标题*/
@Excel(name = "模板标题", width = 30)
@Dict(dicCode = "notice_type")
private java.lang.String templateName;
/**模板内容*/
@Excel(name = "模板内容", width = 50)
@@ -34,5 +36,6 @@ public class SysMessageTemplate extends JeroEntity {
private java.lang.String templateTestJson;
/**模板类型*/
@Excel(name = "模板类型", width = 15)
@Dict(dicCode = "msgType")
private java.lang.String templateType;
}
@@ -5,6 +5,8 @@ import cn.hutool.crypto.asymmetric.RSA;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.exceptions.ClientException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.system.model.SysLoginVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -34,9 +36,6 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.*;
/**
@@ -594,10 +593,25 @@ public class LoginController {
return authenticationUtils.getPublicKey();
}
@ApiOperation(value = "忘记密码", notes = "忘记密码")
@PostMapping(value = "/forgetPassword")
public Result<?> forgetPassword(@RequestBody SysUser user) {
sysUserService.forgetPassword(user);
@ApiOperation(value = "短信验证码修改密码")
@PostMapping(value = "/verificationChangePassword")
public Result<?> verificationChangePassword(@RequestBody SysLoginVO loginVO) {
sysUserService.verificationChangePassword(loginVO);
return Result.OK("修改密码成功");
}
@ApiOperation(value = "发送手机号验证码")
@GetMapping(value = "/sendVerificationCode")
public Result<?> sendVerificationCode(String phone) {
phone = PasswordUtil.encrypt(phone);
LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysUser::getPhone, phone);
SysUser sysUser = sysUserService.getOne(queryWrapper);
if (Objects.isNull(sysUser)){
throw new JeroBootException("手机号不存在");
}
sysBaseAPI.sendVerificationCode(phone,"2",null,null);
String string = redisUtil.get("_verification:_phone:" + PasswordUtil.decrypt(phone)).toString();
return Result.OK(string);
}
}
@@ -11,6 +11,8 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jero.common.system.api.ISysBaseAPI;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.SecurityUtils;
import com.jero.common.api.vo.Result;
@@ -67,6 +69,8 @@ public class SysAnnouncementController {
private ISysAnnouncementSendService sysAnnouncementSendService;
@Resource
private WebSocket webSocket;
@Autowired
private ISysBaseAPI sysBaseAPI;
/**
* 分页列表查询
@@ -313,6 +317,13 @@ public class SysAnnouncementController {
anntMsgList = sysAnnouncementService.querySysCementPageByUserId(anntMsgList,userId,"1");//通知公告消息
Page<SysAnnouncement> sysMsgList = new Page<SysAnnouncement>(0,5);
sysMsgList = sysAnnouncementService.querySysCementPageByUserId(sysMsgList,userId,"2");//系统消息
if(!CollectionUtils.isEmpty(sysMsgList.getRecords())){
List<SysAnnouncement> list = sysMsgList.getRecords();
list.forEach(p->{
p.setTitile(sysBaseAPI.translateDict("notice_type",p.getTitile()));
});
sysMsgList.setRecords(list);
}
Map<String,Object> sysMsgMap = new HashMap<String, Object>();
sysMsgMap.put("sysMsgList", sysMsgList.getRecords());
sysMsgMap.put("sysMsgTotal", sysMsgList.getTotal());
@@ -32,6 +32,7 @@ public class SysAnnouncement implements Serializable {
* 标题
*/
@Excel(name = "标题", width = 15)
@Dict(dicCode = "notice_type")
private java.lang.String titile;
/**
* 内容
@@ -144,4 +145,8 @@ public class SysAnnouncement implements Serializable {
* 摘要
*/
private java.lang.String msgAbstract;
/**
* 模板编码
*/
private String templateCode;
}
@@ -37,7 +37,8 @@
sa.bus_id as bus_id,
sa.open_type as open_type,
sa.open_page as open_page,
sa.msg_abstract
sa.msg_abstract,
sa.template_code
from sys_announcement_send sas
left join sys_announcement sa ON sas.annt_id = sa.id
where sa.send_status = '1'
@@ -2,6 +2,7 @@ package com.jero.modules.system.model;
import java.io.Serializable;
import com.jero.common.aspect.annotation.Dict;
import org.springframework.format.annotation.DateTimeFormat;
import com.baomidou.mybatisplus.annotation.IdType;
@@ -29,6 +30,7 @@ public class AnnouncementSendModel implements Serializable {
/**用户id*/
private java.lang.String userId;
/**标题*/
@Dict(dicCode = "notice_type")
private java.lang.String titile;
/**内容*/
private java.lang.String msgContent;
@@ -77,4 +79,9 @@ public class AnnouncementSendModel implements Serializable {
*/
private java.lang.String msgAbstract;
/**
* 模板编码
*/
private java.lang.String templateCode;
}
@@ -1,7 +1,12 @@
package com.jero.modules.system.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
/**
* 登录表单
@@ -9,6 +14,7 @@ import io.swagger.annotations.ApiModelProperty;
* @Author scott
* @since 2019-01-18
*/
@Data
@ApiModel(value="登录对象", description="登录对象")
public class SysLoginModel {
@ApiModelProperty(value = "账号")
@@ -21,44 +27,4 @@ public class SysLoginModel {
private String checkKey;
@ApiModelProperty(value = "RSA公钥")
private String rsaPublicKey;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getCaptcha() {
return captcha;
}
public void setCaptcha(String captcha) {
this.captcha = captcha;
}
public String getCheckKey() {
return checkKey;
}
public void setCheckKey(String checkKey) {
this.checkKey = checkKey;
}
public String getRsaPublicKey() {
return rsaPublicKey;
}
public void setRsaPublicKey(String rsaPublicKey) {
this.rsaPublicKey = rsaPublicKey;
}
}
@@ -0,0 +1,51 @@
package com.jero.modules.system.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
/**
* @author liJiaRao
* @date 2021-09-24 10:00
*/
@Data
public class SysLoginVO {
@ApiModelProperty(value = "用户名")
private String username;
/**手机号*/
@ApiModelProperty(value = "手机号")
@NotEmpty(message = "手机号不能为空!")
@Pattern(regexp = "^((13[0-9])|(14[579])|(15([0-3]|[5-9]))|(17[0135678])|(18[0-9])|(19[8|9])|(16[6]))\\d{8}$",message = "手机号码格式错误")
private String phone;
/**
* 密码
*/
@ApiModelProperty(value = "密码")
@NotEmpty(message = "密码不能为空!")
private String password;
/**
* 确认密码
*/
@ApiModelProperty(value = "确认密码")
@NotEmpty(message = "确认密码不能为空!")
private String verifyPassword;
/**
* 验证码
*/
@ApiModelProperty(value = "验证码")
@NotEmpty(message = "验证码不能为空!")
private String verifyCode;
@ApiModelProperty(value = "RSA公钥")
@NotEmpty(message = "RSA公钥不能为空!")
private String rsaPublicKey;
}
@@ -14,6 +14,7 @@ import com.jero.common.system.vo.SysUserCacheInfo;
import com.jero.modules.system.entity.SysUser;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.system.model.SysLoginVO;
import com.jero.modules.system.model.SysUserSysDepartModel;
import com.jero.modules.system.vo.SysUserVo;
import org.springframework.transaction.annotation.Transactional;
@@ -241,5 +242,12 @@ public interface ISysUserService extends IService<SysUser> {
String resetPassword(String username);
void forgetPassword(SysUser user);
void verificationChangePassword(SysLoginVO loginVO);
/**
* 通过角色编码,查询角色下用户
* @param roleCode 角色集合
* @return
*/
List<SysUser> getRolesUser(List<String> roleCode);
}
@@ -13,6 +13,7 @@ import com.jero.common.util.HuaWeiSmsUtil;
import com.jero.modules.oss.mapper.OSSFileMapper;
import com.jero.modules.pay.company.entity.PayContactsManagement;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.SecurityUtils;
import com.jero.common.api.dto.OnlineAuthDTO;
@@ -406,13 +407,13 @@ public class SysBaseApiImpl implements ISysBaseAPI {
}
SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0);
//模板标题
title = title==null?sysSmsTemplate.getTemplateName():title;
// title = title==null?sysSmsTemplate.getTemplateName():title;
//模板内容
String content = sysSmsTemplate.getTemplateContent();
if(map!=null) {
for (Map.Entry<String, String> entry : map.entrySet()) {
String str = "${" + entry.getKey() + "}";
title = title.replace(str, entry.getValue());
// title = title.replace(str, entry.getValue());
content = content.replace(str, entry.getValue());
}
}
@@ -430,6 +431,7 @@ public class SysBaseApiImpl implements ISysBaseAPI {
announcement.setBusType(busType);
announcement.setOpenType(SysAnnmentTypeEnum.getByType(busType).getOpenType());
announcement.setOpenPage(SysAnnmentTypeEnum.getByType(busType).getOpenPage());
announcement.setTemplateCode(templateCode);
sysAnnouncementMapper.insert(announcement);
// 2.插入用户通告阅读标记表记录
String userId = toUser;
@@ -1012,6 +1014,34 @@ public class SysBaseApiImpl implements ISysBaseAPI {
emailHandle.SendMsg(email, title, content);
}
@Override
public void sendEmailTemplateMsg(String email,String title,String templateCode,Map<String,String> map) {
if(StringUtils.isBlank(email)){
throw new JeroBootException("邮件接收人不能为空");
}
if(StringUtils.isBlank(templateCode)){
throw new JeroBootException("模板编码不能为空");
}
List<SysMessageTemplate> sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode);
if(CollectionUtils.isEmpty(sysSmsTemplates)){
throw new JeroBootException("消息模板不存在,模板编码:"+templateCode);
}
SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0);
//模板标题
// title = Objects.isNull(title) ? sysSmsTemplate.getTemplateName() : title;
//模板内容
String content = sysSmsTemplate.getTemplateContent();
if(!Objects.isNull(map)) {
for (Map.Entry<String, String> entry : map.entrySet()) {
String str = "${" + entry.getKey() + "}";
// title = title.replace(str, entry.getValue());
content = content.replace(str, entry.getValue());
}
}
EmailSendMsgHandle emailHandle = new EmailSendMsgHandle();
emailHandle.SendMsg(email, title, content);
}
/**
* 发送邮件+ 附件消息
* @param email
@@ -1029,6 +1059,33 @@ public class SysBaseApiImpl implements ISysBaseAPI {
huaWeiSmsUtil.sendVerificationCode(phone, codeType, codeTime, templateParas);
}
@Override
public void sendSMS(String phone, String codeType, String codeTime,String templateCode,HashMap<String,String> map) {
if(StringUtils.isBlank(phone)){
throw new JeroBootException("手机号不能为空");
}
if(StringUtils.isBlank(templateCode)){
throw new JeroBootException("模板编码不能为空");
}
List<SysMessageTemplate> sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode);
if(CollectionUtils.isEmpty(sysSmsTemplates)){
throw new JeroBootException("消息模板不存在,模板编码:"+templateCode);
}
SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0);
//模板标题
String title = sysSmsTemplate.getTemplateName();
//模板内容
String content = sysSmsTemplate.getTemplateContent();
if(!Objects.isNull(map)) {
for (Map.Entry<String, String> entry : map.entrySet()) {
String str = "${" + entry.getKey() + "}";
title = title.replace(str, entry.getValue());
content = content.replace(str, entry.getValue());
}
}
huaWeiSmsUtil.sendVerificationCode(phone, codeType, codeTime, content);
}
/**
* 根据部门id查询部门所有的父级(不包含自己)
* @author 马志朝
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.exception.JeroBootException;
import com.jero.common.util.*;
import com.jero.modules.system.model.SysLoginVO;
import com.jero.modules.system.vo.SysUserVo;
import lombok.extern.slf4j.Slf4j;
import com.jero.common.api.vo.Result;
@@ -26,7 +27,9 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.*;
@@ -475,55 +478,80 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
}
@Override
public void forgetPassword(SysUser user) {
fPRuleCheck(user);
public void verificationChangePassword(SysLoginVO loginVO) {
fPRuleCheck(loginVO);
//前端传入密码解密
String username = user.getUsername();
String password = user.getPassword();
String verifyPassword = user.getVerifyPassword();
String RSAPublicKey = user.getRsapublickey();
String phone = loginVO.getPhone();
String password = loginVO.getPassword();
String verifyPassword = loginVO.getVerifyPassword();
String RSAPublicKey = loginVO.getRsaPublicKey();
String RSAPrivateKey = String.valueOf(redisUtil.get(RSAPublicKey));
try {
password = CommonUtils.decryptBtRsaPriKey(password, RSAPrivateKey);
verifyPassword = CommonUtils.decryptBtRsaPriKey(verifyPassword, RSAPrivateKey);
user.setPassword(password);
user.setVerifyPassword(verifyPassword);
loginVO.setPassword(password);
loginVO.setVerifyPassword(verifyPassword);
} catch (Exception e) {
e.printStackTrace();
}
//处理手机获取验证码的逻辑
Object obj = redisUtil.get("_verification:_phone:" + user.getPhone());
Object obj = redisUtil.get("_verification:_phone:" + phone);
if (obj == null) {
throw new JeroBootException("验证码失效,请重新发送");
}
String code = obj.toString();
if (!user.getVerifyCode().equals(code)) {
if (!loginVO.getVerifyCode().equals(code)) {
throw new JeroBootException("验证码错误!");
}
if (!password.equals(verifyPassword)) {
throw new JeroBootException("新密码和确认密码不一致,请重新输入");
}
LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysUser::getUsername, username);
SysUser sysUser = userMapper.selectOne(wrapper);
LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysUser::getPhone, PasswordUtil.encrypt(phone));
SysUser sysUser = this.getOne(queryWrapper);
if (ObjectUtils.isEmpty(sysUser)) {
throw new JeroBootException("用户不存在");
}
String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, sysUser.getSalt());
user.setPassword(passwordEncode);
userMapper.forgetPassword(user);
redisUtil.del("_verification:_phone:" + user.getPhone());
sysUser.setPassword(passwordEncode);
userMapper.forgetPassword(sysUser);
redisUtil.del("_verification:_phone:" + phone);
List<String> roles = sysBaseAPI.getRolesByUsername(sysUser.getUsername());
//SysRole sysRole = sysRoleMapper.selectOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleCode, roles.get(0)));
}
@Override
public List<SysUser> getRolesUser(List<String> roleCode) {
if(CollectionUtils.isEmpty(roleCode)){
throw new JeroBootException("角色编码为空!");
}
LambdaQueryWrapper<SysRole> queryRole = new LambdaQueryWrapper<>();
queryRole.in(SysRole::getRoleCode,roleCode);
List<SysRole> listSysRole = sysRoleMapper.selectList(queryRole);
if(CollectionUtils.isEmpty(listSysRole)){
throw new JeroBootException("角色不存在!");
}
List<String> listRoleId = listSysRole.stream().map(SysRole::getId).collect(Collectors.toList());
LambdaQueryWrapper<SysUserRole> querySysUserRole = new LambdaQueryWrapper<>();
querySysUserRole.in(SysUserRole::getRoleId,listRoleId);
List<SysUserRole> listSysUserRole = sysUserRoleMapper.selectList(querySysUserRole);
if(StringUtils.isEmpty(listSysUserRole)){
return null;
}
List<String> listUserId = listSysUserRole.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
LambdaQueryWrapper<SysUser> querySysUser = new LambdaQueryWrapper<>();
querySysUser.in(SysUser::getId,listUserId);
List<SysUser> listSysUser = userMapper.selectList(querySysUser);
return listSysUser;
}
/**
* 忘记密码校验
* @param user
*/
private void fPRuleCheck(SysUser user){
private void fPRuleCheck(SysLoginVO user){
if(ObjectUtils.isEmpty(user.getUsername())){
throw new JeroBootException("用户名为必填");
}else if(user.getUsername().length()>50){
@@ -29,16 +29,16 @@ spring:
username: zhangqinlin@syxysoft.com
password: Zql0000000
port: 25
# host: smtp.163.com
# username: test@163.com
# password: ??
# properties:
# mail:
# smtp:
# auth: true
# starttls:
# enable: true
# required: true
# host: smtp.163.com
# username: test@163.com
# password: ??
# properties:
# mail:
# smtp:
# auth: true
# starttls:
# enable: true
# required: true
## quartz定时任务,采用数据库方式
quartz:
job-store-type: jdbc
@@ -172,9 +172,9 @@ mybatis-plus:
id-type: ASSIGN_ID
# 默认数据库表下划线命名
table-underline: true
# configuration:
# configuration:
# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 返回类型为Map,显示null对应的字段
# call-setters-on-nulls: true
#jero专用配置