Merge remote-tracking branch 'origin/uat' into uat

# Conflicts:
#	src/main/java/com/zhgd/xmgl/modules/basicdata/controller/CompanyController.java
#	src/main/java/com/zhgd/xmgl/modules/basicdata/service/ISystemUserService.java
#	src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/CompanyServiceImpl.java
#	src/main/java/com/zhgd/xmgl/modules/project/controller/ProjectController.java
#	src/main/java/com/zhgd/xmgl/modules/project/service/IProjectService.java
This commit is contained in:
guoshengxiong 2025-12-19 16:27:51 +08:00
commit a30c1502f5
63 changed files with 2150 additions and 18 deletions

View File

@ -50,6 +50,7 @@ public class TcpNettyHandler extends SimpleChannelInboundHandler<Object> {
String str = getString(bytes);
str = str.trim();
log.info("tcp接收数据 >>> {} ", str);
// ctx.writeAndFlush(Unpooled.copiedBuffer("response message", CharsetUtil.UTF_8));
if (StringUtils.startsWith(str, HighFormworkSupport.TCP_DATA_PREFIX) && StringUtils.endsWith(str, HighFormworkSupport.TCP_DATA_END)) {
log.info("高支模接收数据 >>> {} ", str);
//接收高支模数据保存到mysql中
@ -117,6 +118,7 @@ public class TcpNettyHandler extends SimpleChannelInboundHandler<Object> {
poisonousGasDevCurrentDataService.addDataFromTcp(hexString.trim());
}
}
}
private byte[] readBytes(Object msg) {
@ -164,6 +166,7 @@ public class TcpNettyHandler extends SimpleChannelInboundHandler<Object> {
public void channelReadComplete(ChannelHandlerContext ctx) {
//刷新缓冲区把消息发出去
ctx.flush();
}
@Override
@ -175,5 +178,6 @@ public class TcpNettyHandler extends SimpleChannelInboundHandler<Object> {
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
log.info("channelActiveconnect success!");
ctx.writeAndFlush("欢迎连接 Netty 服务端!\n");
}
}

View File

@ -17,6 +17,8 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
/**
* @author chenws
@ -46,8 +48,8 @@ public class TcpNettyServer {
protected void initChannel(SocketChannel socketChannel) throws Exception {
//添加自定义处理器
socketChannel.pipeline()
//.addLast(new StringEncoder(StandardCharsets.UTF_8))
//.addLast(new StringDecoder(Charset.forName("GBK")))
// .addLast(new StringEncoder(StandardCharsets.UTF_8))
// .addLast(new StringDecoder(Charset.forName("GBK")))
.addLast(tcpNettyHandler);
}
});

View File

@ -11,7 +11,9 @@ import com.dahuatech.hutool.http.Method;
import com.dahuatech.hutool.json.JSONUtil;
import com.dahuatech.icc.admin.enums.PlayBackFormatEnum;
import com.dahuatech.icc.admin.enums.StreamTypeEnum;
import com.dahuatech.icc.config.OauthConfigUtil;
import com.dahuatech.icc.exception.ClientException;
import com.dahuatech.icc.model.event.eventSubcribe.SubscribeRequest;
import com.dahuatech.icc.model.video.ptzControl.OperateCameraRequest;
import com.dahuatech.icc.model.video.ptzControl.OperateCameraRequest.Data;
import com.dahuatech.icc.model.video.ptzControl.OperateCameraResponse;
@ -27,6 +29,7 @@ import com.dahuatech.icc.multiinone.admin.domain.RecordInfo;
import com.dahuatech.icc.multiinone.admin.vo.*;
import com.dahuatech.icc.oauth.http.IccClient;
import com.dahuatech.icc.oauth.http.IccTokenResponse;
import com.dahuatech.icc.oauth.model.v202010.GeneralResponse;
import com.dahuatech.icc.oauth.model.v202010.OauthConfigUserPwdInfo;
import com.dahuatech.icc.oauth.utils.HttpUtils;
import com.zhgd.jeecg.common.execption.OpenAlertException;
@ -47,22 +50,24 @@ import model.v202207.talk.StopTalkResponse;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class IccVideoCall implements VideoItemManufacturer {
@Value("${serverUrl}")
private String serverUrl;
private ProjectVideoConfig config;
@Lazy
@Autowired
@ -321,6 +326,63 @@ public class IccVideoCall implements VideoItemManufacturer {
return p;
}
@Override
public void setIccSubscriptionByEvent(Map<String, Object> map) {
SubscribeRequest subscribeRequest = new SubscribeRequest();
SubscribeRequest.Param param = new SubscribeRequest.Param();
SubscribeRequest.Param.Subsystem subsystem = new SubscribeRequest.Param.Subsystem();
subsystem.setName(MapUtils.getString(map, "name"));
subsystem.setMagic(MapUtils.getString(map, "magic"));
param.setSubsystem(subsystem);
List<SubscribeRequest.Param.Monitor> monitors = new ArrayList();
SubscribeRequest.Param.Monitor monitor = new SubscribeRequest.Param.Monitor();
//回调地址的接口代码可参考SubscribeCallBackController类中的receiveMsg方法
monitor.setMonitor(serverUrl + "/xmgl/callBack/icc/subscribeCall");
List<SubscribeRequest.Param.Monitor.Event>events = new ArrayList<>();
SubscribeRequest.Param.Monitor.Event event = new SubscribeRequest.Param.Monitor.Event();
//订阅报警事件填alarm
event.setCategory("alarm");
List<SubscribeRequest.Param.Monitor.Event.Authority> authorities = new ArrayList();
SubscribeRequest.Param.Monitor.Event.Authority authority=new SubscribeRequest.Param.Monitor.Event.Authority();
//若订阅指定报警类型可参考下列代码进行修改若订阅所有报警类型则把下列types相关代码删除即可
String types1 = MapUtils.getString(map, "types");
List<String> types= new ArrayList<>(Arrays.asList(types1.split(",")));
authority.setTypes(types);
//若订阅指定组织可参考下列代码进行修改,若订阅所有组织则将下列orgs相关代码删除
// List<String>orgs = new ArrayList<>();
// orgs.add("001001");
// orgs.add("001002");
// authority.setOrgs(orgs);
//若订阅指定设备和通道可参考下列代码进行修改,若订阅所有设备和通道则将下列nodeCodes相关代码删除
// List<String>nodeCodes=new ArrayList();
// nodeCodes.add("1002511$7$0$0");
// nodeCodes.add("1002509$7$0$0");
// authority.setNodeCodes(nodeCodes);
authorities.add(authority);
event.setAuthorities(authorities);
events.add(event);
monitor.setEvents(events);
monitors.add(monitor);
param.setMonitors(monitors);
subscribeRequest.setParam(param);
log.info("SubscribeDemo,subscribeAlarmEvent,request:{}", JSONUtil.toJsonStr(subscribeRequest));
OauthConfigUserPwdInfo config = OauthConfigUtil.getOauthConfig();
try {
GeneralResponse response = HttpUtils.executeJson("/evo-apigw/evo-event/1.0.0/subscribe/mqinfo", subscribeRequest,null, Method.POST, config,GeneralResponse.class);
log.info("SubscribeDemo,subscribeAlarmEvent,response:{}", response.getResult());
} catch (ClientException e) {
log.error(e.getErrMsg(), e);
}
}
/**
* 对抓拍请求参数进行封装
*

View File

@ -8,6 +8,8 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.google.common.collect.Lists;
import com.zhgd.jeecg.common.mybatis.EntityMap;
import com.zhgd.xmgl.call.util.jc.AESUtil;
import com.zhgd.xmgl.call.util.jc.JcHttpUtil;
import com.zhgd.xmgl.modules.electrical.entity.ElectricalData;
import com.zhgd.xmgl.modules.electrical.entity.ElectricalDev;
import com.zhgd.xmgl.modules.environment.entity.DustNoiseData;
@ -21,8 +23,6 @@ import com.zhgd.xmgl.modules.worker.service.IWorkerCertificateService;
import com.zhgd.xmgl.modules.worker.service.IWorkerTypeService;
import com.zhgd.xmgl.modules.worker.service.impl.EnterpriseInfoServiceImpl;
import com.zhgd.xmgl.util.*;
import com.zhgd.xmgl.call.util.jc.AESUtil;
import com.zhgd.xmgl.call.util.jc.JcHttpUtil;
import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock;
import org.apache.commons.lang3.StringUtils;
@ -105,7 +105,7 @@ public class JcCall {
form.setPhone(AESUtil.Encrypt(workerInfo.getPhoneNumber(), AESUtil.SECRET));
}
if (StrUtil.isNotBlank(workerInfo.getIdCardUpPhotoUrl())) {
form.setHeadImg(PathUtil.getServerUrl() + "/image/" + workerInfo.getIdCardUpPhotoUrl());
form.setHeadImg(JcHttpUtil.replaceUrlToHttps(FileUtils.getOnlineUrl(workerInfo.getIdCardUpPhotoUrl())));
}
form.setNation(workerInfo.getNation());
form.setIdcardType(1);
@ -139,7 +139,7 @@ public class JcCall {
JcHttpUtil.UserSyncRequest.CertificateInfo certificateInfo = new JcHttpUtil.UserSyncRequest.CertificateInfo();
if (StrUtil.isNotBlank(o.get("photoUrl"))) {
try {
certificateInfo.setCertificate(FileUtils.getOnlineUrl(o.get("photoUrl")));
certificateInfo.setCertificate(JcHttpUtil.replaceUrlToHttps(FileUtils.getOnlineUrl(o.get("photoUrl"))));
} catch (Exception e) {
e.printStackTrace();
}
@ -243,7 +243,7 @@ public class JcCall {
form.setDeviceName(ufaceDev.getDevName());
}
form.setDirection(Objects.equals(workerAttendance.getPassType(), 2) ? 0 : 1);
form.setPhotoUrl(FileUtils.getOnlineUrl(workerAttendance.getImageUrl()));
form.setPhotoUrl(JcHttpUtil.replaceUrlToHttps(FileUtils.getOnlineUrl(workerAttendance.getImageUrl())));
form.setShowTime(workerAttendance.getCreateTime());
form.setIdcardNo(AESUtil.Encrypt(workerInfo.getIdCard(), AESUtil.SECRET));
form.setCreateDate(DateUtil.now());

View File

@ -78,4 +78,6 @@ public interface VideoItemManufacturer {
* @param map
*/
IPage<HistoryCaptureVo> manualHistoryCapture(Map<String, Object> map);
void setIccSubscriptionByEvent(Map<String, Object> map);
}

View File

