bug修复

This commit is contained in:
guo 2024-03-25 15:13:09 +08:00
parent 94d1209005
commit f8b4739f80
53 changed files with 1656 additions and 100 deletions

View File

@ -0,0 +1,35 @@
package com.zhgd.xmgl.base;
/**
* @author heshi
*/
public interface EmailService {
/**
* 发送文本邮件
*
* @param to 收件人
* @param subject 主题
* @param content 内容
*/
void sendSimpleMail(String to, String subject, String content);
/**
* 发送HTML邮件
*
* @param to 收件人
* @param subject 主题
* @param content 内容
*/
public void sendHtmlMail(String to, String subject, String content);
/**
* 发送带附件的邮件
*
* @param to 收件人
* @param subject 主题
* @param content 内容
* @param filePath 附件
*/
public void sendAttachmentsMail(String to, String subject, String content, String filePath);
}

View File

@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.websocket.*;
import java.util.Date;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
@ -35,7 +36,7 @@ public class SafetyHatWSClient {
@OnOpen
public void open(Session session) {
log.info("SafetyHatWSClient客户端:" + id + ",连接服务端...");
log.info("SafetyHatWSClient连接客户端:" + id + ",连接服务端...");
this.session = session;
}
@ -52,6 +53,7 @@ public class SafetyHatWSClient {
JSONObject jo = JSON.parseObject(message);
String cmd = jo.getString("cmd");
if (Objects.equals(cmd, "ma_login")) {
log.info("SafetyHatWSClient登录......");
//先登录
Boolean status = jo.getBoolean("status");
if (status != null && status) {
@ -134,7 +136,7 @@ public class SafetyHatWSClient {
@OnClose
public void onClose() {
log.info("SafetyHatWSClient客户端:" + id + ",服务端服务端断开连接");
log.info("SafetyHatWSClient关闭客户端:" + id + ",服务端服务端断开连接");
}
/**

View File

@ -18,7 +18,9 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -262,4 +264,25 @@ public class CompanyController {
return Result.ok();
}
@ApiOperation(value = "查询某个用户的所属组织sn列表", notes = "查询某个用户的所属组织sn列表", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "userId", value = "用户id", paramType = "body", required = true, dataType = "String"),
})
@PostMapping(value = "/getOrgSnListByUserId")
public Result<List<String>> getOrgSnListByUserId(@ApiIgnore @RequestBody HashMap<String, Object> paramMap) {
return Result.success(companyService.getOrgSnListByUserId(paramMap));
}
@ApiOperation(value = "修改租户的组织", notes = "修改租户的组织", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "userId", value = "用户id", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "projectSns", value = "项目sn多个以,分割)", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "companySns", value = "企业sn多个以,分割)", paramType = "body", required = false, dataType = "String"),
})
@PostMapping(value = "/updateTenantOrg")
public Result updateTenantOrg(@ApiIgnore @RequestBody HashMap<String, Object> paramMap) {
companyService.updateTenantOrg(paramMap);
return Result.ok();
}
}

View File

@ -1,5 +1,6 @@
package com.zhgd.xmgl.modules.basicdata.controller;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -9,7 +10,6 @@ import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.jeecg.common.util.oConvertUtils;
import com.zhgd.xmgl.modules.basicdata.entity.OperationLog;
import com.zhgd.xmgl.modules.basicdata.service.IOperationLogService;
import com.zhgd.xmgl.modules.party.entity.PartyPromotionalVideo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@ -51,27 +51,29 @@ public class OperationLogController {
*/
@ApiOperation(value = "分页列表查询操作日志表信息", notes = "分页列表查询操作日志表信息", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "userName", value = "操作人", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "operName", value = "操作名称", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "startTime", value = "开始时间格式2021-08-15", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "endTime", value = "结束时间格式2021-08-15", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "sn", value = "项目SN或企业sn", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "operModul", value = "功能模块", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "body", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "body", required = true, dataType = "Integer"),
})
@ApiImplicitParam(name = "userName", value = "操作人", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "operName", value = "操作名称", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "startTime", value = "开始时间格式2021-08-15", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "endTime", value = "结束时间格式2021-08-15", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "sn", value = "项目SN或企业sn", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "operModul", value = "功能模块", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "body", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "body", required = true, dataType = "Integer"),
})
@PostMapping(value = "/list")
public Result<IPage<EntityMap>> queryPageList(@RequestBody Map<String,Object> map) {
public Result<IPage<OperationLog>> queryPageList(@RequestBody Map<String, Object> map) {
return Result.success(operationLogService.selectOperationLogPage(map));
}
/**
* 添加
* @param operationLog
* @return
*/
/**
* 添加
*
* @param operationLog
* @return
*/
@ApiOperation(value = "添加操作日志表信息", notes = "添加操作日志表信息", httpMethod = "POST")
@PostMapping(value = "/add")
public Result<OperationLog> add(@RequestBody OperationLog operationLog) {
public Result<OperationLog> add(@RequestBody OperationLog operationLog) {
Result<OperationLog> result = new Result<OperationLog>();
try {
operationLogService.save(operationLog);
@ -146,35 +148,20 @@ public class OperationLogController {
result.setSuccess(true);
}
return result;
}
}
@ApiOperation(value = "导出excel操作日志表信息", notes = "导出excel操作日志表信息", httpMethod = "POST")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
//// Step.1 组装查询条件
//QueryWrapper<PartyPromotionalVideo> queryWrapper = null;
//try {
// String paramsStr = request.getParameter("paramsStr");
// if (oConvertUtils.isNotEmpty(paramsStr)) {
// String deString = URLDecoder.decode(paramsStr, "UTF-8");
// PartyPromotionalVideo partyPromotionalVideo = JSON.parseObject(deString, PartyPromotionalVideo.class);
// queryWrapper = QueryGenerator.initQueryWrapper(partyPromotionalVideo, request.getParameterMap());
// }
//} catch (UnsupportedEncodingException e) {
// e.printStackTrace();
//}
//
////Step.2 AutoPoi 导出Excel
//ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
//List<PartyPromotionalVideo> pageList = s.list(queryWrapper);
////导出文件名称
//mv.addObject(NormalExcelConstants.FILE_NAME, "宣传视频列表");
//mv.addObject(NormalExcelConstants.CLASS, PartyPromotionalVideo.class);
//mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("宣传视频列表数据", "导出人:Jeecg", "导出信息"));
//mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
//return mv;
return null;
@ApiOperation(value = "导出excel操作日志表信息", notes = "导出excel操作日志表信息", httpMethod = "POST")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(@RequestBody Map<String, Object> map) {
IPage<OperationLog> p = operationLogService.selectOperationLogPage(map);
List<OperationLog> pageList = p.getRecords();
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
mv.addObject(NormalExcelConstants.FILE_NAME, "宣传视频列表");
mv.addObject(NormalExcelConstants.CLASS, OperationLog.class);
mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("宣传视频列表数据", "导出人:Jeecg", "导出信息"));
mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
return mv;
}
}

View File

@ -212,4 +212,20 @@ public class SystemUserController {
return systemUserService.deleteZjwjUser(systemUser);
}
@ApiOperation(value = "星纵修改密码", notes = "星纵修改密码", httpMethod = "POST")
@PostMapping(value = "/xz/updatePw")
public Result xzUpdatePw(@RequestBody SystemUser systemUser) {
systemUserService.xzUpdatePw(systemUser);
return Result.ok();
}
@ApiOperation(value = "根据企业或项目SN查找新用户租户列表", notes = "根据企业或项目SN查找新用户租户列表", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "sn", required = true, value = "企业或项目SN", paramType = "body"),
})
@PostMapping(value = "/getTenantListBySn")
public Result<List<SystemUser>> getTenantListBySn(@RequestBody Map<String, Object> map) {
return Result.success(systemUserService.getTenantListBySn(map));
}
}

View File

@ -3,6 +3,7 @@ package com.zhgd.xmgl.modules.basicdata.entity;
import java.io.Serializable;
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 lombok.Data;
@ -66,14 +67,25 @@ public class OperationLog implements Serializable {
@Excel(name = "请求URI", width = 15)
@ApiModelProperty(value="请求URI")
private java.lang.String operUri ;
/**请求IP*/
@Excel(name = "请求IP", width = 15)
@ApiModelProperty(value="请求IP")
private java.lang.String operIp ;
/**操作时间*/
@Excel(name = "操作时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@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 operCreateTime ;
/**
* 请求IP
*/
@Excel(name = "请求IP", width = 15)
@ApiModelProperty(value = "请求IP")
private java.lang.String operIp;
/**
* 操作时间
*/
@Excel(name = "操作时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@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 operCreateTime;
@TableField(exist = false)
private String account;
@TableField(exist = false)
private String realName;
@TableField(exist = false)
private String operLogTime;
}

View File

@ -85,11 +85,7 @@ public class SystemUser implements Serializable {
@Excel(name = "企业或项目sn", width = 15)
@ApiModelProperty(value = "企业或项目sn")
private java.lang.String sn;
/**
* 账号类型1系统管理员2企业管理员账号3企业区账号4企业市账号5项目账号7项目人员账号
*/
@Excel(name = "账号类型1系统管理员2企业总部管理员账号,3区域账号4城市账号5项目账号6项目子账号7项目人员账号", width = 15)
@ApiModelProperty(value = "账号类型1系统管理员jxjadmin2企业管理员账号175120098943企业区账号4企业市账号5项目账号thhy只能看一个项目6项目子账号aq比一个项目更小7企业子账号qyyszh只能看到很多项目的账号,8参建单位9政务")
@ApiModelProperty(value = "账号类型1系统管理员jxjadmin2企业管理员账号175120098943企业区账号4企业市账号5项目账号thhy只能看一个项目6项目子账号aq比一个项目更小7企业子账号qyyszh只能看到很多项目的账号,8参建单位9政务10租户")
private java.lang.Integer accountType;
@ApiModelProperty(value = "项目子账号绑定的劳务人员")
@ -153,4 +149,14 @@ public class SystemUser implements Serializable {
@TableField(exist = false)
private java.lang.String workerName;
@TableField(exist = false)
@ApiModelProperty(value = "图形验证码")
private java.lang.String graphValidateCode;
@TableField(exist = false)
@ApiModelProperty(value = "图形验证码uuid")
private java.lang.String graphValidateCodeUuid;
}

View File

@ -0,0 +1,68 @@
package com.zhgd.xmgl.modules.basicdata.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;
/**
* @Description: 星纵-账号和企业或项目关联表
* @author pds
* @date 2024-03-22
* @version V1.0
*/
@Data
@TableName("xz_system_user_to_company_project")
@ApiModel(value = "XzSystemUserToCompanyProject实体类", description = "XzSystemUserToCompanyProject")
public class XzSystemUserToCompanyProject implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "id")
private java.lang.Long id;
/**
* 用户id
*/
@Excel(name = "用户id", width = 15)
@ApiModelProperty(value = "用户id")
private java.lang.Long userId;
/**
* 项目sn或企业sn
*/
@Excel(name = "项目sn或企业sn", width = 15)
@ApiModelProperty(value = "项目sn或企业sn")
private java.lang.String sn;
/**
* 1企业sn2项目sn
*/
@Excel(name = "1企业sn2项目sn", width = 15)
@ApiModelProperty(value = "1企业sn2项目sn")
private java.lang.Integer type;
/**
* 创建时间 yyyy-MM-dd HH:mm:ss
*/
@Excel(name = "创建时间 yyyy-MM-dd HH:mm:ss", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建时间 yyyy-MM-dd HH:mm:ss")
private java.util.Date createTime;
/**
* 更新时间 yyyy-MM-dd HH:mm:ss
*/
@Excel(name = "更新时间 yyyy-MM-dd HH:mm:ss", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新时间 yyyy-MM-dd HH:mm:ss")
private java.util.Date updateTime;
}

View File

@ -19,5 +19,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@Mapper
public interface OperationLogMapper extends BaseMapper<OperationLog> {
List<EntityMap> selectOperationLogPage(Page<EntityMap> page, @Param("param")Map<String, Object> map);
List<OperationLog> selectOperationLogPage(Page<OperationLog> page, @Param("param") Map<String, Object> map);
}

View File

@ -3,12 +3,11 @@ package com.zhgd.xmgl.modules.basicdata.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhgd.jeecg.common.mybatis.EntityMap;
import com.zhgd.xmgl.modules.basicdata.entity.SystemUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.security.core.parameters.P;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -49,4 +48,8 @@ public interface SystemUserMapper extends BaseMapper<SystemUser> {
IPage<SystemUser> getZjwjUserPage(Page<SystemUser> p, @Param("s") SystemUser systemUser);
List<SystemUser> getZjwjUserList(@Param("s") SystemUser systemUser);
List<String> getOrgSnListByUserId(HashMap<String, Object> paramMap);
List<SystemUser> getTenantListBySn(Map<String, Object> map);
}

View File

@ -0,0 +1,19 @@
package com.zhgd.xmgl.modules.basicdata.mapper;
import java.util.List;
import com.zhgd.xmgl.modules.basicdata.entity.XzSystemUserToCompanyProject;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 星纵-账号和企业或项目关联表
* @author pds
* @date 2024-03-22
* @version V1.0
*/
@Mapper
public interface XzSystemUserToCompanyProjectMapper extends BaseMapper<XzSystemUserToCompanyProject> {
}

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhgd.xmgl.modules.basicdata.mapper.OperationLogMapper">
<select id="selectOperationLogPage" resultType="com.zhgd.jeecg.common.mybatis.EntityMap">
<select id="selectOperationLogPage" resultType="com.zhgd.xmgl.modules.basicdata.entity.OperationLog">
SELECT b.account,
a.*,b.real_name,date_format(a.oper_create_time, '%Y-%m-%d %H:%i:%S') oper_log_time
FROM operation_log a INNER JOIN system_user b ON a.oper_user_id=b.user_id

View File

@ -191,4 +191,18 @@
AND di.id = #{s.departmentId}
</if>
</select>
<select id="getOrgSnListByUserId" resultType="java.lang.String">
select xsutcp.sn from system_user su
join xz_system_user_to_company_project xsutcp on su.user_id = xsutcp.user_id
where su.user_id=#{userId}
</select>
<select id="getTenantListBySn" resultType="com.zhgd.xmgl.modules.basicdata.entity.SystemUser">
SELECT a.*, jb.job_name
from system_user a
join xz_system_user_to_company_project p on p.user_id=a.user_id
LEFT JOIN organization_job jb ON a.job_id = jb.id
WHERE p.sn = #{sn} and a.account_type=10
</select>
</mapper>

View File

@ -0,0 +1,4 @@
<?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.zhgd.xmgl.modules.basicdata.mapper.XzSystemUserToCompanyProjectMapper">
</mapper>

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.zhgd.jeecg.common.mybatis.EntityMap;
import com.zhgd.xmgl.modules.basicdata.entity.Company;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -61,4 +62,8 @@ public interface ICompanyService extends IService<Company> {
void addHeadquarterCompany(Company company);
void updateHeadquarterCompany(Company company);
void updateTenantOrg(HashMap<String, Object> paramMap);
List<String> getOrgSnListByUserId(HashMap<String, Object> paramMap);
}

View File

@ -15,5 +15,5 @@ import java.util.Map;
*/
public interface IOperationLogService extends IService<OperationLog> {
IPage<EntityMap> selectOperationLogPage(Map<String, Object> map);
IPage<OperationLog> selectOperationLogPage(Map<String, Object> map);
}

View File

@ -73,4 +73,8 @@ public interface ISystemUserService extends IService<SystemUser> {
List<SystemUser> getSystemUserList(Map<String, Object> map);
Map<String, Object> md5Login(Map<String, Object> map);
void xzUpdatePw(SystemUser systemUser);
List<SystemUser> getTenantListBySn(Map<String, Object> map);
}

View File

@ -0,0 +1,27 @@
package com.zhgd.xmgl.modules.basicdata.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zhgd.xmgl.modules.basicdata.entity.XzSystemUserToCompanyProject;
import java.util.HashMap;
import java.util.List;
/**
* @Description: 星纵-账号和企业或项目关联表
* @author pds
* @date 2024-03-22
* @version V1.0
*/
public interface IXzSystemUserToCompanyProjectService extends IService<XzSystemUserToCompanyProject> {
IPage<XzSystemUserToCompanyProject> queryPageList(HashMap<String, Object> paramMap);
List<XzSystemUserToCompanyProject> queryList(HashMap<String, Object> paramMap);
void add(XzSystemUserToCompanyProject xzSystemUserToCompanyProject);
void edit(XzSystemUserToCompanyProject xzSystemUserToCompanyProject);
void delete(String id);
}

View File

@ -17,9 +17,11 @@ import com.zhgd.jeecg.common.mybatis.EntityMap;
import com.zhgd.xmgl.modules.basicdata.entity.Company;
import com.zhgd.xmgl.modules.basicdata.entity.CompanyConfig;
import com.zhgd.xmgl.modules.basicdata.entity.SystemUser;
import com.zhgd.xmgl.modules.basicdata.entity.XzSystemUserToCompanyProject;
import com.zhgd.xmgl.modules.basicdata.mapper.CompanyConfigMapper;
import com.zhgd.xmgl.modules.basicdata.mapper.CompanyMapper;
import com.zhgd.xmgl.modules.basicdata.mapper.SystemUserMapper;
import com.zhgd.xmgl.modules.basicdata.mapper.XzSystemUserToCompanyProjectMapper;
import com.zhgd.xmgl.modules.basicdata.service.ICompanyService;
import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
@ -60,6 +62,8 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
private CompanyConfigMapper companyConfigMapper;
@Autowired
private PasswordEncoder passwordEncoder;
@Autowired
private XzSystemUserToCompanyProjectMapper xzSystemUserToCompanyProjectMapper;
@Override
public Map<String, Object> getCompanyType(Map<String, Object> map) {
@ -100,7 +104,7 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
int pageSize = Integer.parseInt(map.getOrDefault("pageSize", 10).toString());
Page<EntityMap> page = new Page<>(pageNo, pageSize);
List<EntityMap> list = companyMapper.selectCompanyPage(page, map);
List<EntityMap> list = companyMapper.selectCompanyPage(page, map);
for (EntityMap entityMap : list) {
if (entityMap.get("expireTime") == null) {
@ -623,6 +627,35 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
systemUserMapper.update(su, new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getSn, company.getHeadquartersSn()).eq(SystemUser::getAccountType, 2));
}
@Override
public void updateTenantOrg(HashMap<String, Object> paramMap) {
String userId = MapUtils.getString(paramMap, "userId");
String projectSns = MapUtils.getString(paramMap, "projectSns");
String companySns = MapUtils.getString(paramMap, "companySns");
xzSystemUserToCompanyProjectMapper.delete(new LambdaQueryWrapper<XzSystemUserToCompanyProject>().eq(XzSystemUserToCompanyProject::getUserId, userId));
insertTenantOrg(companySns, 1);
insertTenantOrg(projectSns, 2);
}
@Override
public List<String> getOrgSnListByUserId(HashMap<String, Object> paramMap) {
return systemUserMapper.getOrgSnListByUserId(paramMap);
}
private void insertTenantOrg(String sns, int type) {
if (StringUtils.isNotBlank(sns)) {
String[] snArr = StringUtils.split(sns, ",");
for (int i = 0; i < snArr.length; i++) {
String sn = snArr[i];
XzSystemUserToCompanyProject to = new XzSystemUserToCompanyProject();
to.setUserId(Long.valueOf(sn));
to.setSn(sn);
to.setType(type);
xzSystemUserToCompanyProjectMapper.insert(to);
}
}
}
private void checkHeadquarterCompanyParams(Company company) {
String account = company.getAccount();
if (StringUtils.isBlank(account)) {

View File

@ -29,12 +29,12 @@ public class OperationLogServiceImpl extends ServiceImpl<OperationLogMapper, Ope
private ICompanyService companyService;
@Override
public IPage<EntityMap> selectOperationLogPage(Map<String, Object> param) {
Map<String,Object> map=companyService.getCompanyType(param);
public IPage<OperationLog> selectOperationLogPage(Map<String, Object> param) {
Map<String, Object> map = companyService.getCompanyType(param);
int pageNo = Integer.parseInt(map.getOrDefault("pageNo", 1).toString());
int pageSize = Integer.parseInt(map.getOrDefault("pageSize", 10).toString());
Page<EntityMap> page = new Page<>(pageNo, pageSize);
List<EntityMap> list=operationLogMapper.selectOperationLogPage(page, map);
Page<OperationLog> page = new Page<>(pageNo, pageSize);
List<OperationLog> list = operationLogMapper.selectOperationLogPage(page, map);
return page.setRecords(list);
}
}

View File

@ -1104,4 +1104,29 @@ public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemU
}
}
@Override
public void xzUpdatePw(SystemUser systemUser) {
Object o = redisRepository.get(systemUser.getGraphValidateCodeUuid());
if (o == null) {
throw new OpenAlertException("验证码已过期");
}
String code = String.valueOf(o);
if (!Objects.equals(code, systemUser.getGraphValidateCode())) {
throw new OpenAlertException("验证码不正确");
}
systemUser.setPassword(null);
String showPassword = systemUser.getShowPassword();
if (StringUtils.isNotEmpty(showPassword)) {
PwUtil.checkPwPattern(showPassword);
systemUser.setPwUpdateTime(new Date());
systemUser.setPassword(passwordEncoder.encode(showPassword));
}
systemUserMapper.updateById(systemUser);
}
@Override
public List<SystemUser> getTenantListBySn(Map<String, Object> map) {
return baseMapper.getTenantListBySn(map);
}
}

View File

@ -0,0 +1,81 @@
package com.zhgd.xmgl.modules.basicdata.service.impl;
import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.xmgl.modules.basicdata.entity.XzSystemUserToCompanyProject;
import com.zhgd.xmgl.modules.basicdata.mapper.XzSystemUserToCompanyProjectMapper;
import com.zhgd.xmgl.modules.basicdata.service.IXzSystemUserToCompanyProjectService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.xmgl.util.PageUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.HashMap;
import java.util.List;
import com.zhgd.xmgl.util.RefUtil;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @Description: 星纵-账号和企业或项目关联表
* @author pds
* @date 2024-03-22
* @version V1.0
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class XzSystemUserToCompanyProjectServiceImpl extends ServiceImpl<XzSystemUserToCompanyProjectMapper, XzSystemUserToCompanyProject> implements IXzSystemUserToCompanyProjectService {
@Autowired
private XzSystemUserToCompanyProjectMapper xzSystemUserToCompanyProjectMapper;
@Override
public IPage<XzSystemUserToCompanyProject> queryPageList(HashMap<String, Object> paramMap) {
QueryWrapper<XzSystemUserToCompanyProject> queryWrapper = getQueryWrapper(paramMap);
Page<XzSystemUserToCompanyProject> page = PageUtil.getPage(paramMap);
IPage<XzSystemUserToCompanyProject> pageList = this.page(page, queryWrapper);
pageList.setRecords(dealList(pageList.getRecords()));
return pageList;
}
@Override
public List<XzSystemUserToCompanyProject> queryList(HashMap<String, Object> paramMap) {
QueryWrapper<XzSystemUserToCompanyProject> queryWrapper = getQueryWrapper(paramMap);
return dealList(this.list(queryWrapper));
}
private QueryWrapper<XzSystemUserToCompanyProject> getQueryWrapper(HashMap<String, Object> paramMap) {
String alias = "";
QueryWrapper<XzSystemUserToCompanyProject> queryWrapper = QueryGenerator.initPageQueryWrapper(XzSystemUserToCompanyProject.class, paramMap, alias);
queryWrapper.orderByDesc(alias + RefUtil.fieldNameUlc(XzSystemUserToCompanyProject::getId));
return queryWrapper;
}
private List<XzSystemUserToCompanyProject> dealList(List<XzSystemUserToCompanyProject> list) {
return list;
}
@Override
public void add(XzSystemUserToCompanyProject xzSystemUserToCompanyProject) {
xzSystemUserToCompanyProject.setId(null);
baseMapper.insert(xzSystemUserToCompanyProject);
}
@Override
public void edit(XzSystemUserToCompanyProject xzSystemUserToCompanyProject) {
baseMapper.updateById(xzSystemUserToCompanyProject);
}
@Override
public void delete(String id) {
XzSystemUserToCompanyProject xzSystemUserToCompanyProject = baseMapper.selectById(id);
if (xzSystemUserToCompanyProject == null) {
throw new OpenAlertException("未找到对应实体");
}
baseMapper.deleteById(id);
}
}

View File

@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -212,6 +213,26 @@ public class RtWorkTicketServiceImpl extends ServiceImpl<RtWorkTicketMapper, RtW
.eq(RtWorkTicketToRiskSecurityLibraryType::getRtWorkTicketId, rtWorkTicket.getId()));
insertRelIf(rtWorkTicket);
baseMapper.updateById(rtWorkTicket);
boolean run = false;
//更新null
LambdaUpdateWrapper<RtWorkTicket> wrapper = new LambdaUpdateWrapper<RtWorkTicket>().eq(RtWorkTicket::getId, rtWorkTicket.getId());
if (rtWorkTicket.getStartTime() == null) {
wrapper.set(RtWorkTicket::getStartTime, null);
run = true;
}
if (rtWorkTicket.getEndTime() == null) {
wrapper.set(RtWorkTicket::getEndTime, null);
run = true;
}
if (rtWorkTicket.getIssueDate() == null) {
wrapper.set(RtWorkTicket::getIssueDate, null);
run = true;
}
if (run) {
baseMapper.update(null, wrapper);
}
//中间表
rtWorkTicketToVideoItemMapper.delete(new LambdaQueryWrapper<RtWorkTicketToVideoItem>()
.eq(RtWorkTicketToVideoItem::getRtWorkTicketId, rtWorkTicket.getId()));

View File

@ -0,0 +1,15 @@
package com.zhgd.xmgl.modules.xz.captcha;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ConfigBeanConfiguration {
@Bean
@ConfigurationProperties(prefix = "login")
public LoginProperties loginProperties() {
return new LoginProperties();
}
}

View File

@ -0,0 +1,48 @@
package com.zhgd.xmgl.modules.xz.captcha;
import lombok.Data;
@Data
public class LoginCode {
public static String prefix = "validCodeKey:";
/**
* 验证码配置
*/
private LoginCodeEnum codeType;
/**
* 验证码有效期 分钟
*/
private Long expiration = 2L;
/**
* 验证码内容长度
*/
private int length = 2;
/**
* 验证码宽度
*/
private int width = 111;
/**
* 验证码高度
*/
private int height = 36;
/**
* 验证码字体
*/
private String fontName;
/**
* 字体大小
*/
private int fontSize = 25;
/**
* 验证码前缀
*
* @return
*/
private String codeKey;
public LoginCodeEnum getCodeType() {
return codeType;
}
}

View File

@ -0,0 +1,21 @@
package com.zhgd.xmgl.modules.xz.captcha;
public enum LoginCodeEnum {
/**
* 算数
*/
ARITHMETIC,
/**
* 中文
*/
CHINESE,
/**
* 中文闪图
*/
CHINESE_GIF,
/**
* 闪图
*/
GIF,
SPEC
}

View File

@ -0,0 +1,96 @@
package com.zhgd.xmgl.modules.xz.captcha;
import com.wf.captcha.*;
import com.wf.captcha.base.Captcha;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.awt.*;
import java.util.Objects;
@Data
@Component
public class LoginProperties {
private LoginCode loginCode;
/**
* 获取验证码生产类
*
* @return
*/
public Captcha getCaptcha() {
if (Objects.isNull(loginCode)) {
loginCode = new LoginCode();
if (Objects.isNull(loginCode.getCodeType())) {
loginCode.setCodeType(LoginCodeEnum.ARITHMETIC);
}
}
return switchCaptcha(loginCode);
}
/**
* 依据配置信息生产验证码
*
* @param loginCode
* @return
*/
private Captcha switchCaptcha(LoginCode loginCode) {
Captcha captcha = null;
synchronized (this) {
switch (loginCode.getCodeType()) {
case ARITHMETIC:
captcha = new FixedArithmeticCaptcha(loginCode.getWidth(), loginCode.getHeight());
captcha.setLen(loginCode.getLength());
break;
case CHINESE:
captcha = new ChineseCaptcha(loginCode.getWidth(), loginCode.getHeight());
captcha.setLen(loginCode.getLength());
break;
case CHINESE_GIF:
captcha = new ChineseGifCaptcha(loginCode.getWidth(), loginCode.getHeight());
captcha.setLen(loginCode.getLength());
break;
case GIF:
captcha = new GifCaptcha(loginCode.getWidth(), loginCode.getHeight());
captcha.setLen(loginCode.getLength());
break;
case SPEC:
captcha = new SpecCaptcha(loginCode.getWidth(), loginCode.getHeight());
captcha.setLen(loginCode.getLength());
default:
System.out.println("验证码配置信息错误!正确配置查看 LoginCodeEnum ");
}
}
if (StringUtils.isNotBlank(loginCode.getFontName())) {
captcha.setFont(new Font(loginCode.getFontName(), Font.PLAIN, loginCode.getFontSize()));
}
return captcha;
}
static class FixedArithmeticCaptcha extends ArithmeticCaptcha {
public FixedArithmeticCaptcha(int width, int height) {
super(width, height);
}
@Override
protected char[] alphas() {
// 生成随机数字和运算符
int n1 = num(1, 10), n2 = num(1, 10);
int opt = num(3);
// 计算结果
int res = new int[]{n1 + n2, n1 - n2, n1 * n2}[opt];
// 转换为字符运算符
char optChar = "+-x".charAt(opt);
this.setArithmeticString(String.format("%s%c%s=?", n1, optChar, n2));
this.chars = String.valueOf(res);
return chars.toCharArray();
}
}
}

View File

@ -0,0 +1,133 @@
package com.zhgd.xmgl.modules.xz.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.xmgl.modules.xz.entity.XzNotice;
import com.zhgd.xmgl.modules.xz.service.IXzNoticeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.simpleframework.xml.core.Validate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.util.HashMap;
import java.util.List;
/**
* @Title: Controller
* @Description: 星纵-消息中心
* @author pds
* @date 2024-03-22
* @version V1.0
*/
@RestController
@RequestMapping("/xmgl/xzNotice")
@Slf4j
@Api(tags = "星纵-消息中心相关Api")
public class XzNoticeController {
@Autowired
private IXzNoticeService xzNoticeService;
/**
* 分页列表查询
*
* @return
*/
@ApiOperation(value = "分页列表查询星纵-消息中心信息", notes = "分页列表查询星纵-消息中心信息", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "query", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "query", required = true, dataType = "Integer"),
})
@GetMapping(value = "/page")
public Result<IPage<XzNotice>> queryPageList(@ApiIgnore @RequestParam HashMap<String, Object> paramMap) {
return Result.success(xzNoticeService.queryPageList(paramMap));
}
/**
* 列表查询
*
* @return
*/
@ApiOperation(value = "列表查询星纵-消息中心信息", notes = "列表查询星纵-消息中心信息", httpMethod = "GET")
@GetMapping(value = "/list")
public Result<List<XzNotice>> queryList(@ApiIgnore @RequestParam HashMap<String, Object> paramMap) {
return Result.success(xzNoticeService.queryList(paramMap));
}
/**
* 添加
*
* @param xzNotice
* @return
*/
@ApiOperation(value = "添加星纵-消息中心信息", notes = "添加星纵-消息中心信息", httpMethod = "POST")
@PostMapping(value = "/add")
public Result<XzNotice> add(@RequestBody @Validate XzNotice xzNotice) {
xzNoticeService.add(xzNotice);
return Result.ok();
}
/**
* 编辑
*
* @param xzNotice
* @return
*/
@ApiOperation(value = "编辑星纵-消息中心信息", notes = "编辑星纵-消息中心信息", httpMethod = "POST")
@PostMapping(value = "/edit")
public Result<XzNotice> edit(@RequestBody XzNotice xzNotice) {
xzNoticeService.edit(xzNotice);
return Result.ok();
}
/**
* 通过id删除
*
* @return
*/
@ApiOperation(value = "删除星纵-消息中心信息", notes = "删除星纵-消息中心信息", httpMethod = "POST")
@ApiImplicitParam(name = "id", value = "星纵-消息中心ID", paramType = "body", required = true, dataType = "String", example = "{\"id\":\"1\"}")
@PostMapping(value = "/delete")
public Result<XzNotice> delete(@ApiIgnore @RequestBody HashMap<String, Object> map) {
xzNoticeService.delete(MapUtils.getString(map, "id"));
return Result.ok();
}
/**
* 通过id查询
*
* @param id
* @return
*/
@ApiOperation(value = "通过id查询星纵-消息中心信息", notes = "通过id查询星纵-消息中心信息", httpMethod = "GET")
@ApiImplicitParam(name = "id", value = "星纵-消息中心ID", paramType = "query", required = true, dataType = "Integer")
@GetMapping(value = "/queryById")
public Result<XzNotice> queryById(@RequestParam(name = "id", required = true) String id) {
Result<XzNotice> result = new Result<XzNotice>();
XzNotice xzNotice = xzNoticeService.getById(id);
if (xzNotice == null) {
result.error500("未找到对应实体");
} else {
result.setResult(xzNotice);
result.setSuccess(true);
}
return result;
}
@ApiOperation(value = "标为已读", notes = "标为已读", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "星纵-消息中心IDs选择的消息已读", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "accountId", value = "推送到的账号ID此账号下所有消息已读", paramType = "body", required = false, dataType = "String"),
})
@PostMapping(value = "/markRead")
public Result<XzNotice> markRead(@ApiIgnore @RequestBody HashMap<String, Object> paramMap) {
xzNoticeService.markRead(paramMap);
return Result.ok();
}
}