@ -1,11 +1,13 @@
package com.zhgd.xmgl.call.util.jc;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import com.gexin.fastjson.JSON;
import com.zhgd.xmgl.util.EnvironmentUtil;
import lombok.Data;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
@ -34,6 +36,7 @@ public class JcHttpUtil {
*/
public static String jcAllPush;
public static EnvironmentUtil environmentUtil;
private static String jcHttpsUrl;
public static String getJcProjectId() {
return jcProjectId;
@ -191,6 +194,28 @@ public class JcHttpUtil {
log.info("机场项目推送考勤记录,rs:{}", result);
}
public static String getJcHttpsUrl() {
return jcHttpsUrl;
}
@Value("${jcHttpsUrl:https://jc.zhgdyun.com:12112}")
public void setJcHttpsUrl(String jcHttpsUrl) {
JcHttpUtil.jcHttpsUrl = jcHttpsUrl;
}
/**
* 替换成https
*
* @param onlineUrl
* @return
*/
public static String replaceUrlToHttps(String onlineUrl) {
if (StrUtil.isBlank(onlineUrl)) {
return null;
}
return StringUtils.replace(onlineUrl, "http://101.43.164.214:11111", getJcHttpsUrl());
}
@Data
public static class DustDataSyncRequest {
private String projectId;
@ -638,7 +663,6 @@ public class JcHttpUtil {
}
}
/**
* 配电数据同步接口请求参数
*/

View File

@ -0,0 +1,181 @@
package com.zhgd.xmgl.modules.basicdata.controller;
import com.zhgd.annotation.OperLog;
import com.zhgd.xmgl.modules.basicdata.entity.dto.AppComponentAuthDto;
import com.zhgd.xmgl.modules.basicdata.entity.vo.AppComponentAuthVo;
import com.zhgd.xmgl.util.PageUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.jeecg.common.util.oConvertUtils;
import com.zhgd.xmgl.modules.basicdata.entity.AppComponentAuth;
import com.zhgd.xmgl.modules.basicdata.service.IAppComponentAuthService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import springfox.documentation.annotations.ApiIgnore;
/**
* @Title: Controller
* @Description: APP组件授权信息
* @author pengj
* @date 2025-11-04
* @version V1.0
*/
@RestController
@RequestMapping("/xmgl/appComponentAuth")
@Slf4j
@Api(tags = "APP组件授权信息管理")
public class AppComponentAuthController {
@Autowired
private IAppComponentAuthService appComponentAuthService;
/**
* 分页列表查询
*
* @return
*/
@OperLog(operModul = "APP组件授权信息管理", operType = "分页查询", operDesc = "分页列表查询APP组件授权信息信息")
@ApiOperation(value = " 分页列表查询APP组件授权信息信息", notes = "分页列表查询APP组件授权信息信息", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "body", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "body", required = true, dataType = "Integer"),
})
@PostMapping(value = "/page")
public Result<IPage<AppComponentAuth>> queryPageList(@ApiIgnore @RequestBody Map<String, Object> map) {
QueryWrapper<AppComponentAuth> queryWrapper = QueryGenerator.initPageQueryWrapper(AppComponentAuth.class, map);
Page<AppComponentAuth> page = PageUtil.getPage(map);
IPage<AppComponentAuth> pageList = appComponentAuthService.page(page, queryWrapper);
return Result.success(pageList);
}
/**
* 列表查询
*
* @return
*/
@OperLog(operModul = "APP组件授权信息管理", operType = "列表查询", operDesc = "列表查询APP组件授权信息信息")
@ApiOperation(value = " 列表查询APP组件授权信息信息", notes = "列表查询APP组件授权信息信息", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "type", value = "类型(1:企业;2:项目)", paramType = "body", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "authType", value = "授权类型(1:企业;2:项目)", paramType = "body", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "sn", value = "企业/项目SN", paramType = "body", required = true, dataType = "Integer"),
})
@PostMapping(value = "/list")
public Result<List<AppComponentAuthDto>> queryList(@ApiIgnore @RequestBody Map<String, Object> map) {
QueryWrapper<AppComponentAuth> queryWrapper = QueryGenerator.initQueryWrapper(AppComponentAuth.class, map, "a.");
List<AppComponentAuthDto> list = appComponentAuthService.getList(queryWrapper);
return Result.success(list);
}
/**
* 添加
*
* @param appComponentAuth
* @return
*/
@OperLog(operModul = "APP组件授权信息管理", operType = "新增", operDesc = "添加修改APP组件授权信息信息")
@ApiOperation(value = " 添加修改APP组件授权信息信息", notes = "添加修改APP组件授权信息信息", httpMethod = "POST")
@PostMapping(value = "/add")
public Result<Object> add(@RequestBody AppComponentAuthVo appComponentAuth) {
appComponentAuthService.saveInfo(appComponentAuth);
return Result.success("添加成功!");
}
/**
* 通过id删除
*
* @return
*/
@OperLog(operModul = "APP组件授权信息管理", operType = "删除", operDesc = "删除APP组件授权信息信息")
@ApiOperation(value = "删除APP组件授权信息信息", notes = "删除APP组件授权信息信息", httpMethod = "POST")
@ApiImplicitParam(name = "id", value = "APP组件授权信息ID", paramType = "body", required = true, dataType = "Integer")
@PostMapping(value = "/delete")
public Result<AppComponentAuth> delete(@ApiIgnore @RequestBody AppComponentAuth appComponentAuth) {
Result<AppComponentAuth> result = new Result<AppComponentAuth>();
AppComponentAuth appComponentAuthEntity = appComponentAuthService.getById(appComponentAuth.getId());
if (appComponentAuthEntity == null) {
result.error500("未找到对应实体");
} else {
boolean ok = appComponentAuthService.removeById(appComponentAuth.getId());
if (ok) {
result.success("删除成功!");
} else {
result.success("操作失败!");
}
}
return result;
}
/**
* 批量删除
*
* @return
*/
@OperLog(operModul = "APP组件授权信息管理", operType = "批量删除", operDesc = "批量删除APP组件授权信息信息")
@ApiOperation(value = "批量删除APP组件授权信息信息", notes = "批量删除APP组件授权信息信息", httpMethod = "POST")
@ApiImplicitParam(name = "ids", value = "APP组件授权信息ID字符串", paramType = "body", required = true, dataType = "String")
@PostMapping(value = "/deleteBatch")
public Result<AppComponentAuth> deleteBatch(@ApiIgnore @RequestBody Map<String, Object> map) {
Result<AppComponentAuth> result = new Result<AppComponentAuth>();
String ids = MapUtils.getString(map, "ids");
if (ids == null || "".equals(ids.trim())) {
result.error500("参数不识别!");
} else {
this.appComponentAuthService.removeByIds(Arrays.asList(ids.split(",")));
result.success("删除成功!");
}
return result;
}
/**
* 通过id查询
*
* @return
*/
@OperLog(operModul = "APP组件授权信息管理", operType = "查询", operDesc = "通过id查询APP组件授权信息信息")
@ApiOperation(value = "通过id查询APP组件授权信息信息", notes = "通过id查询APP组件授权信息信息", httpMethod = "POST")
@ApiImplicitParam(name = "id", value = "APP组件授权信息ID", paramType = "body", required = true, dataType = "Integer")
@PostMapping(value = "/queryById")
public Result<AppComponentAuth> queryById(@ApiIgnore @RequestBody AppComponentAuth appComponentAuthVo) {
Result<AppComponentAuth> result = new Result<AppComponentAuth>();
AppComponentAuth appComponentAuth = appComponentAuthService.getById(appComponentAuthVo.getId());
if (appComponentAuth == null) {
result.error500("未找到对应实体");
} else {
result.setResult(appComponentAuth);
result.setSuccess(true);
}
return result;
}
}

View File

@ -0,0 +1,202 @@
package com.zhgd.xmgl.modules.basicdata.controller;
import com.zhgd.annotation.OperLog;
import com.zhgd.xmgl.util.PageUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.jeecg.common.util.oConvertUtils;
import com.zhgd.xmgl.modules.basicdata.entity.AppComponent;
import com.zhgd.xmgl.modules.basicdata.service.IAppComponentService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import springfox.documentation.annotations.ApiIgnore;
/**
* @Title: Controller
* @Description: APP组件库
* @author pengj
* @date 2025-11-04
* @version V1.0
*/
@RestController
@RequestMapping("/xmgl/appComponent")
@Slf4j
@Api(tags = "APP组件库管理")
public class AppComponentController {
@Autowired
private IAppComponentService appComponentService;
/**
* 分页列表查询
*
* @return
*/
@OperLog(operModul = "APP组件库管理", operType = "分页查询", operDesc = "分页列表查询APP组件库信息")
@ApiOperation(value = " 分页列表查询APP组件库信息", notes = "分页列表查询APP组件库信息", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNo", value = "第几页", paramType = "body", required = true, dataType = "Integer"),
@ApiImplicitParam(name = "pageSize", value = "每页显示条数", paramType = "body", required = true, dataType = "Integer"),
})
@PostMapping(value = "/page")
public Result<IPage<AppComponent>> queryPageList(@ApiIgnore @RequestBody Map<String, Object> map) {
QueryWrapper<AppComponent> queryWrapper = QueryGenerator.initPageQueryWrapper(AppComponent.class, map);
Page<AppComponent> page = PageUtil.getPage(map);
IPage<AppComponent> pageList = appComponentService.page(page, queryWrapper);
return Result.success(pageList);
}
/**
* 列表查询
*
* @param appComponent
* @return
*/
@OperLog(operModul = "APP组件库管理", operType = "列表查询", operDesc = "列表查询APP组件库信息")
@ApiOperation(value = " 列表查询APP组件库信息", notes = "列表查询APP组件库信息", httpMethod = "POST")
@PostMapping(value = "/list")
public Result<List<AppComponent>> queryList(@RequestBody AppComponent appComponent) {
QueryWrapper<AppComponent> queryWrapper = QueryGenerator.initQueryWrapper(appComponent);
List<AppComponent> list = appComponentService.list(queryWrapper);
return Result.success(list);
}
/**
* 添加
*
* @param appComponent
* @return
*/
@OperLog(operModul = "APP组件库管理", operType = "新增", operDesc = "添加APP组件库信息")
@ApiOperation(value = " 添加APP组件库信息", notes = "添加APP组件库信息", httpMethod = "POST")
@PostMapping(value = "/add")
public Result<Object> add(@RequestBody AppComponent appComponent) {
Result<AppComponent> result = new Result<AppComponent>();
appComponentService.save(appComponent);
return Result.success("添加成功!");
}
/**
* 编辑
*
* @param appComponent
* @return
*/
@OperLog(operModul = "APP组件库管理", operType = "修改", operDesc = "编辑APP组件库信息")
@ApiOperation(value = "编辑APP组件库信息", notes = "编辑APP组件库信息", httpMethod = "POST")
@PostMapping(value = "/edit")
public Result<AppComponent> edit(@RequestBody AppComponent appComponent) {
Result<AppComponent> result = new Result<AppComponent>();
AppComponent appComponentEntity = appComponentService.getById(appComponent.getId());
if (appComponentEntity == null) {
result.error500("未找到对应实体");
} else {
boolean ok = appComponentService.updateById(appComponent);
if (ok) {
result.success("修改成功!");
} else {
result.success("操作失败!");
}
}
return result;
}
/**
* 通过id删除
*
* @return
*/
@OperLog(operModul = "APP组件库管理", operType = "删除", operDesc = "删除APP组件库信息")
@ApiOperation(value = "删除APP组件库信息", notes = "删除APP组件库信息", httpMethod = "POST")
@ApiImplicitParam(name = "id", value = "APP组件库ID", paramType = "body", required = true, dataType = "Integer")
@PostMapping(value = "/delete")
public Result<AppComponent> delete(@ApiIgnore @RequestBody AppComponent appComponent) {
Result<AppComponent> result = new Result<AppComponent>();
AppComponent appComponentEntity = appComponentService.getById(appComponent.getId());
if (appComponentEntity == null) {
result.error500("未找到对应实体");
} else {
boolean ok = appComponentService.removeById(appComponent.getId());
if (ok) {
result.success("删除成功!");
} else {
result.success("操作失败!");
}
}
return result;
}
/**
* 批量删除
*
* @return
*/
@OperLog(operModul = "APP组件库管理", operType = "批量删除", operDesc = "批量删除APP组件库信息")
@ApiOperation(value = "批量删除APP组件库信息", notes = "批量删除APP组件库信息", httpMethod = "POST")
@ApiImplicitParam(name = "ids", value = "APP组件库ID字符串", paramType = "body", required = true, dataType = "String")
@PostMapping(value = "/deleteBatch")
public Result<AppComponent> deleteBatch(@ApiIgnore @RequestBody Map<String, Object> map) {
Result<AppComponent> result = new Result<AppComponent>();
String ids = MapUtils.getString(map, "ids");
if (ids == null || "".equals(ids.trim())) {
result.error500("参数不识别!");
} else {
this.appComponentService.removeByIds(Arrays.asList(ids.split(",")));
result.success("删除成功!");
}
return result;
}
/**
* 通过id查询
*
* @return
*/
@OperLog(operModul = "APP组件库管理", operType = "查询", operDesc = "通过id查询APP组件库信息")
@ApiOperation(value = "通过id查询APP组件库信息", notes = "通过id查询APP组件库信息", httpMethod = "POST")
@ApiImplicitParam(name = "id", value = "APP组件库ID", paramType = "body", required = true, dataType = "Integer")
@PostMapping(value = "/queryById")
public Result<AppComponent> queryById(@ApiIgnore @RequestBody AppComponent appComponentVo) {
Result<AppComponent> result = new Result<AppComponent>();
AppComponent appComponent = appComponentService.getById(appComponentVo.getId());
if (appComponent == null) {
result.error500("未找到对应实体");
} else {
result.setResult(appComponent);
result.setSuccess(true);
}
return result;
}
}