View File

@ -0,0 +1,167 @@
package com.zhgd.xmgl.modules.xz.controller;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.wf.captcha.base.Captcha;
import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.redis.lock.RedisRepository;
import com.zhgd.xmgl.modules.xz.captcha.LoginCode;
import com.zhgd.xmgl.modules.xz.captcha.LoginCodeEnum;
import com.zhgd.xmgl.modules.xz.captcha.LoginProperties;
import com.zhgd.xmgl.modules.xz.entity.XzRegistry;
import com.zhgd.xmgl.modules.xz.service.IXzRegistryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.simpleframework.xml.core.Validate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Title: Controller
* @Description: 星纵-用户和供应商注册
* @author pds
* @date 2024-03-21
* @version V1.0
*/
@RestController
@RequestMapping("/xmgl/xzRegistry")
@Slf4j
@Api(tags = "星纵-用户和供应商注册相关Api")
public class XzRegistryController {
@Autowired
private IXzRegistryService xzRegistryService;
@Autowired
private LoginProperties loginProperties;
@Autowired
private RedisRepository redisRepository;
/**
* 分页列表查询
*
* @return
*/
@ApiOperation(value = "分页列表查询星纵-用户和供应商注册信息", notes = "分页列表查询星纵-用户和供应商注册信息", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "query", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "query", required = true, dataType = "Integer"),
})
@GetMapping(value = "/page")
public Result<IPage<XzRegistry>> queryPageList(@ApiIgnore @RequestParam HashMap<String, Object> paramMap) {
return Result.success(xzRegistryService.queryPageList(paramMap));
}
/**
* 列表查询
*
* @return
*/
@ApiOperation(value = "列表查询星纵-用户和供应商注册信息", notes = "列表查询星纵-用户和供应商注册信息", httpMethod = "GET")
@GetMapping(value = "/list")
public Result<List<XzRegistry>> queryList(@ApiIgnore @RequestParam HashMap<String, Object> paramMap) {
return Result.success(xzRegistryService.queryList(paramMap));
}
/**
* 添加
*
* @param xzRegistry
* @return
*/
@ApiOperation(value = "添加星纵-用户和供应商注册信息", notes = "添加星纵-用户和供应商注册信息", httpMethod = "POST")
@PostMapping(value = "/add")
public Result<XzRegistry> add(@RequestBody @Validate XzRegistry xzRegistry) {
xzRegistryService.add(xzRegistry);
return Result.ok();
}
/**
* 编辑
*
* @param xzRegistry
* @return
*/
@ApiOperation(value = "编辑星纵-用户和供应商注册信息", notes = "编辑星纵-用户和供应商注册信息", httpMethod = "POST")
@PostMapping(value = "/edit")
public Result<XzRegistry> edit(@RequestBody XzRegistry xzRegistry) {
xzRegistryService.edit(xzRegistry);
return Result.ok();
}
/**
* 通过id删除
*
* @return
*/
@ApiOperation(value = "删除星纵-用户和供应商注册信息", notes = "删除星纵-用户和供应商注册信息", httpMethod = "POST")
@ApiImplicitParam(name = "id", value = "星纵-用户和供应商注册ID", paramType = "body", required = true, dataType = "String", example = "{\"id\":\"1\"}")
@PostMapping(value = "/delete")
public Result<XzRegistry> delete(@ApiIgnore @RequestBody HashMap<String, Object> map) {
xzRegistryService.delete(MapUtils.getString(map, "id"));
return Result.ok();
}
/**
* 通过id查询
*
* @param id
* @return
*/
@ApiOperation(value = "通过id查询星纵-用户和供应商注册信息", notes = "通过id查询星纵-用户和供应商注册信息", httpMethod = "GET")
@ApiImplicitParam(name = "id", value = "星纵-用户和供应商注册ID", paramType = "query", required = true, dataType = "Integer")
@GetMapping(value = "/queryById")
public Result<XzRegistry> queryById(@RequestParam(name = "id", required = true) String id) {
Result<XzRegistry> result = new Result<XzRegistry>();
XzRegistry xzRegistry = xzRegistryService.getById(id);
if (xzRegistry == null) {
result.error500("未找到对应实体");
} else {
result.setResult(xzRegistry);
result.setSuccess(true);
}
return result;
}
@ApiOperation(value = "获取验证码", notes = "获取验证码")
@GetMapping("/validCode")
public Result getCode() {
Captcha captcha = loginProperties.getCaptcha();
String uuid = LoginCode.prefix + IdUtil.simpleUUID();
//当验证码类型为 arithmetic时且长度 >= 2 captcha.text()的结果有几率为浮点型
String captchaValue = captcha.text();
if (captcha.getCharType() - 1 == LoginCodeEnum.ARITHMETIC.ordinal() && captchaValue.contains(".")) {
captchaValue = captchaValue.split("\\.")[0];
}
// 保存
redisRepository.set(uuid, captchaValue, loginProperties.getLoginCode().getExpiration());
// 验证码信息
Map<String, Object> imgResult = new HashMap<String, Object>(2) {{
put("img", captcha.toBase64());
put("graphValidateCodeUuid", uuid);
}};
return Result.success(imgResult);
}
@ApiOperation(value = "审批", notes = "审批", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "星纵-用户和供应商注册ID", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "approvalProcess", value = "审核进程2审批通过3拒绝申请", paramType = "body", required = true, dataType = "Integer"),
})
@PostMapping(value = "/approval")
public Result<XzRegistry> approval(@RequestBody XzRegistry xzRegistry) {
xzRegistryService.approval(xzRegistry);
return Result.ok();
}
}