View File

@ -0,0 +1,114 @@
package com.zhgd.xmgl.modules.basicdata.controller;
import com.zhgd.annotation.OperLog;
import com.zhgd.xmgl.modules.basicdata.entity.AppComponentAuth;
import com.zhgd.xmgl.modules.basicdata.entity.dto.AppComponentAuthDto;
import com.zhgd.xmgl.modules.basicdata.entity.vo.AppComponentAuthVo;
import com.zhgd.xmgl.util.PageUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.jeecg.common.util.oConvertUtils;
import com.zhgd.xmgl.modules.basicdata.entity.AppComponentUser;
import com.zhgd.xmgl.modules.basicdata.service.IAppComponentUserService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import springfox.documentation.annotations.ApiIgnore;
/**
* @Title: Controller
* @Description: 用户自定义组件授权
* @author pengj
* @date 2025-11-04
* @version V1.0
*/
@RestController
@RequestMapping("/xmgl/appComponentUser")
@Slf4j
@Api(tags = "用户自定义组件授权管理")
public class AppComponentUserController {
@Autowired
private IAppComponentUserService appComponentUserService;
/**
* 列表查询
*
* @param appComponentUser
* @return
*/
@OperLog(operModul = "用户自定义组件授权管理", operType = "列表查询", operDesc = "获取当前用户的组件列表")
@ApiOperation(value = "获取当前用户的组件列表", notes = "获取当前用户的组件列表", httpMethod = "POST")
@PostMapping(value = "/getMyComponentList")
public Result<List<AppComponentAuthDto>> getMyComponentList(@RequestBody AppComponentUser appComponentUser) {
return Result.success(appComponentUserService.getMyComponentList(appComponentUser));
}
/**
* 通过id删除
* @return
*/
@OperLog(operModul = "用户自定义组件授权管理", operType = "删除", operDesc = "删除用户自定义组件授权信息")
@ApiOperation(value = "删除用户自定义组件授权信息", notes = "删除用户自定义组件授权信息" , httpMethod="POST")
@ApiImplicitParam(name = "id", value = "用户自定义组件授权ID", paramType = "body", required = true, dataType = "Integer")
@PostMapping(value = "/delete")
public Result<AppComponentUser> delete(@ApiIgnore @RequestBody AppComponentUser appComponentUser) {
Result<AppComponentUser> result = new Result<AppComponentUser>();
AppComponentUser appComponentUserEntity = appComponentUserService.getById(appComponentUser.getId());
if(appComponentUserEntity == null) {
result.error500("未找到对应实体");
}else {
boolean ok = appComponentUserService.removeById(appComponentUser.getId());
if(ok) {
result.success("删除成功!");
} else {
result.success("操作失败!");
}
}
return result;
}
/**
* 添加
*
* @param appComponentUser
* @return
*/
@OperLog(operModul = "用户自定义组件授权管理", operType = "新增", operDesc = "添加用户自定义组件授权信息")
@ApiOperation(value = " 添加用户自定义组件授权信息", notes = "添加用户自定义组件授权信息", httpMethod = "POST")
@PostMapping(value = "/add")
public Result<Object> add(@RequestBody AppComponentUser appComponentUser) {
appComponentUserService.saveInfo(appComponentUser);
return Result.success("添加成功!");
}
}

View File

@ -0,0 +1,92 @@
package com.zhgd.xmgl.modules.basicdata.controller;
import com.zhgd.annotation.OperLog;
import com.zhgd.xmgl.modules.basicdata.entity.BaseModule;
import com.zhgd.xmgl.util.PageUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.jeecg.common.util.oConvertUtils;
import com.zhgd.xmgl.modules.basicdata.entity.AppModuleUser;
import com.zhgd.xmgl.modules.basicdata.service.IAppModuleUserService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import springfox.documentation.annotations.ApiIgnore;
/**
* @Title: Controller
* @Description: APP常用应用
* @author pengj
* @date 2025-11-05
* @version V1.0
*/
@RestController
@RequestMapping("/xmgl/appModuleUser")
@Slf4j
@Api(tags = "APP常用应用管理")
public class AppModuleUserController {
@Autowired
private IAppModuleUserService appModuleUserService;
/**
* 列表查询
*
* @return
*/
@OperLog(operModul = "APP常用应用管理", operType = "列表查询", operDesc = "获取当前账号的APP常用应用信息")
@ApiOperation(value = " 获取当前账号的APP常用应用信息", notes = "获取当前账号的APP常用应用信息", httpMethod = "POST")
@GetMapping(value = "/list")
public Result<List<BaseModule>> queryList() {
return Result.success(appModuleUserService.queryList());
}
/**
* 编辑
* @param
* @return
*/
@OperLog(operModul = "权限管理",operType = "编辑用户查看的模块",operDesc = "编辑用户查看的模块")
@ApiOperation(value = "编辑模块-用户关联信息", notes = "编辑模块-用户关联信息" , httpMethod="POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "userId", value = "人员账号Id", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "moduleIdStr", value = "模块ID,多个时逗号分割", paramType = "body", required = true, dataType = "String"),
})
@PostMapping(value = "/edit")
public Result edit(@RequestBody Map<String, Object> map) {
appModuleUserService.editBaseModuleUser(map);
return Result.ok();
}
}

View File

@ -8,6 +8,7 @@ import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.jeecg.common.mybatis.EntityMap;
import com.zhgd.xmgl.modules.basicdata.entity.Company;
import com.zhgd.xmgl.modules.basicdata.entity.SystemUser;
import com.zhgd.xmgl.modules.basicdata.entity.vo.CompanyProjectTreeVo;
import com.zhgd.xmgl.modules.basicdata.entity.vo.GetOrgSnListVo;
import com.zhgd.xmgl.modules.basicdata.service.ICompanyService;
import com.zhgd.xmgl.modules.basicdata.service.ISystemUserService;
@ -20,10 +21,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
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 org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.util.HashMap;
@ -183,6 +181,13 @@ public class CompanyController {
}
@ApiOperation(value = "获取企业项目树", notes = "获取企业项目树")
@GetMapping("/getCompanyProjectTree")
public Result<List<CompanyProjectTreeVo>> getCompanyProjectTree() {
return Result.success(companyService.getCompanyProjectTree());
}
/**
* 接口新版废弃
*
@ -236,6 +241,7 @@ public class CompanyController {
@ApiImplicitParam(name = "standardType", value = "是否查询标养室0否1是", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "projectType", value = "是否展示0否1是", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "showVideoNum", value = "是否展示(在线)监控数量0否1是", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "bulidStatus", value = "项目状态", paramType = "body", required = true, dataType = "String"),
})
@PostMapping("/getComapnyStatisticsList")
@PreAuthorize("@perm.hasSnAccess(#map['sn'])")
@ -243,6 +249,20 @@ public class CompanyController {
return Result.success(companyService.getCompanyStatisticsList(map));
}
@ApiOperation(value = "APP统计企业下项目各项目统计", notes = "APP统计企业下项目各项目统计")
@ApiImplicitParams({
@ApiImplicitParam(name = "sn", value = "公司sn", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "videoType", value = "查询类型0无视频1有视频", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "standardType", value = "是否查询标养室0否1是", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "projectType", value = "是否展示0否1是", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "bulidStatus", value = "项目状态", paramType = "body", required = true, dataType = "String"),
})
@PostMapping("/getAppComapnyStatisticsList")
@PreAuthorize("@perm.hasSnAccess(#map['sn'])")
public Result<Map<String, Object>> getAppComapnyStatisticsList(@RequestBody Map<String, Object> map) {
return Result.success(companyService.getAppCompanyStatisticsList(map));
}
@ApiOperation(value = "供应商选择审批组织(所有企业)", notes = "供应商选择审批组织(所有企业)")
@PostMapping("/getComapnyStatisticsListBySupplier")
public Result<Map<String, Object>> getComapnyStatisticsListBySupplier(@RequestBody Map<String, Object> map) {

View File

@ -3,12 +3,17 @@ package com.zhgd.xmgl.modules.basicdata.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.xuyanwu.spring.file.storage.FileInfo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dahuatech.hutool.json.JSONObject;
import com.dahuatech.icc.model.event.eventSubcribe.ReceiveMsgVO;
import com.dahuatech.icc.oauth.model.v202010.GeneralResponse;
import com.gexin.fastjson.JSON;
import com.gexin.fastjson.TypeReference;
import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.xmgl.async.AsyncAiAnalyse;
import com.zhgd.xmgl.async.AsyncProjectWork;
import com.zhgd.xmgl.call.IccCarCall;
import com.zhgd.xmgl.call.IccWorkerCall;
@ -17,12 +22,20 @@ import com.zhgd.xmgl.call.api.WorkerManufacturer;
import com.zhgd.xmgl.call.factory.CarManufacturerFactory;
import com.zhgd.xmgl.call.factory.WorkerManufacturerFactory;
import com.zhgd.xmgl.call.util.IccHttpUtil;
import com.zhgd.xmgl.constant.Cts;
import com.zhgd.xmgl.modules.car.entity.CarCamera;
import com.zhgd.xmgl.modules.car.entity.CarInfo;
import com.zhgd.xmgl.modules.car.entity.CarPassRecord;
import com.zhgd.xmgl.modules.car.service.ICarCameraService;
import com.zhgd.xmgl.modules.car.service.impl.CarInfoServiceImpl;
import com.zhgd.xmgl.modules.car.service.impl.CarPassRecordServiceImpl;
import com.zhgd.xmgl.modules.project.entity.ProjectUfaceConfig;
import com.zhgd.xmgl.modules.project.mapper.ProjectUfaceConfigMapper;
import com.zhgd.xmgl.modules.video.entity.AiAnalyseHardWareAlarmRecord;
import com.zhgd.xmgl.modules.video.entity.AiAnalyseHardWareRecord;
import com.zhgd.xmgl.modules.video.entity.VideoItem;
import com.zhgd.xmgl.modules.video.mapper.AiAnalyseHardWareAlarmRecordMapper;
import com.zhgd.xmgl.modules.video.mapper.AiAnalyseHardWareRecordMapper;
import com.zhgd.xmgl.modules.worker.entity.UfaceDev;
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
import com.zhgd.xmgl.modules.worker.service.IUfaceDevService;
@ -32,9 +45,13 @@ import com.zhgd.xmgl.modules.worker.service.impl.WorkerAttendanceServiceImpl;
import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync;
import com.zhgd.xmgl.modules.xz.service.impl.XzHikvisionSyncServiceImpl;
import com.zhgd.xmgl.util.AsyncTaskUtil;
import com.zhgd.xmgl.util.MapUtil;
import com.zhgd.xmgl.util.MessageUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Lazy;
@ -93,6 +110,21 @@ public class ExternalCallBackController {
@Autowired
@Lazy
private IWorkerAttendanceService workerAttendanceService;
@Lazy
@Resource
private AiAnalyseHardWareAlarmRecordMapper aiAnalyseHardWareAlarmRecordMapper;
@Lazy
@Resource
private AiAnalyseHardWareRecordMapper aiAnalyseHardWareRecordMapper;
@Lazy
@Autowired
private AsyncAiAnalyse asyncAiAnalyse;
@Lazy
@Autowired
private ProjectUfaceConfigMapper projectUfaceConfigMapper;
@ApiOperation(value = "icc订阅回调接口", notes = "icc订阅回调接口", httpMethod = "POST")
@PostMapping(value = "/icc/subscribeCall")
@ -124,6 +156,14 @@ public class ExternalCallBackController {
log.info("实时刷卡记录推送事件:{}", param);
saveWorkerAttendance(alarmRecordEventExt);
}
} else {
JSONObject info = receiveMsgVO.getInfo();
List<String> alarms = new ArrayList<>();
if (alarms.contains(MapUtils.getString(info, "alarmType"))) {
//AI算法推送事件
log.info("AI算法推送事件:{}", param);
saveAIRecord(info);
}
}
}
JSONObject jsonObjectRt = new JSONObject();
@ -132,6 +172,41 @@ public class ExternalCallBackController {
return jsonObjectRt;
}
/**
* 保存icc门禁记录
*
* @param obj
*/
private void saveAIRecord(JSONObject obj) {
log.info("调用AiAnalyseHardWareAlarmRecordServiceImpl#saveAiAnalyseHardWareAlarmRecord方法参数为{}", obj);
QueryWrapper<AiAnalyseHardWareRecord> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(AiAnalyseHardWareRecord::getHardwareId, MapUtils.getString(obj, "deviceCode"));
AiAnalyseHardWareRecord aiAnalyseHardWareRecord = aiAnalyseHardWareRecordMapper.selectOne(queryWrapper);
if (aiAnalyseHardWareRecord == null) {
throw new OpenAlertException(MessageUtil.get("EquipmentNumIncorrectErr"));
}
AiAnalyseHardWareAlarmRecord aiAnalyseHardWareAlarmRecord = new AiAnalyseHardWareAlarmRecord();
aiAnalyseHardWareAlarmRecord.setCreateTime(MapUtils.getString(obj, "alarmDate"));
aiAnalyseHardWareAlarmRecord.setAlarmType(MapUtils.getInteger(obj, "alarmType"));
aiAnalyseHardWareAlarmRecord.setHardwareId(aiAnalyseHardWareRecord.getHardwareId());
aiAnalyseHardWareAlarmRecord.setHardwareName(aiAnalyseHardWareRecord.getHardwareName());
aiAnalyseHardWareAlarmRecord.setLocation(MapUtils.getString(obj, "deviceName"));
MapUtils.getString(obj, "deviceName");
aiAnalyseHardWareAlarmRecord.setProjectSn(aiAnalyseHardWareRecord.getProjectSn());
aiAnalyseHardWareAlarmRecord.setStatus(1);
try {
ProjectUfaceConfig projectUfaceConfig = projectUfaceConfigMapper.selectOne(Wrappers.<ProjectUfaceConfig>lambdaQuery()
.eq(ProjectUfaceConfig::getProjectSn, aiAnalyseHardWareRecord.getProjectSn()));
File file = IccHttpUtil.downloadOssFile(MapUtils.getString(obj, "alarmPicture"), projectUfaceConfig);
aiAnalyseHardWareAlarmRecord.setImageUrl(Optional.ofNullable(file).map(File::getName).orElse(null));
} catch (Exception e) {
log.error("icc回调AI预警下载图片失败", e);
}
aiAnalyseHardWareAlarmRecordMapper.insert(aiAnalyseHardWareAlarmRecord);
//将数据通过MQTT转发到前台
asyncAiAnalyse.sendAiAnalyse(aiAnalyseHardWareAlarmRecord, Cts.PROJECT_LEVEL);
}
/**
* 保存icc门禁记录
*

View File

@ -190,6 +190,15 @@ public class SystemUserController {
return Result.success(systemUserService.getProjectChildernSystemUserList(map));
}
@ApiOperation(value = "查找账号列表根据sn", notes = "查找账号列表根据sn", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "sn", required = true, value = "sn", paramType = "body"),
})
@PostMapping(value = "/getSystemUserList")
public Result<List<SystemUser>> getSystemUserList(@RequestBody Map<String, Object> map) {
return Result.success(systemUserService.getSystemUserList(map));
}
@OperLog(operModul = "账号管理", operType = "分页查找项目子账号列表", operDesc = "分页查找项目子账号列表")
@ApiOperation(value = "分页查找项目子账号列表", notes = "分页查找项目子账号列表", httpMethod = "POST")
@ApiImplicitParams({

View File

@ -0,0 +1,74 @@
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: APP组件库
* @author pengj
* @date 2025-11-04
* @version V1.0
*/
@Data
@TableName("app_component")
@ApiModel(value = "AppComponent实体类", description = "AppComponent")
public class AppComponent implements Serializable {
private static final long serialVersionUID = 1L;
/**
* APP组件授权ID
*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "APP组件ID")
private Long id;
/**
* 组件名称
*/
@Excel(name = "组件名称", width = 15)
@ApiModelProperty(value = "组件名称")
private String name;
/**
* 组件标识
*/
@Excel(name = "组件标识", width = 15)
@ApiModelProperty(value = "组件标识")
private String code;
/**
* 描述
*/
@Excel(name = "描述", width = 15)
@ApiModelProperty(value = "描述")
private String remark;
/**
* 组件类型(1:企业;2:项目)
*/
@Excel(name = "组件类型(1:企业;2:项目)", width = 15)
@ApiModelProperty(value = "组件类型(1:企业;2:项目)")
private String type;
/**
* 创建时间
*/
@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 Date createTime;
/**
* 更新时间
*/
@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 Date updateTime;
}

View File

@ -0,0 +1,86 @@
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: APP组件授权信息
* @author pengj
* @date 2025-11-04
* @version V1.0
*/
@Data
@TableName("app_component_auth")
@ApiModel(value = "AppComponentAuth实体类", description = "AppComponentAuth")
public class AppComponentAuth implements Serializable {
private static final long serialVersionUID = 1L;
/**
* APP组件ID
*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "APP组件授权ID")
private Long id;
/**
* 组件自定义名称
*/
@Excel(name = "组件自定义名称", width = 15)
@ApiModelProperty(value = "组件自定义名称")
private String customizeName;
/**
* 组件ID
*/
@Excel(name = "组件ID", width = 15)
@ApiModelProperty(value = "组件ID")
private Long componentId;
/**
* 排序
*/
@Excel(name = "排序", width = 15)
@ApiModelProperty(value = "排序")
private Integer sort;
/**
* 企业/项目SN
*/
@Excel(name = "企业/项目SN", width = 15)
@ApiModelProperty(value = "企业/项目SN")
private String sn;
/**
* 类型(1:企业;2:项目)
*/
@Excel(name = "类型(1:企业;2:项目)", width = 15)
@ApiModelProperty(value = "类型(1:企业;2:项目)")
private Integer type;
/**
* 授权类型(1:企业;2:项目)
*/
@Excel(name = "授权类型(1:企业;2:项目)", width = 15)
@ApiModelProperty(value = "授权类型(1:企业;2:项目)")
private Integer authType;
/**
* 创建时间
*/
@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 Date createTime;
/**
* 更新时间
*/
@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 Date updateTime;
}

View File

@ -0,0 +1,60 @@
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;
import org.jeecgframework.poi.excel.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* @Description: 用户自定义组件授权
* @author pengj
* @date 2025-11-04
* @version V1.0
*/
@Data
@TableName("app_component_user")
@ApiModel(value = "appComponentUser实体类", description = "appComponentUser")
public class AppComponentUser implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 用户APP组件授权ID
*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "用户APP组件授权ID")
private Long id;
/**
* 用户ID
*/
@Excel(name = "用户ID", width = 15)
@ApiModelProperty(value = "用户ID")
private Long userId;
/**
* 企业/项目SN
*/
@Excel(name = "企业/项目SN", width = 15)
@ApiModelProperty(value = "企业/项目SN")
private String sn;
/**
* 授权类型(1:企业;2:项目)
*/
@Excel(name = "授权类型(1:企业;2:项目)", width = 15)
@ApiModelProperty(value = "授权类型(1:企业;2:项目)")
private Integer type;
/**
* 组件ID(多个逗号隔开)
*/
@Excel(name = "组件ID(多个逗号隔开)", width = 15)
@ApiModelProperty(value = "组件ID(多个逗号隔开)")
private String componentId;
@TableField(exist = false)
@ApiModelProperty(value = "当无个人组件时是否返回默认全部")
private Integer defaultFlag;
}

View File

@ -0,0 +1,46 @@
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: APP常用应用
* @author pengj
* @date 2025-11-05
* @version V1.0
*/
@Data
@TableName("app_module_user")
@ApiModel(value = "AppModuleUser实体类", description = "AppModuleUser")
public class AppModuleUser implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "id")
private Long id;
/**
* 人员ID
*/
@Excel(name = "人员ID", width = 15)
@ApiModelProperty(value = "人员ID")
private Long userId;
/**
* 模块ID
*/
@Excel(name = "模块ID", width = 15)
@ApiModelProperty(value = "模块ID")
private Long moduleId;
}

View File