View File

@ -0,0 +1,102 @@
package com.zhgd.xmgl.modules.xz.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;
/**
* @Description: 星纵-消息中心
* @author pds
* @date 2024-03-22
* @version V1.0
*/
@Data
@TableName("xz_notice")
@ApiModel(value = "XzNotice实体类", description = "XzNotice")
public class XzNotice implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "id")
private java.lang.Long id;
@ApiModelProperty(value = "推送到的账号ID")
private java.lang.Long accountId;
/**
* 标题
*/
@Excel(name = "标题", width = 15)
@ApiModelProperty(value = "标题")
private java.lang.String title;
/**
* 内容
*/
@Excel(name = "内容", width = 15)
@ApiModelProperty(value = "内容")
private java.lang.String content;
/**
* 类别1通知公告2风险预警
*/
@Excel(name = "类别1通知公告2风险预警", width = 15)
@ApiModelProperty(value = "类别1通知公告2风险预警3审批流程4任务待办5其他")
private java.lang.Integer type;
/**
* 应用
*/
@Excel(name = "应用", width = 15)
@ApiModelProperty(value = "应用")
private java.lang.Integer app;
/**
* 标签
*/
@Excel(name = "标签", width = 15)
@ApiModelProperty(value = "标签")
private java.lang.Integer tag;
/**
* 操作/接收时间
*/
@Excel(name = "操作/接收时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@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 operateTime;
/**
* 1已读0未读
*/
@Excel(name = "1已读0未读", width = 15)
@ApiModelProperty(value = "1已读0未读")
private java.lang.Integer isread;
/**
* 创建时间 yyyy-MM-dd HH:mm:ss
*/
@Excel(name = "创建时间 yyyy-MM-dd HH:mm:ss", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建时间 yyyy-MM-dd HH:mm:ss")
private java.util.Date createTime;
/**
* 更新时间 yyyy-MM-dd HH:mm:ss
*/
@Excel(name = "更新时间 yyyy-MM-dd HH:mm:ss", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新时间 yyyy-MM-dd HH:mm:ss")
private java.util.Date updateTime;
/**
* 项目sn
*/
@Excel(name = "项目sn", width = 15)
@ApiModelProperty(value = "项目sn")
private java.lang.String projectSn;
}

View File

@ -0,0 +1,88 @@
package com.zhgd.xmgl.modules.xz.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;
/**
* @Description: 星纵-用户和供应商注册
* @author pds
* @date 2024-03-21
* @version V1.0
*/
@Data
@TableName("xz_registry")
@ApiModel(value = "XzRegistry实体类", description = "XzRegistry")
public class XzRegistry implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "id")
private java.lang.Long id;
/**
* 账号
*/
@Excel(name = "账号", width = 15)
@ApiModelProperty(value = "账号")
private java.lang.String account;
/**
* 密码
*/
@Excel(name = "密码", width = 15)
@ApiModelProperty(value = "密码")
private java.lang.String pw;
/**
* 电子邮箱
*/
@Excel(name = "电子邮箱", width = 15)
@ApiModelProperty(value = "电子邮箱")
private java.lang.String email;
/**
* 企业名称
*/
@Excel(name = "企业名称", width = 15)
@ApiModelProperty(value = "企业名称")
private java.lang.String companyName;
/**
* 账号类型1用户2供应商
*/
@Excel(name = "账号类型1用户2供应商", width = 15)
@ApiModelProperty(value = "账号类型1用户2供应商")
private java.lang.Integer accountType;
/**
* 创建时间 yyyy-MM-dd HH:mm:ss
*/
@Excel(name = "创建时间 yyyy-MM-dd HH:mm:ss", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建时间 yyyy-MM-dd HH:mm:ss")
private java.util.Date createTime;
/**
* 更新时间 yyyy-MM-dd HH:mm:ss
*/
@Excel(name = "更新时间 yyyy-MM-dd HH:mm:ss", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新时间 yyyy-MM-dd HH:mm:ss")
private java.util.Date updateTime;
/**
* 项目sn
*/
@Excel(name = "项目sn", width = 15)
@ApiModelProperty(value = "项目sn")
private java.lang.String projectSn;
@ApiModelProperty(value = "审核进程1未处理2审批通过3拒绝申请")
private java.lang.Integer approvalProcess;
}

View File

@ -0,0 +1,19 @@
package com.zhgd.xmgl.modules.xz.mapper;
import com.zhgd.xmgl.modules.xz.entity.XzNotice;
import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.HashMap;
/**
* @Description: 星纵-消息中心
* @author pds
* @date 2024-03-22
* @version V1.0
*/
@Mapper
public interface XzNoticeMapper extends BaseMapper<XzNotice> {
Boolean markRead(HashMap<String, Object> paramMap);
}

View File

@ -0,0 +1,16 @@
package com.zhgd.xmgl.modules.xz.mapper;
import com.zhgd.xmgl.modules.xz.entity.XzRegistry;
import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 星纵-用户和供应商注册
* @author pds
* @date 2024-03-21
* @version V1.0
*/
@Mapper
public interface XzRegistryMapper extends BaseMapper<XzRegistry> {
}

View File

@ -0,0 +1,18 @@
<?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.zhgd.xmgl.modules.xz.mapper.XzNoticeMapper">
<select id="markRead" resultType="java.lang.Boolean">
update xz_notice
set isRead = 1
where 1 = 1
<if test="accountId != null and accountId != ''">
and account_id = #{accountId}
</if>
<if test="ids != null and ids != ''">
and id in
<foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
</mapper>

View File

@ -0,0 +1,4 @@
<?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.zhgd.xmgl.modules.xz.mapper.XzRegistryMapper">
</mapper>

View File

@ -0,0 +1,29 @@
package com.zhgd.xmgl.modules.xz.service;
import com.zhgd.xmgl.modules.xz.entity.XzNotice;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import java.util.HashMap;
import java.util.List;
/**
* @Description: 星纵-消息中心
* @author pds
* @date 2024-03-22
* @version V1.0
*/
public interface IXzNoticeService extends IService<XzNotice> {
IPage<XzNotice> queryPageList(HashMap<String, Object> paramMap);
List<XzNotice> queryList(HashMap<String, Object> paramMap);
void add(XzNotice xzNotice);
void edit(XzNotice xzNotice);
void delete(String id);
void markRead(HashMap<String, Object> paramMap);
}

View File

@ -0,0 +1,29 @@
package com.zhgd.xmgl.modules.xz.service;
import com.zhgd.xmgl.modules.xz.entity.XzRegistry;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import java.util.HashMap;
import java.util.List;
/**
* @Description: 星纵-用户和供应商注册
* @author pds
* @date 2024-03-21
* @version V1.0
*/
public interface IXzRegistryService extends IService<XzRegistry> {
IPage<XzRegistry> queryPageList(HashMap<String, Object> paramMap);
List<XzRegistry> queryList(HashMap<String, Object> paramMap);
void add(XzRegistry xzRegistry);
void edit(XzRegistry xzRegistry);
void delete(String id);
void approval(XzRegistry xzRegistry);
}

View File

@ -0,0 +1,89 @@
package com.zhgd.xmgl.modules.xz.service.impl;
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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.xmgl.modules.xz.entity.XzNotice;
import com.zhgd.xmgl.modules.xz.mapper.XzNoticeMapper;
import com.zhgd.xmgl.modules.xz.service.IXzNoticeService;
import com.zhgd.xmgl.util.PageUtil;
import com.zhgd.xmgl.util.RefUtil;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.List;
/**
* @Description: 星纵-消息中心
* @author pds
* @date 2024-03-22
* @version V1.0
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class XzNoticeServiceImpl extends ServiceImpl<XzNoticeMapper, XzNotice> implements IXzNoticeService {
@Autowired
private XzNoticeMapper xzNoticeMapper;
@Override
public IPage<XzNotice> queryPageList(HashMap<String, Object> paramMap) {
QueryWrapper<XzNotice> queryWrapper = getQueryWrapper(paramMap);
Page<XzNotice> page = PageUtil.getPage(paramMap);
IPage<XzNotice> pageList = this.page(page, queryWrapper);
pageList.setRecords(dealList(pageList.getRecords()));
return pageList;
}
@Override
public List<XzNotice> queryList(HashMap<String, Object> paramMap) {
QueryWrapper<XzNotice> queryWrapper = getQueryWrapper(paramMap);
return dealList(this.list(queryWrapper));
}
private QueryWrapper<XzNotice> getQueryWrapper(HashMap<String, Object> paramMap) {
String alias = "";
QueryWrapper<XzNotice> queryWrapper = QueryGenerator.initPageQueryWrapper(XzNotice.class, paramMap, alias);
queryWrapper.orderByDesc(alias + RefUtil.fieldNameUlc(XzNotice::getId));
return queryWrapper;
}
private List<XzNotice> dealList(List<XzNotice> list) {
return list;
}
@Override
public void add(XzNotice xzNotice) {
xzNotice.setId(null);
baseMapper.insert(xzNotice);
}
@Override
public void edit(XzNotice xzNotice) {
baseMapper.updateById(xzNotice);
}
@Override
public void delete(String id) {
XzNotice xzNotice = baseMapper.selectById(id);
if (xzNotice == null) {
throw new OpenAlertException("未找到对应实体");
}
baseMapper.deleteById(id);
}
@Override
public void markRead(HashMap<String, Object> paramMap) {
baseMapper.markRead(paramMap);
}
}

View File

@ -0,0 +1,116 @@
package com.zhgd.xmgl.modules.xz.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.xmgl.modules.basicdata.entity.SystemUser;
import com.zhgd.xmgl.modules.basicdata.mapper.SystemUserMapper;
import com.zhgd.xmgl.modules.xz.entity.XzRegistry;
import com.zhgd.xmgl.modules.xz.mapper.XzRegistryMapper;
import com.zhgd.xmgl.modules.xz.service.IXzRegistryService;
import com.zhgd.xmgl.util.EmailUtil;
import com.zhgd.xmgl.util.PageUtil;
import com.zhgd.xmgl.util.RefUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
/**
* @Description: 星纵-用户和供应商注册
* @author pds
* @date 2024-03-21
* @version V1.0
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class XzRegistryServiceImpl extends ServiceImpl<XzRegistryMapper, XzRegistry> implements IXzRegistryService {
@Autowired
private XzRegistryMapper xzRegistryMapper;
@Autowired
SystemUserMapper systemUserMapper;
@Autowired
EmailUtil emailUtil;
@Override
public IPage<XzRegistry> queryPageList(HashMap<String, Object> paramMap) {
QueryWrapper<XzRegistry> queryWrapper = getQueryWrapper(paramMap);
Page<XzRegistry> page = PageUtil.getPage(paramMap);
IPage<XzRegistry> pageList = this.page(page, queryWrapper);
pageList.setRecords(dealList(pageList.getRecords()));
return pageList;
}
@Override
public List<XzRegistry> queryList(HashMap<String, Object> paramMap) {
QueryWrapper<XzRegistry> queryWrapper = getQueryWrapper(paramMap);
return dealList(this.list(queryWrapper));
}
private QueryWrapper<XzRegistry> getQueryWrapper(HashMap<String, Object> paramMap) {
String alias = "";
QueryWrapper<XzRegistry> queryWrapper = QueryGenerator.initPageQueryWrapper(XzRegistry.class, paramMap, alias);
queryWrapper.orderByDesc(alias + RefUtil.fieldNameUlc(XzRegistry::getId));
return queryWrapper;
}
private List<XzRegistry> dealList(List<XzRegistry> list) {
return list;
}
@Override
public void add(XzRegistry xzRegistry) {
SystemUser systemUser = systemUserMapper.selectOne(new LambdaQueryWrapper<SystemUser>()
.eq(SystemUser::getAccount, xzRegistry.getAccount()));
if (systemUser != null) {
throw new OpenAlertException("账号已存在");
}
//to do 不能重复申请
xzRegistry.setId(null);
baseMapper.insert(xzRegistry);
}
@Override
public void edit(XzRegistry xzRegistry) {
baseMapper.updateById(xzRegistry);
}
@Override
public void delete(String id) {
XzRegistry xzRegistry = baseMapper.selectById(id);
if (xzRegistry == null) {
throw new OpenAlertException("未找到对应实体");
}
baseMapper.deleteById(id);
}
@Override
public void approval(XzRegistry r) {
XzRegistry xzRegistry = baseMapper.selectById(r.getId());
if (xzRegistry == null) {
throw new OpenAlertException("未找到对应实体");
}
xzRegistry.setApprovalProcess(r.getApprovalProcess());
String email = xzRegistry.getEmail();
Integer approvalProcess = xzRegistry.getApprovalProcess();
//2审批通过3拒绝申请
if (Objects.equals(approvalProcess, 2)) {
emailUtil.sendSimpleMail(email, xzRegistry.getAccount() + "账号审批通过", "您在平台申请的账号已经审核通过,账号:" + xzRegistry.getAccount() + "密码:" + xzRegistry.getPw());
} else if (Objects.equals(approvalProcess, 3)) {
emailUtil.sendSimpleMail(email, xzRegistry.getAccount() + "账号拒绝申请", "您在平台申请的账号拒绝申请,账号:" + xzRegistry.getAccount());
}
baseMapper.updateById(xzRegistry);
}
}

View File

@ -336,6 +336,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
.antMatchers("/xmgl/mechanicalEquipmentPositionData/add").permitAll()
.antMatchers("/xmgl/mechanicalEquipmentPositionAlarm/add").permitAll()
.antMatchers("/xmgl/mechanicalEquipmentPositionData/jxzhgAddData").permitAll()
.antMatchers("/xmgl/xzRegistry/add").permitAll()
.antMatchers(HttpMethod.OPTIONS, "/**").anonymous()
.anyRequest().authenticated() // 剩下所有的验证都需要验证.
.and()

View File

@ -22,6 +22,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@ -49,7 +50,7 @@ public class DischargingPlatformCurrentDataTask {
*/
@SchedulerLock(name = "getDischargingPlatformCurrentData", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5)
@Scheduled(cron = "0 0/5 * * * ?")
@GetMapping("/xmgl/task/getDischargingPlatformCurrentData")
@RequestMapping("/xmgl/task/getDischargingPlatformCurrentData")
public void getDischargingPlatformCurrentData() {
log.info("获取卸料平台数据开始任务");
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>()

View File

@ -21,6 +21,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@ -62,7 +63,7 @@ public class ElectricalTask {
*/
@SchedulerLock(name = "getElectricRealTimeData", lockAtMostFor = 1000 * 60 * 5, lockAtLeastFor = 1000 * 60 * 3)
@Scheduled(cron = "0 0/5 * * * ?")
@GetMapping("/xmgl/task/getElectricRealTimeData")
@RequestMapping("/xmgl/task/getElectricRealTimeData")
public void getElectricRealTimeData() {
log.info("获取最新电量使用情况 每5分钟触发任务");
List<Project> projectList = projectMapper.selectList(new LambdaQueryWrapper<Project>()

View File

@ -112,7 +112,7 @@ public class JzgTask {
*/
@SchedulerLock(name = "realNameSystem", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5)
@Scheduled(cron = "0 0 0/1 * * ?")
@GetMapping("/sync")
@RequestMapping("/sync")
public void realNameSystem() {
if (environmentUtil.isDev()) {
return;

View File

@ -30,7 +30,7 @@ public class LocationDataTask {
* 隧道定位数据超时人员标签清除
*/
@Scheduled(cron = "0 0/10 * * * ?")
@GetMapping("/xmgl/task/clearLocationData")
@RequestMapping("/xmgl/task/clearLocationData")
public void clearLocationData() {
log.info("隧道定位数据超时人员标签清除执行");
locationDataMapper.clearLocationData();

View File

@ -57,7 +57,12 @@ public class MechanicalEquipmentPositionDayRecordTask {
MechanicalEquipmentPositionDayRecord dayRecord = new MechanicalEquipmentPositionDayRecord();
dayRecord.setDevSn(dev.getDevSn());
if (dataList.size() > 1) {
dayRecord.setTrackDistanceDay(TiandituUtil.getDistance(getPoint(dataList.get(0)), getPoint(dataList.get(dataList.size() - 1)), getMid(dataList), 0));
try {
dayRecord.setTrackDistanceDay(TiandituUtil.getDistance(getPoint(dataList.get(0)), getPoint(dataList.get(dataList.size() - 1)), getMid(dataList), 0));
} catch (Exception e) {
log.error("计算轨迹异常", e);
continue;
}
} else {
dayRecord.setTrackDistanceDay(0D);
}
@ -72,6 +77,22 @@ public class MechanicalEquipmentPositionDayRecordTask {
}
}
/**
* 测试统计
*/
@RequestMapping("testDayRecord")
public void testDayRecord(String devSn, String day) {
DateTime dateTime = DateUtil.parse(day);
List<MechanicalEquipmentPositionData> dataList = mechanicalEquipmentPositionDataMapper.selectList(new LambdaQueryWrapper<MechanicalEquipmentPositionData>()
.eq(MechanicalEquipmentPositionData::getDevSn, devSn)
.ge(MechanicalEquipmentPositionData::getUploadTime, DateUtil.formatDateTime(DateUtil.beginOfDay(dateTime)))
.le(MechanicalEquipmentPositionData::getUploadTime, DateUtil.formatDateTime(DateUtil.endOfDay(dateTime)))
);
Double distance = TiandituUtil.getDistance(getPoint(dataList.get(0)), getPoint(dataList.get(dataList.size() - 1)), getMid(dataList), 0);
log.info("测试每天计算一次轨迹距离:{}", distance);
}
private String getMid(List<MechanicalEquipmentPositionData> dataList) {
List<MechanicalEquipmentPositionData> subList = dataList.subList(1, dataList.size() - 1);
StringBuilder sb = new StringBuilder();

View File

@ -9,7 +9,6 @@ import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.service.IProjectService;
import com.zhgd.xmgl.util.RundeSafeyHatUtils;
import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.RequestMapping;
@ -21,6 +20,7 @@ import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
import java.util.concurrent.CompletableFuture;
/**
* 智能安全帽task
@ -39,7 +39,6 @@ public class SafetyHatTask {
/**
* 获取安全帽最新数据30秒内的心跳
*/
@SchedulerLock(name = "getHelmetData", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 10)
@Scheduled(cron = "*/10 * * * * ?")
@RequestMapping("getHelmetData")
public void getHelmetData() {
@ -50,16 +49,24 @@ public class SafetyHatTask {
for (Project project : projectList) {
log.info("安全帽user{}", project.getHelmetUser());
SafetyHatWSClient client = SafetyHatWSClient.clientMap.get(project.getHelmetUser());
try {
if (client == null) {
CompletableFuture.runAsync(() -> {
try {
if (client == null) {
log.info("首次连接安全帽user:{}", project.getHelmetUser());
connect(project);
} else {
log.info("发送安全帽获取实时数据user{}", project.getHelmetUser());
client.send("{\"act\":\"ma_get_active_devices\"}");
}
} catch (IllegalStateException e) {
log.info("异常重连:{}", e.getMessage());
connect(project);
} else {
client.send("{\"act\":\"ma_get_active_devices\"}");
}
} catch (IllegalStateException e) {
log.info("异常重连:{}", e.getMessage());
connect(project);
}
}).exceptionally(throwable -> {
log.error("err", throwable);
return null;
});
}
}
} catch (Exception e) {
@ -75,16 +82,24 @@ public class SafetyHatTask {
* @throws IOException
* @throws URISyntaxException
*/
private SafetyHatWSClient connect(Project project) throws DeploymentException, IOException, URISyntaxException {
private SafetyHatWSClient connect(Project project) {
SafetyHatWSClient client = new SafetyHatWSClient();
webSocketContainer.connectToServer(client, new URI("wss://caps.runde.pro/wss"));
try {
webSocketContainer.connectToServer(client, new URI("wss://caps.runde.pro/wss"));
} catch (DeploymentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
JSONObject token = RundeSafeyHatUtils.getToken(project.getHelmetUser(), project.getHelmetPassword());
if (token != null && CharSequenceUtil.isNotBlank(token.getString("session_id"))) {
String sessionId = token.getString("session_id");
project.setRundeToken(sessionId);
String message = "{\"act\":\"ma_login\",\"user_name\":\"" + project.getHelmetUser() + "\",\"access_token\":\"" + sessionId + "\"}";
client.send(message);
log.info("安全帽用户:{},ms:{}", project.getHelmetUser(), message);
log.info("登录安全帽user{},ms:{}", project.getHelmetUser(), message);
SafetyHatWSClient.clientMap.put(project.getHelmetUser(), client);
}
return client;

View File

@ -27,6 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
@ -55,7 +56,7 @@ public class StableWaterMixStationTask {
*/
@Scheduled(cron = "0 0/5 * * * ?")
@SchedulerLock(name = "executeStableWaterMixStationTask", lockAtMostFor = 1000 * 60 * 2, lockAtLeastFor = 1000 * 60 * 1)
@GetMapping("xmgl/task/executeStableWaterMixStationTask")
@RequestMapping("xmgl/task/executeStableWaterMixStationTask")
public void executeStableWaterMixStationTask() {
log.info("定时拉取广联达的搅拌站数据任务开始");
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>()

View File

@ -26,6 +26,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.DecimalFormat;
@ -275,7 +276,7 @@ public class StandardDevTask {
*/
@Scheduled(cron = "0 0/2 * * * ?")
@SchedulerLock(name = "getStandardData", lockAtMostFor = 1000 * 60 * 2, lockAtLeastFor = 1000 * 60 * 1)
@GetMapping("/xmgl/task/getStandardData")
@RequestMapping("/xmgl/task/getStandardData")
public void getStandardData() {
try {
log.info("------------拉取执行标样室时数据任务开始---------");

View File

@ -64,7 +64,7 @@ public class TowerTask {
*/
@SchedulerLock(name = "getTowerData", lockAtMostFor = 1000 * 60 * 5, lockAtLeastFor = 1000 * 60 * 3)
@Scheduled(cron = "0 0/5 * * * ?")
@GetMapping("tower")
@RequestMapping("tower")
public void getEnvironmentDustData() {
log.info("获取塔吊数据(携稳)开始任务");
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>()

View File

@ -62,7 +62,7 @@ public class TowerWorkerAttendanceTask {
*/
@SchedulerLock(name = "getTowerWorkerAttendanceData", lockAtMostFor = 1000 * 60 * 5, lockAtLeastFor = 1000 * 60 * 3)
@Scheduled(cron = "0 0/5 * * * ?")
@GetMapping("getTowerWorkerAttendanceData")
@RequestMapping("getTowerWorkerAttendanceData")
public void getTowerWorkerAttendanceData() {
log.info("获取塔吊-人员考勤数据(携稳)开始任务");
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>()

View File

@ -3,7 +3,9 @@ package com.zhgd.xmgl.task;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zhgd.xmgl.modules.basicdata.entity.SystemLogoConfig;
import com.zhgd.xmgl.modules.basicdata.entity.SystemUser;
import com.zhgd.xmgl.modules.basicdata.mapper.SystemLogoConfigMapper;
import com.zhgd.xmgl.modules.basicdata.mapper.SystemUserMapper;
import com.zhgd.xmgl.modules.basicdata.service.INoticeService;
import com.zhgd.xmgl.modules.project.entity.ProjectExternalSystemService;
@ -23,7 +25,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@ -40,6 +42,7 @@ import java.util.stream.Collectors;
@Slf4j
@Component
@RestController
@RequestMapping("xmgl/task")
public class WorkerTask {
@Autowired
private ProjectExternalSystemServiceMapper projectExternalSystemServiceMapper;
@ -49,6 +52,8 @@ public class WorkerTask {
private ProjectMapper projectMapper;
@Autowired
private SystemUserMapper systemUserMapper;
@Autowired
private SystemLogoConfigMapper systemLogoConfigMapper;
@Autowired
private INoticeService noticeService;
@ -159,7 +164,7 @@ public class WorkerTask {
*/
@SchedulerLock(name = "addWorkerBlacklist", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5)
@Scheduled(cron = "0 0 1 * * ?")
@GetMapping("xmgl/task/addWorkerBlacklist")
@RequestMapping("/addWorkerBlacklist")
public void addWorkerBlacklist() {
List<WorkerInfo> list = workerCertificateMapper.selectExpiredNotInBlackWorkerList();
for (WorkerInfo workerInfo : list) {
@ -178,11 +183,12 @@ public class WorkerTask {
}
/**
* 系统整改提前一个星期对人员的资质证书到期进行预警预警后发送消息提示项目管理员账号
* 对人员的资质证书到期进行预警预警后发送消息提示项目管理员账号
* 系统设置开启后将会在对企业下的各个项目开启人员证书到期预警提示提前预警时间可以自行设置,监测内容包括人员的合同信息资格证书保险信息
*/
@SchedulerLock(name = "alarmWorkerBlack", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5)
@Scheduled(cron = "0 0 1 * * ?")
@GetMapping("xmgl/task/alarmWorkerBlack")
@RequestMapping("/alarmWorkerBlack")
public void alarmWorkerBlack() {
List<WorkerInfo> list = workerCertificateMapper.alarmWorkerBlack();
Map<String, List<WorkerInfo>> projectMap = list.stream().collect(Collectors.groupingBy(WorkerInfo::getProjectSn));
@ -202,6 +208,8 @@ public class WorkerTask {
}
}
}
}
}

View File

@ -0,0 +1,128 @@
package com.zhgd.xmgl.util;
import com.zhgd.xmgl.base.EmailService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.File;
/**
* 发送邮件工具类 MailUtil
*
* @author heshi
* @date 2021/3/22 16:52
*/
@Service
public class EmailUtil implements EmailService {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
//Spring Boot 提供了一个发送邮件的简单抽象使用的是下面这个接口这里直接注入即可使用
@Autowired
private JavaMailSender mailSender;
// 配置文件中我的qq邮箱
@Value("${spring.mail.from}")
private String from;
/**
* 简单文本邮件
*
* @param to 收件人
* @param subject 主题
* @param content 内容
*/
@Override
public void sendSimpleMail(String to, String subject, String content) {
//创建SimpleMailMessage对象
SimpleMailMessage message = new SimpleMailMessage();
//邮件发送人
message.setFrom(from);
//邮件接收人
message.setTo(to);
//邮件主题
message.setSubject(subject);
//邮件内容
message.setText(content);
//发送邮件
mailSender.send(message);
}
/**
* html邮件
*
* @param to 收件人,多个时参数形式 "xxx@xxx.com,xxx@xxx.com,xxx@xxx.com"
* @param subject 主题
* @param content 内容
*/
@Override
public void sendHtmlMail(String to, String subject, String content) {
//获取MimeMessage对象
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper messageHelper;
try {
messageHelper = new MimeMessageHelper(message, true);
//邮件发送人
messageHelper.setFrom(from);
//邮件接收人,设置多个收件人地址
InternetAddress[] internetAddressTo = InternetAddress.parse(to);
messageHelper.setTo(internetAddressTo);
//messageHelper.setTo(to);
//邮件主题
message.setSubject(subject);
//邮件内容html格式
messageHelper.setText(content, true);
//发送
mailSender.send(message);
//日志信息
logger.info("邮件已经发送。");
} catch (Exception e) {
logger.error("发送邮件时发生异常!", e);
}
}
/**
* 带附件的邮件
*
* @param to 收件人
* @param subject 主题
* @param content 内容
* @param filePath 附件
*/
@Override
public void sendAttachmentsMail(String to, String subject, String content, String filePath) {
MimeMessage message = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
helper.addAttachment(fileName, file);
mailSender.send(message);
//日志信息
logger.info("邮件已经发送。");
} catch (Exception e) {
logger.error("发送邮件时发生异常!", e);
}
}
public static void main(String[] args) {
EmailUtil mailService = new EmailUtil();
mailService.sendSimpleMail("xxx@qq.com", "主题:你好普通邮件", "内容:第一封邮件");
mailService.sendHtmlMail("xxx@qq.com", "主题你好html邮件", "<h1>内容第一封html邮件</h1>");
}
}

View File

@ -3,11 +3,12 @@ package com.zhgd.xmgl.util;
import cn.hutool.core.convert.Convert;
import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import lombok.extern.slf4j.Slf4j;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Slf4j
public class TiandituUtil {
static Pattern pattern = Pattern.compile("<distance>(.*)</distance>");
@ -22,12 +23,15 @@ public class TiandituUtil {
*/
public static Double getDistance(String orig, String dest, String mid, Integer style) {
String key = "000c3ade82b69dee54ac334e750cfac0";
String url = "http://api.tianditu.gov.cn/drive?postStr={\"orig\":\"" + orig + "\",\"dest\":\"" + dest + "\",\"mid\":\"" + mid + "\",\"style\":\"" + style + "\"}&type=search&tk=" + key;
String url = "http://api.tianditu.gov.cn/drive?type=search&tk=" + key;
//String url = "http://api.tianditu.gov.cn/drive?postStr={\"orig\":\"116.35506,39.92277\",\"dest\":\"116.39751,39.90854\",\"mid\":\"116.36506,39.91277;116.37506,39.92077\",\"style\":\"0\"}&type=search&tk=000c3ade82b69dee54ac334e750cfac0";
String rs = HttpRequest.get(url)
log.info("查询轨迹距离:url:{}", url);
String rs = HttpRequest.post(url)
.header(Header.USER_AGENT, "PostmanRuntime/7.37.0")//头信息多个头信息多次调用此方法即可
.form("postStr", "{\"orig\":\"" + orig + "\",\"dest\":\"" + dest + "\",\"mid\":\"" + mid + "\",\"style\":\"" + style + "\"}")
.timeout(20000)//超时毫秒
.execute().body();
log.info("查询轨迹距离:rs:{}", rs);
Matcher matcher = pattern.matcher(rs);
matcher.find();
return Convert.toDouble(matcher.group(1));