@ -95,6 +95,9 @@ public class BaseModule implements Serializable {
@ApiModelProperty(value = "排序下标")
private java.lang.String sortIndex;
@ApiModelProperty(value = "APP的logo路径")
private java.lang.String appLogo;
@TableField(exist = false)
@ApiModelProperty(value = "模块所属菜单")
private List<EntityMap> menuList;

View File

@ -0,0 +1,22 @@
package com.zhgd.xmgl.modules.basicdata.entity.dto;
import com.zhgd.xmgl.modules.basicdata.entity.AppComponentAuth;
import com.zhgd.xmgl.modules.basicdata.entity.vo.AppComponentAuthVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.util.List;
@Data
public class AppComponentAuthDto extends AppComponentAuth {
@ApiModelProperty(value = "组件名称")
private String name;
@ApiModelProperty(value = "组件标识")
private String code;
@ApiModelProperty(value = "描述")
private String remark;
}

View File

@ -0,0 +1,25 @@
package com.zhgd.xmgl.modules.basicdata.entity.vo;
import com.zhgd.xmgl.modules.basicdata.entity.AppComponent;
import com.zhgd.xmgl.modules.basicdata.entity.AppComponentAuth;
import com.zhgd.xmgl.modules.basicdata.entity.dto.ScreenAuthDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class AppComponentAuthVo {
@ApiModelProperty(value = "类型(1企业;2项目)")
private Integer type;
@ApiModelProperty(value = "授权类型(1:企业;2:项目)")
private Integer authType;
@ApiModelProperty(value = "对应唯一标识SN")
private String uniqueFlag;
@ApiModelProperty(value = "组件信息")
List<AppComponentAuth> componentAuth;
}

View File

@ -0,0 +1,31 @@
package com.zhgd.xmgl.modules.basicdata.entity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class CompanyProjectTreeVo {
@ApiModelProperty(value = "主键ID")
private Long id;
@ApiModelProperty(value = "父ID")
private Long parentId;
@ApiModelProperty(value = "唯一标识")
private String sn;
@ApiModelProperty(value = "1总部2区域3城市4项目部, 5项目")
private Integer type;
@ApiModelProperty(value = "名称")
private String name;
@ApiModelProperty(value = "顶级SN")
private String headquartersSn;
@ApiModelProperty(value = "子级")
private List<CompanyProjectTreeVo> childrenList;
}

View File

@ -0,0 +1,23 @@
package com.zhgd.xmgl.modules.basicdata.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.zhgd.xmgl.modules.basicdata.entity.dto.AppComponentAuthDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.zhgd.xmgl.modules.basicdata.entity.AppComponentAuth;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: APP组件授权信息
* @author pengj
* @date 2025-11-04
* @version V1.0
*/
@Mapper
public interface AppComponentAuthMapper extends BaseMapper<AppComponentAuth> {
List<AppComponentAuthDto> getList(@Param(Constants.WRAPPER) Wrapper<AppComponentAuth> wrapper);
}

View File

@ -0,0 +1,19 @@
package com.zhgd.xmgl.modules.basicdata.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.zhgd.xmgl.modules.basicdata.entity.AppComponent;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: APP组件库
* @author pengj
* @date 2025-11-04
* @version V1.0
*/
@Mapper
public interface AppComponentMapper extends BaseMapper<AppComponent> {
}

View File

@ -0,0 +1,16 @@
package com.zhgd.xmgl.modules.basicdata.mapper;
import org.apache.ibatis.annotations.Mapper;
import com.zhgd.xmgl.modules.basicdata.entity.AppComponentUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 用户自定义组件授权
* @author pengj
* @date 2025-11-04
* @version V1.0
*/
@Mapper
public interface AppComponentUserMapper extends BaseMapper<AppComponentUser> {
}

View File

@ -0,0 +1,19 @@
package com.zhgd.xmgl.modules.basicdata.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.zhgd.xmgl.modules.basicdata.entity.AppModuleUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: APP常用应用
* @author pengj
* @date 2025-11-05
* @version V1.0
*/
@Mapper
public interface AppModuleUserMapper extends BaseMapper<AppModuleUser> {
}

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wflow.bean.vo.OrgTreeVo;
import com.zhgd.jeecg.common.mybatis.EntityMap;
import com.zhgd.xmgl.modules.basicdata.entity.Company;
import com.zhgd.xmgl.modules.basicdata.entity.SystemUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@ -30,6 +31,9 @@ public interface CompanyMapper extends BaseMapper<Company> {
*/
List<EntityMap> selectCompanyPage(Page<EntityMap> page, @Param("param") Map<String, Object> map);
List<SystemUser> getSystemUserList(Map<String, Object> map);
/**
* 分层获取一级二级企业列表
*

View File

@ -0,0 +1,10 @@
<?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.AppComponentAuthMapper">
<select id="getList" resultType="com.zhgd.xmgl.modules.basicdata.entity.dto.AppComponentAuthDto">
select a.*, c.name, c.code, c.remark from app_component_auth a
left join app_component c on a.component_id = c.id
${ew.customSqlSegment}
</select>
</mapper>

View File

@ -0,0 +1,5 @@
<?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.AppComponentMapper">
</mapper>

View File

@ -0,0 +1,5 @@
<?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.AppComponentUserMapper">
</mapper>

View File

@ -0,0 +1,5 @@
<?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.AppModuleUserMapper">
</mapper>

View File

@ -49,6 +49,44 @@
AND a.headquarters_sn = #{headquartersSn}
</select>
<select id="getSystemUserList" resultType="com.zhgd.xmgl.modules.basicdata.entity.SystemUser">
SELECT su.*
FROM system_user su
WHERE
FIND_IN_SET(
su.sn,
(
SELECT CONCAT_WS(
',',
group_concat(DISTINCT a.project_sn),
group_concat(DISTINCT cp.company_sn),
group_concat(DISTINCT b.company_sn),
group_concat(DISTINCT f.company_sn),
group_concat(DISTINCT f.headquarters_sn))
FROM project a
INNER JOIN company cp ON a.company_sn = cp.company_sn
INNER JOIN company b ON cp.parent_id = b.company_id
LEFT JOIN company f ON b.parent_id = f.company_id
<where>
<if test="companyType == '1'.toString()">
and f.headquarters_sn = #{sn}
</if>
<if test="companyType == '2'.toString()">
and f.company_sn = #{sn}
</if>
<if test="companyType == '3'.toString()">
and b.company_sn = #{sn}
</if>
<if test="companyType == '4'.toString()">
and a.project_sn = #{sn}
</if>
<if test="companyType == '5'.toString()">
and cp.company_sn = #{sn}
</if>
</where>
))
</select>
<select id="getChildCompanyList" resultType="com.zhgd.jeecg.common.mybatis.EntityMap" parameterType="map">
SELECT a.*, a.company_name `name`, b.range_addr parent_range_addr
FROM company a

View File

@ -0,0 +1,25 @@
package com.zhgd.xmgl.modules.basicdata.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.zhgd.xmgl.modules.basicdata.entity.AppComponentAuth;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhgd.xmgl.modules.basicdata.entity.dto.AppComponentAuthDto;
import com.zhgd.xmgl.modules.basicdata.entity.vo.AppComponentAuthVo;
import com.zhgd.xmgl.modules.basicdata.entity.vo.ScreenAuthVo;
import java.util.List;
/**
* @Description: APP组件授权信息
* @author pengj
* @date 2025-11-04
* @version V1.0
*/
public interface IAppComponentAuthService extends IService<AppComponentAuth> {
boolean saveInfo(AppComponentAuthVo appComponentAuthVo);
List<AppComponentAuthDto> getList(Wrapper<AppComponentAuth> wrapper);
}

View File

@ -0,0 +1,14 @@
package com.zhgd.xmgl.modules.basicdata.service;
import com.zhgd.xmgl.modules.basicdata.entity.AppComponent;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: APP组件库
* @author pengj
* @date 2025-11-04
* @version V1.0
*/
public interface IAppComponentService extends IService<AppComponent> {
}

View File

@ -0,0 +1,20 @@
package com.zhgd.xmgl.modules.basicdata.service;
import com.zhgd.xmgl.modules.basicdata.entity.AppComponentUser;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhgd.xmgl.modules.basicdata.entity.dto.AppComponentAuthDto;
import java.util.List;
/**
* @Description: 用户自定义组件授权
* @author pengj
* @date 2025-11-04
* @version V1.0
*/
public interface IAppComponentUserService extends IService<AppComponentUser> {
void saveInfo(AppComponentUser appComponentUser);
List<AppComponentAuthDto> getMyComponentList(AppComponentUser appComponentUser);
}

View File

@ -0,0 +1,26 @@
package com.zhgd.xmgl.modules.basicdata.service;
import com.zhgd.xmgl.modules.basicdata.entity.AppModuleUser;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhgd.xmgl.modules.basicdata.entity.BaseModule;
import java.util.List;
import java.util.Map;
/**
* @Description: APP常用应用
* @author pengj
* @date 2025-11-05
* @version V1.0
*/
public interface IAppModuleUserService extends IService<AppModuleUser> {
/**
* 编辑模块-用户关联信息
*
* @param map
*/
void editBaseModuleUser(Map<String, Object> map);
List<BaseModule> queryList();
}

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhgd.jeecg.common.mybatis.EntityMap;
import com.zhgd.xmgl.modules.basicdata.entity.Company;
import com.zhgd.xmgl.modules.basicdata.entity.vo.CompanyProjectTreeVo;
import com.zhgd.xmgl.modules.basicdata.entity.vo.GetOrgSnListVo;
import java.util.HashMap;
@ -47,6 +48,8 @@ public interface ICompanyService extends IService<Company> {
*/
List<EntityMap> getLayerCompanyList(Map<String, Object> map);
List<CompanyProjectTreeVo> getCompanyProjectTree();
/**
*分层获取一级二级企业以及项目账号
* @param map
@ -87,6 +90,13 @@ public interface ICompanyService extends IService<Company> {
*/
Map<String, Object> getCompanyStatisticsList(Map<String, Object> map);
/**
*APP统计企业下项目各项目统计
* @param map
* @return
*/
Map<String, Object> getAppCompanyStatisticsList(Map<String, Object> map);
/**
*供应商选择审批组织所有企业
* @param map

View File

@ -390,4 +390,6 @@ public interface ISystemUserService extends IService<SystemUser> {
Map<String, Object> verifyLogin(Map<String, Object> map);
List<Long> getCompanyUserIdsByProjectSn(String projectSn);
List<SystemUser> getSystemUserList(Map<String, Object> map);
}

View File

@ -0,0 +1,43 @@
package com.zhgd.xmgl.modules.basicdata.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zhgd.xmgl.modules.basicdata.entity.AppComponentAuth;
import com.zhgd.xmgl.modules.basicdata.entity.dto.AppComponentAuthDto;
import com.zhgd.xmgl.modules.basicdata.entity.vo.AppComponentAuthVo;
import com.zhgd.xmgl.modules.basicdata.entity.vo.ScreenAuthVo;
import com.zhgd.xmgl.modules.basicdata.mapper.AppComponentAuthMapper;
import com.zhgd.xmgl.modules.basicdata.service.IAppComponentAuthService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.Date;
import java.util.List;
/**
* @Description: APP组件授权信息
* @author pengj
* @date 2025-11-04
* @version V1.0
*/
@Service
public class AppComponentAuthServiceImpl extends ServiceImpl<AppComponentAuthMapper, AppComponentAuth> implements IAppComponentAuthService {
@Override
public boolean saveInfo(AppComponentAuthVo appComponentAuthVo) {
this.remove(Wrappers.<AppComponentAuth>lambdaQuery()
.eq(AppComponentAuth::getType, appComponentAuthVo.getType())
.eq(AppComponentAuth::getAuthType, appComponentAuthVo.getAuthType())
.eq(AppComponentAuth::getSn, appComponentAuthVo.getUniqueFlag()));
for (AppComponentAuth appComponentAuth : appComponentAuthVo.getComponentAuth()) {
appComponentAuth.setCreateTime(new Date());
}
return this.saveBatch(appComponentAuthVo.getComponentAuth());
}
@Override
public List<AppComponentAuthDto> getList(Wrapper<AppComponentAuth> wrapper) {
return baseMapper.getList(wrapper);
}
}

View File

@ -0,0 +1,19 @@
package com.zhgd.xmgl.modules.basicdata.service.impl;
import com.zhgd.xmgl.modules.basicdata.entity.AppComponent;
import com.zhgd.xmgl.modules.basicdata.mapper.AppComponentMapper;
import com.zhgd.xmgl.modules.basicdata.service.IAppComponentService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: APP组件库
* @author pengj
* @date 2025-11-04
* @version V1.0
*/
@Service
public class AppComponentServiceImpl extends ServiceImpl<AppComponentMapper, AppComponent> implements IAppComponentService {
}

View File

@ -0,0 +1,103 @@
package com.zhgd.xmgl.modules.basicdata.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.xmgl.modules.basicdata.entity.AppComponentAuth;
import com.zhgd.xmgl.modules.basicdata.entity.AppComponentUser;
import com.zhgd.xmgl.modules.basicdata.entity.Company;
import com.zhgd.xmgl.modules.basicdata.entity.dto.AppComponentAuthDto;
import com.zhgd.xmgl.modules.basicdata.mapper.AppComponentUserMapper;
import com.zhgd.xmgl.modules.basicdata.service.IAppComponentAuthService;
import com.zhgd.xmgl.modules.basicdata.service.IAppComponentUserService;
import com.zhgd.xmgl.modules.basicdata.service.ICompanyService;
import com.zhgd.xmgl.modules.project.entity.vo.ProjectInfoExtVo;
import com.zhgd.xmgl.modules.project.service.IProjectService;
import com.zhgd.xmgl.security.util.SecurityUtils;
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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.*;
/**
* @Description: 用户自定义组件授权
* @author pengj
* @date 2025-11-04
* @version V1.0
*/
@Service
public class AppComponentUserServiceImpl extends ServiceImpl<AppComponentUserMapper, AppComponentUser> implements IAppComponentUserService {
@Autowired
private IAppComponentAuthService appComponentAuthService;
@Autowired
private IProjectService projectService;
@Autowired
private ICompanyService companyService;
@Override
public void saveInfo(AppComponentUser appComponentUser) {
this.remove(Wrappers.<AppComponentUser>lambdaQuery()
.eq(AppComponentUser::getUserId, SecurityUtils.getUser().getUserId())
.eq(AppComponentUser::getType, appComponentUser.getType())
.eq(AppComponentUser::getSn, appComponentUser.getSn()));
appComponentUser.setUserId(SecurityUtils.getUser().getUserId());
this.save(appComponentUser);
}
@Override
public List<AppComponentAuthDto> getMyComponentList(AppComponentUser appComponentUser) {
AppComponentUser componentUser = this.getOne(Wrappers.<AppComponentUser>lambdaQuery()
.eq(AppComponentUser::getUserId, SecurityUtils.getUser().getUserId())
.eq(AppComponentUser::getType, appComponentUser.getType())
.eq(AppComponentUser::getSn, appComponentUser.getSn()));
Map<String, Object> map = new HashMap<>();
map.put("sn", appComponentUser.getSn());
map.put("type", SecurityUtils.getUser().getAccountType() >= 5 ? 2 : 1);
map.put("authType", appComponentUser.getType());
QueryWrapper<AppComponentAuth> queryWrapper = QueryGenerator.initQueryWrapper(AppComponentAuth.class, map, "a.");
if (componentUser != null && StringUtils.isNotBlank(componentUser.getComponentId())) {
queryWrapper.in("a.component_id", new ArrayList<>(Arrays.asList(componentUser.getComponentId().split(","))));
queryWrapper.last("ORDER BY FIELD(a.component_id, " + componentUser.getComponentId() + ")");
} else {
if (appComponentUser.getDefaultFlag() != null && appComponentUser.getDefaultFlag() == 1) {
queryWrapper.orderByAsc("a.sort");
} else {
return new ArrayList<>();
}
}
List<AppComponentAuthDto> list = appComponentAuthService.getList(queryWrapper);
if (list.size() == 0) {
if (appComponentUser.getType() == 1) {
Company company = companyService.getOne(Wrappers.<Company>lambdaQuery().eq(Company::getCompanySn, appComponentUser.getSn()));
map.put("sn", company.getHeadquartersSn());
} else {
ProjectInfoExtVo projectInfoBySn = projectService.getProjectInfoBySn(appComponentUser.getSn());
if (projectInfoBySn != null) {
Company company = companyService.getOne(Wrappers.<Company>lambdaQuery().eq(Company::getCompanySn, projectInfoBySn.getCompanySn()));
map.put("sn", company.getHeadquartersSn());
map.put("type", 1);
}
}
queryWrapper = QueryGenerator.initQueryWrapper(AppComponentAuth.class, map, "a.");
if (componentUser != null && StringUtils.isNotBlank(componentUser.getComponentId())) {
queryWrapper.in("a.component_id", new ArrayList<>(Arrays.asList(componentUser.getComponentId().split(","))));
queryWrapper.last("ORDER BY FIELD(a.component_id, " + componentUser.getComponentId() + ")");
} else {
if (appComponentUser.getDefaultFlag() != null && appComponentUser.getDefaultFlag() == 1) {
queryWrapper.orderByAsc("a.sort");
} else {
return new ArrayList<>();
}
}
list = appComponentAuthService.getList(queryWrapper);
}
return list;
}
}

View File

@ -0,0 +1,65 @@
package com.zhgd.xmgl.modules.basicdata.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zhgd.xmgl.constant.Cts;
import com.zhgd.xmgl.modules.basicdata.entity.AppModuleUser;
import com.zhgd.xmgl.modules.basicdata.entity.BaseModule;
import com.zhgd.xmgl.modules.basicdata.entity.BaseModuleUser;
import com.zhgd.xmgl.modules.basicdata.mapper.AppModuleUserMapper;
import com.zhgd.xmgl.modules.basicdata.mapper.BaseModuleMapper;
import com.zhgd.xmgl.modules.basicdata.mapper.BaseModuleUserMapper;
import com.zhgd.xmgl.modules.basicdata.service.IAppModuleUserService;
import com.zhgd.xmgl.security.util.SecurityUtils;
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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Description: APP常用应用
* @author pengj
* @date 2025-11-05
* @version V1.0
*/
@Service
public class AppModuleUserServiceImpl extends ServiceImpl<AppModuleUserMapper, AppModuleUser> implements IAppModuleUserService {
@Autowired
private BaseModuleMapper baseModuleMapper;
@Override
public void editBaseModuleUser(Map<String, Object> map) {
QueryWrapper<AppModuleUser> queryWrapper=new QueryWrapper<>();
queryWrapper.lambda().eq(AppModuleUser::getUserId, MapUtils.getString(map,"userId"));
baseMapper.delete(queryWrapper);
String moduleIdStr=MapUtils.getString(map,"moduleIdStr");
if(StringUtils.isNotEmpty(moduleIdStr)){
for (String moduleId:moduleIdStr.split(Cts.COMMA)){
AppModuleUser appModuleUser=new AppModuleUser();
appModuleUser.setUserId(MapUtils.getLong(map,"userId"));
appModuleUser.setModuleId(Long.valueOf(moduleId));
baseMapper.insert(appModuleUser);
}
}
}
@Override
public List<BaseModule> queryList() {
QueryWrapper<AppModuleUser> queryWrapper=new QueryWrapper<>();
queryWrapper.lambda().eq(AppModuleUser::getUserId, SecurityUtils.getUser().getUserId());
List<Long> collect = this.list(queryWrapper).stream().map(a -> a.getModuleId()).collect(Collectors.toList());
List<BaseModule> resultList = new ArrayList<>();
if (collect.size() > 0) {
resultList = baseModuleMapper.selectBatchIds(collect);
}
return resultList;
}
}

View File

@ -27,6 +27,7 @@ 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.entity.vo.CompanyProjectTreeVo;
import com.zhgd.xmgl.modules.basicdata.entity.vo.GetOrgSnListVo;
import com.zhgd.xmgl.modules.basicdata.enums.CompanyTypeEnum;
import com.zhgd.xmgl.modules.basicdata.enums.SystemUserAccountTypeEnum;
@ -210,6 +211,54 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
return list;
}
@Override
public List<CompanyProjectTreeVo> getCompanyProjectTree() {
List<Company> companyList = companyMapper.selectList(null);
List<Project> projectList = projectMapper.selectList(null);
List<CompanyProjectTreeVo> allList = new ArrayList<>();
for (Company company : companyList) {
CompanyProjectTreeVo companyProjectTreeVo = new CompanyProjectTreeVo();
companyProjectTreeVo.setId(company.getCompanyId());
companyProjectTreeVo.setParentId(company.getParentId());
companyProjectTreeVo.setSn(company.getCompanySn());
companyProjectTreeVo.setType(company.getCompanyType());
companyProjectTreeVo.setName(company.getCompanyName());
companyProjectTreeVo.setHeadquartersSn(company.getHeadquartersSn());
allList.add(companyProjectTreeVo);
}
for (Project project : projectList) {
List<Company> collect = companyList.stream().filter(c -> c.getCompanySn().equals(project.getCompanySn())).collect(Collectors.toList());
CompanyProjectTreeVo companyProjectTreeVo = new CompanyProjectTreeVo();
companyProjectTreeVo.setId(project.getProjectId());
companyProjectTreeVo.setParentId(collect.size() > 0 ? collect.get(0).getCompanyId() : 1L);
companyProjectTreeVo.setSn(project.getProjectSn());
companyProjectTreeVo.setType(5);
companyProjectTreeVo.setName(project.getProjectName());
companyProjectTreeVo.setHeadquartersSn(collect.size() > 0 ? collect.get(0).getHeadquartersSn() : "");
allList.add(companyProjectTreeVo);
}
List<CompanyProjectTreeVo> parentList = allList.stream().filter(a -> a.getType() == 1).collect(Collectors.toList());
build(parentList, allList);
return parentList;
}
private void build(List<CompanyProjectTreeVo> parentList, List<CompanyProjectTreeVo> allList) {
for (CompanyProjectTreeVo companyProjectTreeVo : parentList) {
List<CompanyProjectTreeVo> children = new ArrayList<>();
if (companyProjectTreeVo.getType() == 1) {
children = allList.stream().filter(a -> a.getType() == 2 && a.getHeadquartersSn().equals(companyProjectTreeVo.getHeadquartersSn()))
.collect(Collectors.toList());
} else {
children = allList.stream().filter(a -> a.getParentId().toString().equals(companyProjectTreeVo.getId().toString()))
.collect(Collectors.toList());
}
if (children.size() > 0) {
build(children, allList);
}
companyProjectTreeVo.setChildrenList(children);
}
}
@Override
public List<EntityMap> getCompanyProjectList(Map<String, Object> map) {
map.put("companyType", "2");
@ -415,6 +464,99 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
return data;
}
@Override
public Map<String, Object> getAppCompanyStatisticsList(Map<String, Object> map) {
Map<String, Object> data = new HashMap<>(16);
QueryWrapper<Company> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(Company::getCompanySn, MapUtils.getString(map, "sn"));
Company tempCompany = companyMapper.selectOne(queryWrapper);
Integer type = MapUtils.getInteger(map, "videoType", 0);
Integer standardType = MapUtils.getInteger(map, "standardType", 0);
Integer projectType = MapUtils.getInteger(map, "projectType", 1);
if (tempCompany != null) {
if (Objects.equals(tempCompany.getCompanyType(), HEADQUARTERS.getValue())) { //总部
map.put("headquartersSn", MapUtils.getString(map, "sn"));
map.put("companyType", "1");
List<EntityMap> headCompanyList = companyMapper.getFirstCompanyList(map);
map.put("companyType", "2");
List<EntityMap> fistComapnyList = companyMapper.getFirstCompanyList(map);
map.put("companyType", "3");
List<EntityMap> secondComapnyList = companyMapper.getFirstCompanyList(map);
map.put("companyType", "4");
List<EntityMap> childComapnyList = companyMapper.getFirstCompanyList(map);
map.put("companyType", "1");
if (1 == projectType) {
childComapnyList = getChildCompanyStatisticsList(map, type, standardType, childComapnyList);
}
secondComapnyList = getGroupStatisticsCompany(secondComapnyList, childComapnyList);
fistComapnyList = getGroupStatisticsCompany(fistComapnyList, secondComapnyList);
fistComapnyList = filterCompanyByProject(fistComapnyList, map);
for (EntityMap entityMap : headCompanyList) {
entityMap.put("list", fistComapnyList);
}
data.put("companyList", headCompanyList);
addSnForTree(data);
} else if (Objects.equals(tempCompany.getCompanyType(), CompanyTypeEnum.REGIONS.getValue())) {
data.put("companyInfo", tempCompany);
map.put("companyType", "2");
List<EntityMap> headCompanyList = companyMapper.getChildCompanyList(map);
map.put("companyType", "3");
List<EntityMap> fistComapnyList = companyMapper.getChildCompanyList(map);
map.put("companyType", "4");
List<EntityMap> companyList = companyMapper.getLastChildCompanyList(map);
if (1 == projectType) {
if (companyList != null && companyList.size() > 0) {
map.put("companyType", "2");
companyList = getChildCompanyStatisticsList(map, type, standardType, companyList);
}
}
fistComapnyList = getGroupStatisticsCompany(fistComapnyList, companyList);
fistComapnyList = filterCompanyByProject(fistComapnyList, map);
for (EntityMap entityMap : headCompanyList) {
entityMap.put("list", fistComapnyList);
}
data.put("companyList", headCompanyList);
} else if (Objects.equals(tempCompany.getCompanyType(), CompanyTypeEnum.CITIES.getValue())) {
Company parentCompany = companyMapper.selectById(tempCompany.getParentId());
data.put("parentCompany", parentCompany);
data.put("companyInfo", tempCompany);
map.put("companyType", "3");
List<EntityMap> fistComapnyList = companyMapper.getChildCompanyList(map);
map.put("companyType", "4");
List<EntityMap> companyList = companyMapper.getChildCompanyList(map);
if (1 == projectType) {
if (companyList != null && companyList.size() > 0) {
map.put("companyType", "3");
companyList = getChildCompanyStatisticsList(map, type, standardType, companyList);
}
}
companyList = filterCompanyByProject(companyList, map);
for (EntityMap entityMap : fistComapnyList) {
entityMap.put("list", companyList);
}
data.put("companyList", companyList);
} else {
Company parentCompany = companyMapper.selectById(tempCompany.getParentId());
Company firstCompany = companyMapper.selectById(parentCompany.getParentId());
data.put("parentCompany", parentCompany);
data.put("companyInfo", tempCompany);
data.put("firstCompany", firstCompany);
map.put("companyType", "5");
List<EntityMap> projectList = getProjectEntityMaps(map, type, standardType);
data.put("projectList", projectList);
}
} else {
if (1 == type) {
map.put("companyType", "4");
List<EntityMap> videoList = projectMapper.selectVideoList(map);
hidePasswordName(videoList);
data.put("videoList", videoList);
}
}
return data;
}
/**
* 添加在线离线数量
*

View File

@ -1938,6 +1938,12 @@ public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemU
.eq(SystemUser::getSn, projectSn)).stream().collect(Collectors.toMap(SystemUser::getUserId, Function.identity(), (o1, o2) -> o1));
}
@Override
public List<SystemUser> getSystemUserList(Map<String, Object> map) {
companyService.getCompanyType(map);
return companyMapper.getSystemUserList(map);
}
@Override
public Map<String, Object> verifyLogin(Map<String, Object> map) {
boolean needCode = false;

View File

@ -7,7 +7,7 @@
,qr.region_name
,group_concat(distinct su.real_name) safe_control_duty_names
from big_danger_build_place t
join quality_region qr on qr.id=t.region_id
left join quality_region qr on qr.id=t.region_id
left join system_user su on find_in_set(su.user_id,t.safe_control_duty_ids)
group by t.id
)t

View File

@ -192,6 +192,10 @@ public class ExamTrain implements Serializable {
@ApiModelProperty(value = "课件名称")
private String courseName;
@TableField(exist = false)
@ApiModelProperty(value = "课件背景图")
private String coverImg;
@TableField(exist = false)
@ApiModelProperty(value = "考试试卷")
private String paperName;

View File

@ -4,7 +4,7 @@
<select id="pageList" resultType="com.zhgd.xmgl.modules.exam.entity.ExamTrain">
select * from (select et.*, s.name as subjectName, u.real_name createByName, cc.course_name courseName, pp.name paperName from exam_train et
select * from (select et.*, s.name as subjectName, u.real_name createByName, cc.course_name courseName, cc.cover_img coverImg, pp.name paperName from exam_train et
left join exam_subject s on et.subject_id = s.id
left join exam_course cc on et.course_id = cc.id
left join exam_paper pp on et.exam_paper_id = pp.id

View File

@ -23,6 +23,7 @@ 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.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
@ -48,6 +49,8 @@ public class MechanicalEquipmentPositionDataController {
@Lazy
@Autowired
private IMockMechanicalEquipmentPositionDataConfigService mockMechanicalEquipmentPositionDataConfigService;
@Value("${shantuiAesSecret:}")
private String shantuiAesSecret;
/**
* 分页列表查询
@ -239,4 +242,5 @@ public class MechanicalEquipmentPositionDataController {
return Result.ok();
}
}

View File

@ -0,0 +1,60 @@
package com.zhgd.xmgl.modules.mechanicalequipmentposition.controller;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zhgd.xmgl.modules.mechanicalequipmentposition.entity.MechanicalEquipmentPositionData;
import com.zhgd.xmgl.modules.mechanicalequipmentposition.entity.dto.ShantuiMechanicalEquipmentMsg;
import com.zhgd.xmgl.modules.mechanicalequipmentposition.service.IMechanicalEquipmentPositionDataService;
import com.zhgd.xmgl.util.shantui.AESUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
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.Objects;
@RestController
@RequestMapping("/")
@Slf4j
@Api(tags = "山推相关Api")
public class ShantuiController {
@Autowired
private IMechanicalEquipmentPositionDataService mechanicalEquipmentPositionDataService;
@Value("${shantuiAesSecret:}")
private String shantuiAesSecret;
@ApiOperation(value = "山推添加机械设备定位-实时和报警数据信息", notes = "山推添加机械设备定位-实时和报警数据信息", httpMethod = "POST")
@PostMapping(value = "/notice/push")
public String addDataBySt(@ApiIgnore @RequestBody HashMap<String, Object> param) {
log.debug("山推添加机械设备定位-实时和报警数据信息:{}", JSON.toJSONString(param));
try {
String cipher = MapUtils.getString(param, "cipher");
String decrypt = AESUtil.decrypt(cipher, shantuiAesSecret);
ShantuiMechanicalEquipmentMsg equipmentMsg = JSONObject.parseObject(decrypt, ShantuiMechanicalEquipmentMsg.class);
ShantuiMechanicalEquipmentMsg.StaticAttr staticAttr = equipmentMsg.getStaticAttr();
MechanicalEquipmentPositionData positionData = new MechanicalEquipmentPositionData();
positionData.setDevSn(staticAttr.getDeviceCode());
ShantuiMechanicalEquipmentMsg.DynamicAttr dynamicAttr = equipmentMsg.getDynamicAttr();
positionData.setLatitude(Convert.toDouble(dynamicAttr.getLatitude()));
positionData.setLongitude(Convert.toDouble(dynamicAttr.getLongitude()));
positionData.setUploadTime(DateUtil.parse(equipmentMsg.getTimedetail(), "yyyyMMddHHmmssSSS"));
positionData.setSpeed(Convert.toDouble(dynamicAttr.getGps_speed()));
positionData.setWorkStatus(Objects.equals(dynamicAttr.getAcc_flag(), "0") ? 2 : 1);
positionData.setMileage(Convert.toDouble(dynamicAttr.getTotal_miles()));
mechanicalEquipmentPositionDataService.add(positionData);
} catch (Exception e) {
return "{\"code\":1, \"msg\":\"" + e.getMessage() + "\"}";
}
return "{\"code\":0, \"msg\":\"success\"}";
}
}

View File

@ -0,0 +1,79 @@
package com.zhgd.xmgl.modules.mechanicalequipmentposition.entity.dto;
import lombok.Data;
import java.util.List;
@Data
public class ShantuiMechanicalEquipmentMsg {
private String tid;
private String protocolCode;
private String cmdCode;
private String commSign;
private String transactionID;
private String version;
private String timedetail;
private Integer did;
private StaticAttr staticAttr;
private DynamicAttr dynamicAttr;
@Data
public static class StaticAttr {
private String deviceType;
private String terminalNo;
private String productId;
private String commSign;
private String deviceCode;
private String deviceName;
private String tid;
private String iccid;
private String createTime;
private String deviceSeries;
private String deviceModel;
private String id;
private String simNo;
private String dataSource;
private String did;
}
@Data
public static class DynamicAttr {
private String timedetail;
private String serial_no;
private String subversion;
private String hardware_version;
private String out_sensor_oil_height_real;
private String out_sensor_oil_height;
private String gps_valid_flag;
private String gps_lat_flag;
private String gps_long_flag;
private String gps_connect_flag;
private String longitude;
private String latitude;
private String acc_flag;
private String out_voltage;
private String inner_voltage;
private String gps_speed;
private String gps_direction;
private String gps_height_mm;
private String today_hours;
private String total_hours;
private String today_miles;
private String total_miles;
private String engine_working_hours;
private String today_fuel_consume;
private String wake_up_flag;
private String row_vibrate_data;
private String column_vibrate_data;
private String rtk_positioning_mode;
private String g_sensor_temperature;
private String acceleration_x;
private String acceleration_y;
private String acceleration_z;
private String fuel_select_canid_count;
private List<Object> fuel_select_canid_list;
private String hour_select_canid_count;
private List<Object> hour_select_canid_list;
private String firmware_version_full;
}
}

View File

@ -491,4 +491,12 @@ public class ProjectController {
public Result<List<TreeProjectVideoListVo>> selectTreeProjectVideoList(@RequestBody HashMap<String, Object> map) {
return Result.success(projectService.selectTreeProjectVideoList(map));
}
@OperLog(operModul = "项目管理", operType = "查询", operDesc = "查询企业下所有项目的类型统计")
@ApiOperation(value = "查询企业下所有项目的类型统计", notes = "查询企业下所有项目的类型统计")
@ApiImplicitParam(name = "companySn", value = "企业SN", paramType = "query", required = true, dataType = "String")
@PostMapping("/getListGroupType")
public Result<List<Map<String, Object>>> getListGroupType(@RequestBody Map<String, Object> map) {
return Result.success(projectService.getListGroupType(map));
}
}

View File

@ -241,6 +241,9 @@
<if test="projectName != null and projectName != ''">
and a.project_name like concat('%', #{projectName}, '%')
</if>
<if test="bulidStatus != null">
and a.bulid_status = #{bulidStatus}
</if>
</where>
</select>
<select id="selectVideoList" resultType="com.zhgd.jeecg.common.mybatis.EntityMap">

View File

@ -238,4 +238,6 @@ public interface IProjectService extends IService<Project> {
List<Project> selectProjectListByCompanySn(HashMap<String, Object> map);
List<TreeProjectVideoListVo> selectTreeProjectVideoList(HashMap<String, Object> map);
List<Map<String, Object>> getListGroupType(Map<String, Object> map);
}

View File

@ -721,6 +721,32 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
return companyProjectStat;
}
@Override
public List<Map<String, Object>> getListGroupType(Map<String, Object> map) {
Company company = companyService.getOne(Wrappers.<Company>lambdaQuery().eq(Company::getCompanySn, MapUtils.getString(map, "companySn")));
List<String> companySnList = new ArrayList<>();
if (company.getCompanyType() == 1) {
companySnList = companyService.list(Wrappers.<Company>lambdaQuery().eq(Company::getHeadquartersSn, company.getCompanySn()))
.stream().map(c -> c.getCompanySn()).collect(Collectors.toList());
} else {
getChildren(company.getCompanyId(), companySnList);
}
companySnList.add("0");
List<Project> projects = this.list(Wrappers.<Project>lambdaQuery().in(Project::getCompanySn, companySnList));
List<DictionaryItem> typeList = dictionaryItemService.list(Wrappers.<DictionaryItem>lambdaQuery().eq(DictionaryItem::getDictionaryEncoding, "project_type"));
List<Map<String, Object>> result = new ArrayList<>();
for (DictionaryItem dictionaryItem : typeList) {
int count = (int) projects.stream().filter(p -> p.getProjectType().toString().equals(dictionaryItem.getData())).count();
if (count > 0) {
Map<String, Object> obj = new HashMap<>();
obj.put("name", dictionaryItem.getName());
obj.put("value", count);
result.add(obj);
}
}
return result;
}
private void getChildren(Long companyId, List<String> companyList) {
List<Company> companys = companyService.list(Wrappers.<Company>lambdaQuery().eq(Company::getParentId, companyId));
for (Company company : companys) {

View File

@ -3,6 +3,7 @@ package com.zhgd.xmgl.modules.risk.service.impl;
import cn.hutool.core.collection.CollUtil;
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;
@ -25,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
/**
* @Description: 四色图图纸
@ -70,6 +72,17 @@ public class FourColorDrawPaperServiceImpl extends ServiceImpl<FourColorDrawPape
public void add(FourColorDrawPaperDto fourColorDrawPaperDto) {
fourColorDrawPaperDto.setId(null);
baseMapper.insert(fourColorDrawPaperDto);
setOtherNotShow(fourColorDrawPaperDto);
}
private void setOtherNotShow(FourColorDrawPaperDto dto) {
if (Objects.equals(dto.getIsShow(),1)) {
this.update(null, new LambdaUpdateWrapper<FourColorDrawPaper>()
.set(FourColorDrawPaper::getIsShow, 0)
.eq(FourColorDrawPaper::getIsShow, 1)
.ne(FourColorDrawPaper::getId, dto.getId())
);
}
}
@Override
@ -79,6 +92,7 @@ public class FourColorDrawPaperServiceImpl extends ServiceImpl<FourColorDrawPape
throw new OpenAlertException("未找到对应实体");
}
baseMapper.updateById(fourColorDrawPaperDto);
setOtherNotShow(fourColorDrawPaperDto);
}
@Override

View File

@ -54,6 +54,7 @@ import java.util.Map;
@ApiOperation(value = "树形列表查询视频分组信息", notes = "树形列表查询视频分组信息", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "projectSn", value = "一级公司sn", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "companySn", value = "组织SN", paramType = "body", required = true, dataType = "String")
})
@GetMapping(value = "tree/list")
public Result<JSONArray> treeList(@ApiIgnore @RequestParam HashMap<String, Object> paramMap) {

View File

@ -11,6 +11,7 @@ import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.jeecg.common.mybatis.EntityMap;
import com.zhgd.xmgl.async.AsyncProject;
import com.zhgd.xmgl.call.api.VideoItemManufacturer;
import com.zhgd.xmgl.modules.project.entity.ProjectVideoConfig;
import com.zhgd.xmgl.modules.project.service.IProjectVideoConfigService;
import com.zhgd.xmgl.modules.video.entity.VideoGroup;
@ -59,6 +60,10 @@ public class VideoItemController {
@Lazy
@Autowired
private IVideoItemService videoItemService;
@Autowired
private VideoItemManufacturer videoItemManufacturer;
@Autowired
private AsyncProject asyncProject;
@Lazy
@ -241,6 +246,17 @@ public class VideoItemController {
return Result.ok();
}
@OperLog(operModul = "视频管理", operType = "设置ICC视频订阅事件", operDesc = "设置ICC视频订阅事件")
@ApiOperation(value = "设置ICC视频订阅事件", notes = "设置ICC视频订阅事件", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = true, dataType = "String"),
})
@PostMapping("/setIccSubscriptionByEvent")
public Result setIccSubscriptionByEvent(@RequestBody Map<String, Object> map) {
videoItemManufacturer.setIccSubscriptionByEvent(map);
return Result.ok();
}
@ApiOperation(value = "各企业下项目视频统计", notes = "各企业下项目视频统计")
@ApiImplicitParams({
@ApiImplicitParam(name = "sn", value = "公司sn", paramType = "body", required = true, dataType = "String"),

View File

@ -7,9 +7,14 @@ 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.toolkit.Wrappers;
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.Company;
import com.zhgd.xmgl.modules.basicdata.service.ICompanyService;
import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.service.IProjectService;
import com.zhgd.xmgl.modules.video.entity.VideoGroup;
import com.zhgd.xmgl.modules.video.entity.VideoItem;
import com.zhgd.xmgl.modules.video.entity.bo.GroupVideoNumBo;
@ -19,12 +24,18 @@ import com.zhgd.xmgl.modules.video.mapper.VideoItemMapper;
import com.zhgd.xmgl.modules.video.service.IVideoGroupService;
import com.zhgd.xmgl.util.ListUtils;
import com.zhgd.xmgl.util.MessageUtil;
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.*;
import java.util.function.Function;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@ -40,6 +51,10 @@ public class VideoGroupServiceImpl extends ServiceImpl<VideoGroupMapper, VideoGr
private VideoGroupMapper videoGroupMapper;
@Autowired
private VideoItemMapper videoItemMapper;
@Autowired
private ICompanyService companyService;
@Autowired
private IProjectService projectService;
@Override
public void saveVideoGroup(VideoGroup videoGroup) {
@ -129,6 +144,22 @@ public class VideoGroupServiceImpl extends ServiceImpl<VideoGroupMapper, VideoGr
for (VideoGroupVo vo : videoGroupVos) {
vo.setTotalNum(Optional.ofNullable(videoNumMap.get(vo.getId())).map(GroupVideoNumBo::getTotalNum).orElse(0));
}
String companySn = MapUtils.getString(paramMap, "companySn");
if (StringUtils.isNotBlank(companySn)) {
Company company = companyService.getOne(Wrappers.<Company>lambdaQuery().eq(Company::getCompanySn, companySn));
List<String> companySnList = new ArrayList<>();
if (company.getCompanyType() == 1) {
companySnList = companyService.list(Wrappers.<Company>lambdaQuery().eq(Company::getHeadquartersSn, company.getCompanySn()))
.stream().map(c -> c.getCompanySn()).collect(Collectors.toList());
} else {
getChildren(company.getCompanyId(), companySnList);
}
companySnList.add("0");
List<String> projectSns = projectService.list(Wrappers.<Project>lambdaQuery().in(Project::getCompanySn, companySnList)).stream().map(p -> p.getProjectSn()).collect(Collectors.toList());
projectSns.add("0");
queryWrapper.lambda().in(VideoGroup::getProjectSn, projectSns);
}
JSONArray jsonArray = ListUtils.listToTree(JSONArray.parseArray(JSON.toJSONString(videoGroupVos)), "id", "parentId", "children");
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
@ -154,4 +185,15 @@ public class VideoGroupServiceImpl extends ServiceImpl<VideoGroupMapper, VideoGr
return total;
}
private void getChildren(Long companyId, List<String> companyList) {
List<Company> companys = companyService.list(Wrappers.<Company>lambdaQuery().eq(Company::getParentId, companyId));
for (Company company : companys) {
if (company.getCompanyType() == 4) {
companyList.add(company.getCompanySn());
} else {
getChildren(company.getCompanyId(), companyList);
}
}
}
}

View File

@ -78,6 +78,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
http.authorizeRequests()
//请求路径允许访问
.antMatchers("/notice/push").permitAll()
.antMatchers("/xmgl/electricalData/addByJj").permitAll()
.antMatchers("/xmgl/cache/clearAll").permitAll()
.antMatchers("/xmgl/videoScreenshot/captureScreenshotSync").permitAll()

View File

@ -0,0 +1,74 @@
package com.zhgd.xmgl.util.shantui;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class AESUtil {
private static final String KEY_AES = "AES";
public static String encrypt(String src, String key) throws Exception {
if (key == null || key.length() != 16) {
throw new Exception("key不满足条件");
}
byte[] raw = key.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, KEY_AES);
Cipher cipher = Cipher.getInstance(KEY_AES);
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(src.getBytes());
return byte2hex(encrypted);
}
public static String decrypt(String src, String key) throws Exception {
if (key == null || key.length() != 16) {
throw new Exception("key不满足条件");
}
byte[] raw = key.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, KEY_AES);
Cipher cipher = Cipher.getInstance(KEY_AES);
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] encrypted1 = hex2byte(src);
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original);
return originalString;
}
public static byte[] hex2byte(String strhex) {
if (strhex == null) {
return null;
}
int l = strhex.length();
if (l % 2 == 1) {
return null;
}
byte[] b = new byte[l / 2];
for (int i = 0; i != l / 2; i++) {
b[i] = (byte) Integer.parseInt(strhex.substring(i * 2, i * 2 + 2),
16);
}
return b;
}
public static String byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1) {
hs = hs + "0" + stmp;
} else {
hs = hs + stmp;
}
}
return hs.toUpperCase();
}
public static void main(String[] args) {
try {
String decrypt = decrypt("69C96AE281AECBBBEC4926B60B9C7A0823025CA88C7B60AE0A861FC2D00DC8D762A7E6642EF2D8444B4C587D3F631A02BEE64E60469F413B3552900A46230BCA00C8D89713616977C8C0271FA212F4E353B40AF8F0DFDCFD46BE7A88B36D8FB4C5177C123ADF8DCB317C61CF5695B525C3449524D73FED10604BC285B536EEF02BA5172CC558BBA2CB8B889F0F1C8486FF897D76915C19C537A4F1B2ABAAE726F80406C884F349571D86ACEF5CC6E5B7C012858D6AB36FF858D196EDCD8B5203236213647E33A963F030E804A180C65A1B1DE78E519E5B4357BCBAAFD3A6D24C398C4D8E765F749DCE845336BDC4D8CD39DA072769821FA7715520F1B1ADE8AAC76A0758162D5E2B88C02624697524A67CBE5633064FEFBC9A7DD0E2C66166EA00C8D89713616977C8C0271FA212F4E3E87569470435CF48B00A2000CA22F33E4B2C110A13797B529B7D32E11569FDD2C067ACCBB0CC275F6E5846F576316FE1DE0CCF4E39E83C7B7CA98E80A41C3EE432023EBB3390439DD7C6CAD865F3436885193F700FA92BFEB47CF731E9020019815634DA5D0BBC1E831CED045DF882A81ED51B48F74416FBEF1C9703AAC276A7858BF905E48A671DAC0CC23BF4CE298FB412EEC384C741EC679D2EFA320676785B051072582F2C06ACD49AC2A48E051E33087C1A1FE6C938B20E79E0AAC71B048CE8CB6C86A482FF0931C8D8E26C985F9C7E2B79B6801A0A191B88D0C0942CA8FCE8DAC5AD0BFB52CFB2C481094B133EB1CC1C20E647CFBF10AC14D337068820DC5E5D1313D0C311F72345926BB0C211DF583521FEE56CD878008BFB80BBE21A04A6FD181C37231A265FDDE1B32EDAA0A4D5F21AE4D75AA3667C34193F578EF602A89236F12F4026CCC5D4C810DCB0BF79169B65BF1236800931000517599FBBABA54CF8FEBEC9E686A3EFC0F526A9BCC5E26F390B6635646ACAA97B71D508A69E88300543A468438D6C885ED574FF7F22A77F4CBE68DA3242D8769B331EAD7034A3C992F7F79F74BC859B1BEE1D3FD1A2B5D98FEAB8A7ECDC022C7B6FE6FD1B5A7F1386CD46807F89DA2EA6F854F7478AA28335DD2C274ACB80944B6C051ECC05B94D94F8BC4F4C306353E62648D91092F71B43E56BA575F97567D4ADA9095D0A5D58A24DA6E0986485616FBA722215427EFE41BEB302C5B6F7BBE5B289076F02D434334045F72E3E574651EEA7E41F1F545AE2A034C2A16C4D519380D5E1C75AFF471A4FF036C3FD02B607733558A92146EAFD4F4EF87B65A8DB7D5688122087780E53366A9DBB6E4DC9E5BF890F51AAA1EC186F03D4E689B58235219CBA8FF380BEB18F5CD7F03562E64649E93AE8D53F0851ACD840E850B7EC9997FBF51D663781E0A055CF201EF40CE68CA5D311F212B03575C0A9425F8FDDBCA5A77906D6C6D1F21D93EF1342D509559764B9BEC5E5761A8746EA227F5ED8E85A29B0F11F0F7EB347BCC7D1B6CBA7E9BEC773009A3052FD34A12AEDE6AABFF6AE0F54AA52480CAB665067422244C6B366218BA59C7047EBC4FE69BB69667B9B440663BDA1849C9D55D4D4025D5E2ACAFEEB57880FCAEC7EB449C930DDDE4241BB2D59E29FD56C985DCFFBC6EE3BF9D7BC486647C2C7FD67693DE2D2F4611C7E00095CA0B8D3AA35B665DC996BEC3D04F31F46F56258190F376960CF3F45C2533546EBE3EA44AD8AFA102596E853941258E3EDF7044B88718F1FFABB1BC0E8E3A92EFD5224B7E48E3E4EEEEFF8EA953D9F33FE6A7E81BB0D1CDA4FFCC4128222EC2E3BB5298C6658360453ABB9BE472772F6195A337BBF788D655BD77306B0D726D2D05D7FEDC17F5A097F75B6BE4BD30CD38FA785F9B106B9AACF95481A4BEA47A6E3F5965561631EE245A49F900924851135324809E3A081ED08D807C05FD1A09CEF06B2BC0025DBF2EC951ECDDC7F1D7A816E2DC4CEB89E4DB28AFD92C9AF060728D1F58B3EADEEA3CD0E1342A422DD1C6EA739413B396BB5768CDBAB1ED2D850417E3509DBFE2125ADD3848CAB2A7EAC9E34B53778E160324579D76FB77B165999E7D7DFF21F3E60FC33E4CF4B561EFDF75ACDFDD704F8D995D417E03EC3619E65A3E0EC4CCEFE6DAB187EB6B7176130FF49F27CA997DCD87C0006C5A0501CF5B09BB7ED5FD1C531B37182ADD4EB24F1C5A49844E52CECAE86C955002C1DBF7230C7",
"GTDcnpLW6rDKzHbL");
System.out.println(decrypt);
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@ -107,3 +107,4 @@ upload.image.url.prefix=http://192.168.34.221:9111/image/
supplierResubmitApplicationUrl=http://192.168.34.175:88/#/workspace/contractorApply
#管控清单危险源的区域二维码的前缀
riskListSourceRegionQrCode=http://localhost:8088/app/#/pages/projectEnd/safeSame/riskGradingControlList/riskGradingControlList?id=
shantuiAesSecret=GTDcnpLW6rDKzHbL

View File

@ -8,4 +8,22 @@
)t
${r"${ew.customSqlSegment}"}
</select>
<insert id="insertIgnoreBatch">
INSERT IGNORE INTO ${tableName}
(
<#list originalColumns as column>
${column.fieldDbName?lower_case}<#if column_has_next>,</#if>
</#list>
)
VALUES
<foreach collection="list" item="item" separator=",">
(
<#list originalColumns as column>
${r"#{item."}${column.fieldName}${r"}"}<#if column_has_next>,</#if>
</#list>
)
</foreach>
</insert>
</mapper>

View File

@ -0,0 +1,26 @@
package com.zhgd.xmgl.call.util.jc;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.MockedStatic;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mockStatic;
@ExtendWith(MockitoExtension.class)
class JcHttpUtilTest {
@Test
void replaceUrlToHttps() {
try (MockedStatic<JcHttpUtil> mockedStatic = mockStatic(JcHttpUtil.class);) {
mockedStatic.when(() -> JcHttpUtil.getJcHttpsUrl()).thenReturn("https://jc.zhgdyun.com:12112");
mockedStatic.when(() -> JcHttpUtil.replaceUrlToHttps(any())).thenCallRealMethod();
String expectedUrl = "https://jc.zhgdyun.com:12112/image/693b60ba45fca3742d953f19.jpg";
String actualUrl = JcHttpUtil.replaceUrlToHttps("http://101.43.164.214:11111/image/693b60ba45fca3742d953f19.jpg");
// 验证结果
assertEquals(expectedUrl, actualUrl);
}
}
}