Browse Source

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

dev-v1.0.2
庄锐波 5 months ago
parent
commit
1c96f753d5
  1. 37
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnterpriseLoginController.java
  2. 5
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/DashboardCheckRegisterAreaController.java
  3. 16
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/DashboardCheckRegisterHighController.java
  4. 6
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/StatisticalPanelController.java
  5. 33
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/DashboardCheckHighAreaQueryBo.java
  6. 2
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/DashboardCheckRegisterAreaQueryBo.java
  7. 49
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/DashboardCheckHighAreaInfoVo.java
  8. 2
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/DashboardCheckRegisterDomainMapper.java
  9. 23
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/DashboardOverviewMapper.java
  10. 9
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IDashboardOverviewService.java
  11. 7
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/IAppEnterpriseLoginService.java
  12. 106
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/impl/AppEnterpriseLoginServiceImpl.java
  13. 3
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/DashboardCheckRegisterAreaServiceImpl.java
  14. 16
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/DashboardCheckRegisterDomainServiceImpl.java
  15. 79
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/DashboardOverviewServiceImpl.java
  16. 2
      zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/DashboardCheckRegisterAreaMapper.xml
  17. 31
      zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/DashboardCheckRegisterDomainMapper.xml
  18. 123
      zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/DashboardOverviewMapper.xml
  19. 10
      zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/DashboardTrendStatMapper.xml
  20. 2
      zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/StatisticalPanelMapper.xml
  21. 1596
      zdxt-web-client/zdxt-admin-plus-ui/public/enforcement-code-v1/statistical/home.html
  22. 13
      zdxt-web-client/zdxt-admin-plus-ui/src/layout/index.vue
  23. 25
      zdxt-web-client/zdxt-admin-plus-ui/src/router/index.ts
  24. 21
      zdxt-web-client/zdxt-admin-plus-ui/src/store/modules/permission.ts
  25. 16
      zdxt-web-client/zdxt-admin-plus-ui/src/utils/request.ts
  26. 12
      zdxt-web-client/zdxt-efcode-enterprise-app/src/api/enterprise/index.js
  27. 56
      zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/home/enterpriseHome.vue

37
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/enterprise/AppEnterpriseLoginController.java

@ -8,13 +8,14 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
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 java.util.HashMap;
import java.util.Map;
/**
@ -27,17 +28,43 @@ import java.util.Map;
@RequestMapping("/app-ent/enterprise/login")
public class AppEnterpriseLoginController {
@Autowired
private IAppEnterpriseLoginService appEnterpriseLoginService;
private final IAppEnterpriseLoginService appEnterpriseLoginService;
/**
* 企业端用户登录(深i企)
* 获取深i企鉴权所需的 accessKey / accessSecret
*/
@SaIgnore
@ApiResponse(description = "获取深i企 accessKey / accessSecret")
@GetMapping("/getSiqCode")
public R<Map<String, String>> getSiqCode() {
String accessKey = "6374106c5eb449a4ad6c2430f30796e6";
String accessSecret = "434fec85aa5846e88bbeb8fac6cf6d7f";
Map<String, String> result = new HashMap<>();
result.put("accessKey", accessKey);
result.put("accessSecret", accessSecret);
return R.ok("获取成功", result);
}
/**
* 企业端用户登录(深i企)
*/
@SaIgnore
@ApiResponse(description = "企业端-用户登录(深i企)")
@PostMapping("/siqLogin")
public R<Map<String, Object>> siqLogin(@RequestBody AppEnterpriseLoginBo bo){
public R<Map<String, Object>> siqLogin(@RequestBody AppEnterpriseLoginBo bo) {
System.out.println("接收到登录请求");
Map<String, Object> result = appEnterpriseLoginService.siqLogin(bo);
return R.ok("登录成功", result);
}
/**
* 深i企模拟登录(开发/联调)
*/
@SaIgnore
@ApiResponse(description = "企业端-深i企模拟登录")
@PostMapping("/siqLoginMock")
public R<Map<String, Object>> siqLoginMock(@RequestBody AppEnterpriseLoginBo bo) {
Map<String, Object> result = appEnterpriseLoginService.siqLoginMock(bo);
return R.ok("登录成功", result);
}
}

5
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/DashboardCheckRegisterAreaController.java

@ -2,8 +2,10 @@ package com.zdxt.enforcementcode.controller.web.supervision;
import com.zdxt.enforcementcode.domain.bo.DashboardCheckRegisterAreaBo;
import com.zdxt.enforcementcode.domain.bo.DashboardCheckRegisterAreaQueryBo;
import com.zdxt.enforcementcode.domain.bo.QueryDashboardOverviewBo;
import com.zdxt.enforcementcode.domain.vo.DashboardCheckRegisterAreaInfoVo;
import com.zdxt.enforcementcode.domain.vo.DashboardCheckRegisterAreaVo;
import com.zdxt.enforcementcode.domain.vo.LawEnforcementIntensityVo;
import com.zdxt.enforcementcode.service.IDashboardCheckRegisterAreaService;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
@ -36,8 +38,7 @@ public class DashboardCheckRegisterAreaController extends BaseController {
public R<DashboardCheckRegisterAreaInfoVo> getCheckRegisterArea(DashboardCheckRegisterAreaQueryBo bo) {
//1、默认查询上个月的数据
//2、totalCheckRegisterAreaInfo 查询条件: 年+月+城市code+level = 1
//3、checkRegisterAreaList 查询条件: 年+月+城市code+level = 2
//3、checkRegisterAreaList 查询条件: 年+月+城市code+level = 3
return dashboardCheckRegisterAreaService.getCheckRegisterArea(bo);
}
}

16
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/DashboardCheckRegisterHighController.java

@ -1,14 +1,13 @@
package com.zdxt.enforcementcode.controller.web.supervision;
import com.zdxt.enforcementcode.common.util.StringUtils;
import com.zdxt.enforcementcode.domain.bo.DashboardCheckRegisterAreaQueryBo;
import com.zdxt.enforcementcode.domain.bo.DashboardCheckRegisterDomainQueryBo;
import com.zdxt.enforcementcode.domain.bo.DashboardCheckRegisterHighQueryBo;
import com.zdxt.enforcementcode.domain.bo.DashboardCompanyHighFreqCheckBo;
import com.zdxt.enforcementcode.domain.bean.DashboardCheckRegisterArea;
import com.zdxt.enforcementcode.domain.bo.*;
import com.zdxt.enforcementcode.domain.vo.*;
import com.zdxt.enforcementcode.service.IDashboardCheckRegisterAreaService;
import com.zdxt.enforcementcode.service.IDashboardCheckRegisterDomainService;
import com.zdxt.enforcementcode.service.IDashboardCompanyHighFreqCheckService;
import com.zdxt.enforcementcode.service.IDashboardOverviewService;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.mybatis.core.page.PageQuery;
@ -38,6 +37,9 @@ public class DashboardCheckRegisterHighController extends BaseController {
private final IDashboardCompanyHighFreqCheckService dashboardCompanyHighFreqCheckService;
private final IDashboardCheckRegisterAreaService dashboardCheckRegisterAreaService;
private final IDashboardOverviewService dashboardOverviewService;
/**
* 大屏-高频检查预警-各领域高频检查次数排行
* 1、高频检查次数排行: pageQuery.orderByColumn = "sqjczs" , pageQuery.isAsc = "desc"
@ -69,9 +71,9 @@ public class DashboardCheckRegisterHighController extends BaseController {
* 前端不用默认不用传参数
*/
@GetMapping("/getHighInfoByArea")
public R<DashboardCheckRegisterAreaInfoVo> getHighInfoByArea(DashboardCheckRegisterAreaQueryBo bo) {
return dashboardCheckRegisterAreaService.getCheckRegisterArea(bo);
public R<List<DashboardCheckHighAreaInfoVo>> getHighInfoByArea(DashboardCheckHighAreaQueryBo bo) {
List<DashboardCheckHighAreaInfoVo> list = dashboardOverviewService.getHighInfoByArea(bo);
return R.ok(list);
}
}

6
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/StatisticalPanelController.java

@ -285,15 +285,15 @@ public class StatisticalPanelController {
Map<String, Object> resMap = new HashMap<String, Object>();
SysDeptBo deptParams = new SysDeptBo();
deptParams.setZone(2);
deptParams.setDeptName(LoginHelper.getDeptName());
deptParams.setDeptId(LoginHelper.getDeptId());
// deptId 入参传区名称,如「光明区」
deptParams.setDeptName(params.getDeptId());
List<SysDeptVo> depts = sysDeptService.selectDepts(deptParams);
if (depts == null || depts.isEmpty()) {
return R.fail("未找到相关部门信息");
}
params.setDeptId(depts.get(0).getDeptId());
params.setDeptId(String.valueOf(depts.get(0).getDeptId()));
resMap.put("area", deptParams.getDeptName());

33
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/DashboardCheckHighAreaQueryBo.java

@ -0,0 +1,33 @@
package com.zdxt.enforcementcode.domain.bo;
import com.zdxt.enforcementcode.domain.bean.DashboardCheckRegisterArea;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
/**
* 大屏-高频检查
*
* @author Lion Li
* @date 2026-06-02
*/
@Data
public class DashboardCheckHighAreaQueryBo extends BaseEntity {
/**
* 年份
*/
private Long year;
/**
* 月份 1-12
*/
private Long month;
/**
* 级别:1-市 2-区 3-街道
*/
private Integer level;
}

2
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/DashboardCheckRegisterAreaQueryBo.java

@ -37,7 +37,7 @@ public class DashboardCheckRegisterAreaQueryBo extends BaseEntity {
private String cityCode;
/**
* 级别:1-市 2-区 3-街道
* 级别:1-市 2-市直属,3-区 4-街道
*/
private Integer level;
}

49
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/DashboardCheckHighAreaInfoVo.java

@ -0,0 +1,49 @@
package com.zdxt.enforcementcode.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import com.zdxt.enforcementcode.domain.bean.DashboardCheckRegisterArea;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 大屏-高频检查区域
*
* @author Lion Li
* @date 2026-06-02
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = DashboardCheckRegisterArea.class)
public class DashboardCheckHighAreaInfoVo implements Serializable {
/**
* 区县编码
*/
@ExcelProperty(value = "区县编码")
private String areaCode;
/**
* 区县名称
*/
@ExcelProperty(value = "区县名称")
private String areaName;
/**
* 高频检查次数
*/
private Long hpjccs;
/**
* 高频检查登记级别:级别1-4
*/
private Integer gplevel;
}

2
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/DashboardCheckRegisterDomainMapper.java

@ -27,7 +27,7 @@ public interface DashboardCheckRegisterDomainMapper extends BaseMapperPlus<Dashb
* @param month 月份
* @return 领域统计列表
*/
List<DashboardCheckRegisterDomainVo> queryRegisterDomainList(Long year, Long month);
List<DashboardCheckRegisterDomainVo> queryRegisterDomainList(Long year, Long month,String type);
/**
* 查询高频预警领域统计-按月

23
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/DashboardOverviewMapper.java

@ -5,6 +5,7 @@ import com.zdxt.enforcementcode.domain.bean.DashboardOverview;
import com.zdxt.enforcementcode.domain.bo.GenerateDataBo;
import com.zdxt.enforcementcode.domain.bo.LawEnforcementIntensityQueryBo;
import com.zdxt.enforcementcode.domain.bo.QueryDashboardOverviewCountBo;
import com.zdxt.enforcementcode.domain.vo.DashboardCheckHighAreaInfoVo;
import com.zdxt.enforcementcode.domain.vo.DashboardOverviewVo;
import com.zdxt.enforcementcode.domain.vo.LawEnforcementIntensityVo;
import com.zdxt.enforcementcode.domain.vo.LawEnforcementIntensityCountVo;
@ -14,7 +15,7 @@ import java.util.List;
public interface DashboardOverviewMapper extends BaseMapperPlus<DashboardOverview, DashboardOverviewVo> {
LawEnforcementIntensityVo queryLawEnforcementIntensity(LawEnforcementIntensityQueryBo queryBo);
List<LawEnforcementIntensityVo> queryLawEnforcementIntensity(LawEnforcementIntensityQueryBo queryBo);
List<LawEnforcementIntensityCountVo> queryCount(QueryDashboardOverviewCountBo bo);
@ -22,4 +23,24 @@ public interface DashboardOverviewMapper extends BaseMapperPlus<DashboardOvervie
void generateOverviewData(GenerateDataBo bo);
/**
* 汇总生成市级大屏总览数据(level=1)
*/
void generateCityOverviewData(GenerateDataBo bo);
/**
* 更新同比、环比数据
*/
void updateYoyMom(GenerateDataBo bo);
/**
* 查询高频检查区域统计信息
*
* @param year 年份
* @param month 月份
* @param level 级别:1-市 2-区 3-街道
* @return 高频检查区域统计列表
*/
java.util.List<DashboardCheckHighAreaInfoVo> queryHighInfoByArea(Long year, Long month, Integer level);
}

9
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IDashboardOverviewService.java

@ -100,4 +100,13 @@ public interface IDashboardOverviewService {
* @return 生成结果信息
*/
String generateData(GenerateDataBo bo);
/**
* 高频检查预警-高频检查企业&高频检查区域统计
* 默认查询上个月数据
*
* @param bo 查询条件
* @return 高频检查区域统计列表
*/
List<com.zdxt.enforcementcode.domain.vo.DashboardCheckHighAreaInfoVo> getHighInfoByArea(com.zdxt.enforcementcode.domain.bo.DashboardCheckHighAreaQueryBo bo);
}

7
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/IAppEnterpriseLoginService.java

@ -18,4 +18,11 @@ public interface IAppEnterpriseLoginService {
* @return 登录结果,包含token和用户信息
*/
Map<String, Object> siqLogin(AppEnterpriseLoginBo bo);
/**
* 深I企模拟登录(开发/联调)
* @param bo 登录参数
* @return 登录结果,包含token和用户信息
*/
Map<String, Object> siqLoginMock(AppEnterpriseLoginBo bo);
}

106
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/enterprise/impl/AppEnterpriseLoginServiceImpl.java

@ -30,10 +30,10 @@ import org.dromara.common.core.enums.UserType;
import org.dromara.common.core.exception.base.BaseException;
import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.mapper.SysUserPostMapper;
import org.dromara.system.mapper.SysUserRoleMapper;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -46,6 +46,7 @@ import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
/**
@ -107,34 +108,50 @@ public class AppEnterpriseLoginServiceImpl implements IAppEnterpriseLoginService
@Autowired
RuoYiConfig ruoYiConfig;
@Value("${siq.mock.enabled:false}")
private boolean mockEnabled;
/**
* 深i企用户登录并自动注册(带分布式锁防重)
* 深i企用户登录并自动注册(带分布式锁防重,流程与一期 thirdLogin/siqLogin 一致)
*
* @param bo 登录参数
* @return 登录结果,包含token和用户信息
*/
@Override
public Map<String, Object> siqLogin(AppEnterpriseLoginBo bo) {
JSONObject userInfo;
log.info("---> 深i企登录用户 code:{}", bo.getCode());
JSONObject userInfo = siqLoginInfo(bo);
log.info("---> 深i企登录用户信息:{}", userInfo);
log.info("---> 后面为本地登录的验证了!!! <---");
return doSiqLoginWithLock(userInfo);
}
if (mockEnabled) {
log.info("使用模拟数据进行深i企登录测试");
userInfo = getMockSiqUserInfo(bo.getCode());
} else {
userInfo = siqLoginInfo(bo);
/**
* 深i企模拟登录(开发/联调)
*/
@Override
public Map<String, Object> siqLoginMock(AppEnterpriseLoginBo bo) {
log.info("---> 深i企模拟登录 userId:{}", bo.getUserId());
JSONObject userInfo = getMockSiqUserInfo(bo.getCode());
if (StringUtils.isNotEmpty(bo.getUserId())) {
userInfo.put("userId", bo.getUserId());
}
return doSiqLoginWithLock(userInfo);
}
String siqUserId = userInfo.getString("userId");
String lockKey = "siq_login_lock:" + siqUserId;
/**
* 加锁后完成用户注册、企业关联并签发 token
*/
private Map<String, Object> doSiqLoginWithLock(JSONObject userInfo) {
String lockKey = resolveLoginLockKey(userInfo);
RLock lock = redissonClient.getLock("siq_login_lock:" + lockKey);
boolean locked = false;
try {
log.info("深i企登录获取分布式锁成功: lockKey={}, userId={}", lockKey, siqUserId);
locked = lock.tryLock(0, 1, TimeUnit.SECONDS);
if (!locked) {
log.info("用户正在登录中,用户信息:{}", userInfo.toJSONString());
throw new BaseException("用户正在登录中,请稍后再试");
}
log.info("---> 登入锁 key: {}", lockKey);
EnterpriseUser newUser = saveOrUpdateEnterpriseUser(userInfo);
EnterpriseInformation enterpriseInformation = addSiqUserCompany(userInfo, newUser);
if (newUser != null && enterpriseInformation != null) {
@ -142,26 +159,49 @@ public class AppEnterpriseLoginServiceImpl implements IAppEnterpriseLoginService
}
String token = generateToken(newUser, enterpriseInformation);
Map<String, Object> result = new HashMap<>();
result.put("token", token);
result.put("userId", newUser.getUserId());
result.put("userName", newUser.getUserName());
result.put("loginName", newUser.getLoginName());
result.put("phonenumber", newUser.getPhonenumber() != null ? newUser.getPhonenumber() : "");
result.put("enterpriseId", enterpriseInformation.getId());
result.put("enterpriseName", enterpriseInformation.getEnterpriseName());
result.put("enterpriseNumber", enterpriseInformation.getEnterpriseNumber());
result.put("platformType", PlatformTypeEnums.ENTERPRISE.getKey());
return result;
return buildLoginResult(newUser, enterpriseInformation, token);
} catch (BaseException e) {
throw e;
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new BaseException("登录处理被中断");
} catch (Exception e) {
log.error("深i企登录处理异常: lockKey={}", lockKey, e);
throw new BaseException("登录处理失败:" + e.getMessage());
} finally {
if (locked && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}
/**
* 与一期一致:优先使用 account 作为锁键,否则使用解密后的手机号
*/
private String resolveLoginLockKey(JSONObject userInfo) {
String account = userInfo.getString("account");
if (StringUtils.isNotEmpty(account)) {
return account;
}
return IdCardCryptoUtil.symmetricDecryptIdCard(secretKey, userInfo.getString("phone"));
}
private Map<String, Object> buildLoginResult(EnterpriseUser newUser,
EnterpriseInformation enterpriseInformation,
String token) {
Map<String, Object> result = new HashMap<>();
result.put("token", token);
result.put("userId", newUser.getUserId());
result.put("userName", newUser.getUserName());
result.put("loginName", newUser.getLoginName());
result.put("phonenumber", newUser.getPhonenumber() != null ? newUser.getPhonenumber() : "");
result.put("enterpriseId", enterpriseInformation.getId());
result.put("enterpriseName", enterpriseInformation.getEnterpriseName());
result.put("enterpriseNumber", enterpriseInformation.getEnterpriseNumber());
result.put("platformType", PlatformTypeEnums.ENTERPRISE.getKey());
return result;
}
/**
* 保存或更新企业用户信息
* <p>
@ -250,16 +290,18 @@ public class AppEnterpriseLoginServiceImpl implements IAppEnterpriseLoginService
public JSONObject siqLoginInfo(AppEnterpriseLoginBo bo) {
try {
Map<String, Object> params = new HashMap<>();
log.info("调用深i企登录接口,参数: {}", bo);
String accessKeySign = IdCardCryptoUtil.symmetricEncryptIdCard(secretKey, bo.getCode());
params.put("accessKeySign", accessKeySign);
params.put("appCode", code);
log.info("调用深i企登录接口,参数加密后: {}", params);
String data = HttpUtil.httpSendPost(
siqUrl + ApiConstants.API_SIQUSERLOGIN,
JSONObject.toJSONString(params),
new HashMap<>()
);
log.info("调用深i企登录接口响应: {}", data);
JSONObject jsonObject = JSONObject.parseObject(data);
JSONObject userInfo = jsonObject.getJSONObject("data");
@ -269,7 +311,7 @@ public class AppEnterpriseLoginServiceImpl implements IAppEnterpriseLoginService
throw new BaseException("深i企接口返回数据异常");
}
log.debug("深i企登录返回用户信息: userId={}", userInfo.getString("userId"));
log.info("解析深i企登录接口响应成功,用户信息: {}", userInfo);
return userInfo;
} catch (BaseException e) {

3
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/DashboardCheckRegisterAreaServiceImpl.java

@ -1,6 +1,7 @@
package com.zdxt.enforcementcode.service.impl;
import com.zdxt.enforcementcode.domain.bean.DashboardCheckRegisterArea;
import com.zdxt.enforcementcode.mapper.DashboardOverviewMapper;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
@ -38,6 +39,8 @@ public class DashboardCheckRegisterAreaServiceImpl implements IDashboardCheckReg
private final DashboardCheckRegisterAreaMapper baseMapper;
private final DashboardOverviewMapper dashboardOverviewMapper;
/**
* 查询大屏-检查登记-区域统计
*

16
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/DashboardCheckRegisterDomainServiceImpl.java

@ -1,5 +1,6 @@
package com.zdxt.enforcementcode.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.zdxt.enforcementcode.domain.bean.DashboardCheckRegisterDomain;
import com.zdxt.enforcementcode.domain.bo.DashboardCheckRegisterDomainQueryBo;
import com.zdxt.enforcementcode.domain.bo.DashboardCheckRegisterHighQueryBo;
@ -164,15 +165,18 @@ public class DashboardCheckRegisterDomainServiceImpl implements IDashboardCheckR
month = (long) lastMonth.getMonthValue();
}
// 组装返回结果
DashboardCheckRegisterDomainInfoVo infoVo = new DashboardCheckRegisterDomainInfoVo();
// 查询总体概览数据
DashboardCheckRegisterDomainVo totalRegisterDomain = baseMapper.queryTotalRegisterDomain(year, month);
List<DashboardCheckRegisterDomainVo> totalRegisterDomainList = baseMapper.queryRegisterDomainList(year, month,"2");
if(CollectionUtil.isNotEmpty(totalRegisterDomainList)){
DashboardCheckRegisterDomainVo totalRegisterDomain =
baseMapper.queryRegisterDomainList(year, month,"2").get(0);
infoVo.setTotalRegisterDomain(totalRegisterDomain);
}
// 查询领域统计列表
List<DashboardCheckRegisterDomainVo> registerDomainList = baseMapper.queryRegisterDomainList(year, month);
// 组装返回结果
DashboardCheckRegisterDomainInfoVo infoVo = new DashboardCheckRegisterDomainInfoVo();
infoVo.setTotalRegisterDomain(totalRegisterDomain);
List<DashboardCheckRegisterDomainVo> registerDomainList = baseMapper.queryRegisterDomainList(year, month,"1");
infoVo.setRegisterDomainList(registerDomainList);
return R.ok(infoVo);

79
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/DashboardOverviewServiceImpl.java

@ -4,9 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil;
import com.zdxt.enforcementcode.domain.bean.DashboardOverview;
import com.zdxt.enforcementcode.domain.bo.*;
import com.zdxt.enforcementcode.domain.vo.DashboardAreaInfoVo;
import com.zdxt.enforcementcode.domain.vo.LawEnforcementIntensityVo;
import com.zdxt.enforcementcode.domain.vo.LawEnforcementIntensityCountVo;
import com.zdxt.enforcementcode.domain.vo.*;
import com.zdxt.enforcementcode.service.IDashboardAreaInfoService;
import org.dromara.common.core.utils.MapstructUtils;
@ -23,7 +21,6 @@ import org.dromara.common.translation.annotation.Translation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.annotation.Transient;
import org.springframework.stereotype.Service;
import com.zdxt.enforcementcode.domain.vo.DashboardOverviewVo;
import com.zdxt.enforcementcode.mapper.DashboardOverviewMapper;
import com.zdxt.enforcementcode.service.IDashboardOverviewService;
import org.springframework.transaction.annotation.Transactional;
@ -73,48 +70,20 @@ public class DashboardOverviewServiceImpl implements IDashboardOverviewService {
// 类型1:大屏总览数据
if (bo.getType() == 1) {
// // 先删除该年月的旧数据
// baseMapper.deleteByYearMonth(bo.getYear().longValue(), bo.getMonth().longValue());
// DashboardAreaInfoBo queryBo = new DashboardAreaInfoBo();
// queryBo.setLevel(2L);//查询所有的区
// List<DashboardAreaInfoVo> areaInfoVos = dashboardAreaInfoService.queryList(queryBo);
// for (DashboardAreaInfoVo areaInfoVo : areaInfoVos) {
// DashboardOverview dashboardOverviewArea = new DashboardOverview();
// dashboardOverviewArea.setId(IdUtil.simpleUUID());
// dashboardOverviewArea.setCityCode(areaInfoVo.getParentCode());
// dashboardOverviewArea.setCityName("深圳");
// dashboardOverviewArea.setYear(bo.getYear());
// dashboardOverviewArea.setMonth(bo.getMonth());
// dashboardOverviewArea.setDistrictCode(areaInfoVo.getCode());
// dashboardOverviewArea.setDistrictName(areaInfoVo.getName());
// dashboardOverviewArea.setLevel(3L);//区
// this.baseMapper.insert(dashboardOverviewArea);
// // 查询街道
// queryBo.setLevel(3L);
// queryBo.setParentCode(areaInfoVo.getCode());//区编码
// List<DashboardAreaInfoVo> streetInfoVos = dashboardAreaInfoService.queryList(queryBo);
// if(CollectionUtil.isNotEmpty(streetInfoVos)){
// for (DashboardAreaInfoVo dashboardAreaInfoVo: streetInfoVos ) {
// DashboardOverview dashboardOverviewStreet = new DashboardOverview();
// dashboardOverviewStreet.setId(IdUtil.simpleUUID());
// dashboardOverviewStreet.setCityCode("1");
// dashboardOverviewStreet.setCityName("深圳");
// dashboardOverviewStreet.setYear(bo.getYear());
// dashboardOverviewStreet.setMonth(bo.getMonth());
// dashboardOverviewStreet.setDistrictCode(areaInfoVo.getCode());
// dashboardOverviewStreet.setDistrictName(areaInfoVo.getName());
// dashboardOverviewStreet.setStreetCode(dashboardAreaInfoVo.getCode());
// dashboardOverviewStreet.setStreetName(dashboardAreaInfoVo.getName());
// dashboardOverviewStreet.setLevel(5L);//街道
// this.baseMapper.insert(dashboardOverviewStreet);
// }
// }
// 先删除该年月的旧数据
baseMapper.deleteByYearMonth(bo.getYear().longValue(), bo.getMonth().longValue());
}
// 通过SQL批量生成区级大屏总览数据(level=2)
baseMapper.generateOverviewData(bo);
// 汇总生成市级大屏总览数据(level=1)
baseMapper.generateCityOverviewData(bo);
return "大屏总览数据生成成功,年份:" + bo.getYear() + ",月份:" + bo.getMonth();
// 计算并更新同比、环比数据
baseMapper.updateYoyMom(bo);
}
return "大屏总览数据生成成功,年份:" + bo.getYear() + ",月份:" + bo.getMonth();
}
/**
* 查询大屏总览
@ -252,7 +221,11 @@ public class DashboardOverviewServiceImpl implements IDashboardOverviewService {
}
// 调用 Mapper 查询
return baseMapper.queryLawEnforcementIntensity(queryBo);
List<LawEnforcementIntensityVo> list = baseMapper.queryLawEnforcementIntensity(queryBo);
if (list == null || list.isEmpty()) {
return null;
}
return baseMapper.queryLawEnforcementIntensity(queryBo).get(0);
}
/**
@ -412,5 +385,23 @@ public class DashboardOverviewServiceImpl implements IDashboardOverviewService {
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 高频检查预警-高频检查企业&高频检查区域统计
*/
@Override
public List<DashboardCheckHighAreaInfoVo> getHighInfoByArea(DashboardCheckHighAreaQueryBo bo) {
if (bo.getYear() == null || bo.getMonth() == null) {
LocalDate lastMonth = LocalDate.now().minusMonths(1);
bo.setYear((long) lastMonth.getYear());
bo.setMonth((long) lastMonth.getMonthValue());
}
if (bo.getLevel() == null) {
bo.setLevel(2);
}
List<DashboardCheckHighAreaInfoVo> list = baseMapper.queryHighInfoByArea(
bo.getYear(), bo.getMonth(), bo.getLevel());
return list;
}
}

2
zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/DashboardCheckRegisterAreaMapper.xml

@ -84,7 +84,7 @@
<if test="cityCode != null and cityCode != ''">
AND city_code = #{cityCode}
</if>
AND level = 2
AND level = 3
ORDER BY area_name
</select>

31
zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/DashboardCheckRegisterDomainMapper.xml

@ -19,9 +19,9 @@
SUM(xzcfzs) AS xzcfzs,
SUM(xzcftb) AS xzcftb,
SUM(xzcfhb) AS xzcfhb,
SUM(xzzqzs) AS xzzqzs,
SUM(xzzqtb) AS xzzqtb,
SUM(xzzqhb) AS xzzqhb,
SUM(xzqzzs) AS xzqzzs,
SUM(xzqztb) AS xzqztb,
SUM(xzqzhb) AS xzqzhb,
SUM(qtzfzs) AS qtzfzs,
SUM(qtzftb) AS qtzftb,
SUM(qtzfhb) AS qtzfhb
@ -50,9 +50,9 @@
xzcfzs,
xzcftb,
xzcfhb,
xzzqzs,
xzzqtb,
xzzqhb,
xzqzzs,
xzqztb,
xzqzhb,
qtzfzs,
qtzftb,
qtzfhb,
@ -63,6 +63,7 @@
WHERE is_delete = '0'
AND year = #{year}
AND month = #{month}
AND type = #{type}
ORDER BY lymc
</select>
@ -82,9 +83,9 @@
xzcfzs,
xzcftb,
xzcfhb,
xzzqzs,
xzzqtb,
xzzqhb,
xzqzzs,
xzqztb,
xzqzhb,
qtzfzs,
qtzftb,
qtzfhb
@ -111,9 +112,9 @@
SUM(xzcfzs) AS xzcfzs,
SUM(xzcftb) AS xzcftb,
SUM(xzcfhb) AS xzcfhb,
SUM(xzzqzs) AS xzzqzs,
SUM(xzzqtb) AS xzzqtb,
SUM(xzzqhb) AS xzzqhb,
SUM(xzqzzs) AS xzqzzs,
SUM(xzqztb) AS xzqztb,
SUM(xzqzhb) AS xzqzhb,
SUM(qtzfzs) AS qtzfzs,
SUM(qtzftb) AS qtzftb,
SUM(qtzfhb) AS qtzfhb
@ -143,9 +144,9 @@
SUM(xzcfzs) AS xzcfzs,
SUM(xzcftb) AS xzcftb,
SUM(xzcfhb) AS xzcfhb,
SUM(xzzqzs) AS xzzqzs,
SUM(xzzqtb) AS xzzqtb,
SUM(xzzqhb) AS xzzqhb,
SUM(xzqzzs) AS xzqzzs,
SUM(xzqztb) AS xzqztb,
SUM(xzqzhb) AS xzqzhb,
SUM(qtzfzs) AS qtzfzs,
SUM(qtzftb) AS qtzftb,
SUM(qtzfhb) AS qtzfhb

123
zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/DashboardOverviewMapper.xml

@ -6,11 +6,11 @@
<select id="queryLawEnforcementIntensity" resultType="com.zdxt.enforcementcode.domain.vo.LawEnforcementIntensityVo">
SELECT
COALESCE(SUM(jczs), 0) AS jczs,
COALESCE(SUM(xzjc), 0) AS xzjc,
COALESCE(SUM(xzcf), 0) AS xzcf,
COALESCE(SUM(xzqz), 0) AS xzqz,
COALESCE(SUM(xzqt), 0) AS xzqt
jczs,
xzjc,
xzcf,
xzqz,
xzqt
FROM dashboard_overview
WHERE is_delete = '0'
<if test="cityCode != null and cityCode != ''">
@ -225,4 +225,117 @@
AND d.district_code != ''
</insert>
<!-- 汇总生成市级大屏总览数据(对各区数据求和) -->
<insert id="generateCityOverviewData">
INSERT INTO dashboard_overview (
id,
city_code,
city_name,
district_code,
district_name,
street_code,
street_name,
level,
year,
month,
qyzs,
ddzfs,
lhzfs,
bzfqys,
zfrys,
zfdws,
jczs,
xzjc,
xzcf,
xzqz,
xzqt,
is_delete,
create_time,
update_time,
create_by,
update_by
)
SELECT
REPLACE(UUID(), '-', '') AS id,
'440300' AS city_code,
'深圳市' AS city_name,
NULL AS district_code,
NULL AS district_name,
NULL AS street_code,
NULL AS street_name,
1 AS level,
#{year} AS year,
#{month} AS month,
COALESCE(SUM(qyzs), 0) AS qyzs,
COALESCE(SUM(ddzfs), 0) AS ddzfs,
COALESCE(SUM(lhzfs), 0) AS lhzfs,
COALESCE(SUM(bzfqys), 0) AS bzfqys,
COALESCE(SUM(zfrys), 0) AS zfrys,
COALESCE(SUM(zfdws), 0) AS zfdws,
COALESCE(SUM(jczs), 0) AS jczs,
COALESCE(SUM(xzjc), 0) AS xzjc,
COALESCE(SUM(xzcf), 0) AS xzcf,
COALESCE(SUM(xzqz), 0) AS xzqz,
COALESCE(SUM(xzqt), 0) AS xzqt,
'0' AS is_delete,
NOW() AS create_time,
NOW() AS update_time,
'system' AS create_by,
'system' AS update_by
FROM dashboard_overview
WHERE year = #{year}
AND month = #{month}
AND level = 2
AND is_delete = '0'
</insert>
<!-- 更新同比、环比数据
同比:与去年同月比较
环比:与上一个月比较 -->
<update id="updateYoyMom">
UPDATE dashboard_overview cur
LEFT JOIN dashboard_overview yoy
ON cur.district_code = yoy.district_code
AND yoy.year = #{year} - 1
AND yoy.month = #{month}
AND yoy.level = 2
AND yoy.is_delete = '0'
LEFT JOIN dashboard_overview mom
ON cur.district_code = mom.district_code
AND (
(mom.year = #{year} AND mom.month = #{month} - 1)
OR
(#{month} = 1 AND mom.year = #{year} - 1 AND mom.month = 12)
)
AND mom.level = 2
AND mom.is_delete = '0'
SET
cur.qyzstb = cur.qyzs - COALESCE(yoy.qyzs, 0),
cur.qyzshb = cur.qyzs - COALESCE(mom.qyzs, 0),
cur.ddzfstb = cur.ddzfs - COALESCE(yoy.ddzfs, 0),
cur.ddzfshb = cur.ddzfs - COALESCE(mom.ddzfs, 0),
cur.lhzfstb = cur.lhzfs - COALESCE(yoy.lhzfs, 0),
cur.lhzfshb = cur.lhzfs - COALESCE(mom.lhzfs, 0),
cur.bzfqystb = cur.bzfqys - COALESCE(yoy.bzfqys, 0),
cur.bzfqyhb = cur.bzfqys - COALESCE(mom.bzfqys, 0)
WHERE cur.year = #{year}
AND cur.month = #{month}
AND cur.level = 2
AND cur.is_delete = '0'
</update>
<!-- 查询高频检查区域统计信息 -->
<select id="queryHighInfoByArea" resultType="com.zdxt.enforcementcode.domain.vo.DashboardCheckHighAreaInfoVo">
SELECT
district_code AS areaCode,
district_name AS areaName,
COALESCE(gpjcyj, 0) AS hpjccs,
gplevel
FROM dashboard_overview
WHERE is_delete = '0'
AND year = #{year}
AND month = #{month}
AND level = #{level}
</select>
</mapper>

10
zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/DashboardTrendStatMapper.xml

@ -19,7 +19,7 @@
IFNULL(SUM(a.dj_d), 0) AS djD,
IFNULL(SUM(a.dj_e), 0) AS djE,
IFNULL(SUM(a.wgcs), 0) AS wgcs
FROM dashboard_trend_stat a
FROM dashboard_trend_stat a left join dashboard_area_info b on a.district_code = b.`code` and b.`level` = 2
WHERE a.is_delete = '0'
<if test="startYear != null and startQuarter != null and endYear != null and endQuarter != null">
AND (
@ -44,6 +44,7 @@
a.quarter
ORDER BY
b.sort ,
a.district_name,
a.year,
a.quarter
@ -54,7 +55,7 @@
<select id="areaQuarterDomainCheck" resultType="com.zdxt.enforcementcode.domain.vo.DashboardTrendStatVo">
SELECT
a.*
FROM dashboard_trend_stat a
FROM dashboard_trend_stat a left join dashboard_area_info b on a.district_code = b.`code` and b.`level` = 2
WHERE a.is_delete = '0'
<if test="startYear != null and startQuarter != null and endYear != null and endQuarter != null">
AND (
@ -81,6 +82,7 @@
</if>
ORDER BY
b.sort ,
lymc,
a.year,
a.quarter
@ -102,7 +104,7 @@
IFNULL(SUM(a.dj_d), 0) AS djD,
IFNULL(SUM(a.dj_e), 0) AS djE,
IFNULL(SUM(a.wgcs), 0) AS wgcs
FROM dashboard_trend_stat a
FROM dashboard_trend_stat a left join dashboard_domain_dept b on a.lyid = b.dept_id and b.level = 2
WHERE a.is_delete = '0'
<if test="startYear != null and startQuarter != null and endYear != null and endQuarter != null">
AND (
@ -134,7 +136,7 @@
a.quarter
ORDER BY
a.lymc,
b.sort,
a.year,
a.quarter
</select>

2
zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/StatisticalPanelMapper.xml

@ -930,7 +930,7 @@
and r.is_complaint is not null
and r.check_category is not null
and r.bureau_dept_id is not null
<if test="params.zone != null and params.zone != ''"> and r.bureau_dept_id in (select dept_id from sys_dept where zone = #{params.zone}) </if>-->
<if test="params.zone != null and params.zone != ''"> and r.bureau_dept_id in (select dept_id from sys_dept where zone = #{params.zone}) </if>
<if test="deptId != null and deptId != ''">
and r.bureau_dept_id in (select sd.dept_id from sys_dept sd where sd.area_node = #{deptId} or sd.dept_id = #{deptId})
</if>

1596
zdxt-web-client/zdxt-admin-plus-ui/public/enforcement-code-v1/statistical/home.html

File diff suppressed because it is too large

13
zdxt-web-client/zdxt-admin-plus-ui/src/layout/index.vue

@ -8,7 +8,8 @@
<navbar ref="navbarRef" @set-layout="setLayout" />
</div>
<section class="iframe-main">
<iframe :src="permissionStore.iframeUrl" class="iframe-full" frameborder="0" />
<iframe v-if="permissionStore.iframeUrl" :src="permissionStore.iframeUrl" class="iframe-full" frameborder="0" />
<router-view v-else class="iframe-full-page" />
</section>
<settings ref="settingRef" />
</div>
@ -36,6 +37,7 @@ import { useSettingsStore } from '@/store/modules/settings';
import { usePermissionStore } from '@/store/modules/permission';
import { initWebSocket } from '@/utils/websocket';
import { initSSE } from '@/utils/sse';
import router from '@/router';
const permissionStore = usePermissionStore();
const settingsStore = useSettingsStore();
@ -73,6 +75,9 @@ const settingRef = ref<InstanceType<typeof Settings>>();
onMounted(() => {
nextTick(() => {
navbarRef.value?.initTenantList();
if (permissionStore.iframeMode && permissionStore.fullscreenRoute && router.currentRoute.value.path !== permissionStore.fullscreenRoute) {
router.replace(permissionStore.fullscreenRoute);
}
});
});
@ -158,4 +163,10 @@ const setLayout = () => {
border: none;
display: block;
}
.iframe-full-page {
width: 100%;
min-height: calc(100vh - 50px);
overflow: auto;
}
</style>

25
zdxt-web-client/zdxt-admin-plus-ui/src/router/index.ts

@ -240,6 +240,31 @@ export const constantRoutes: RouteRecordRaw[] = [
meta: { title: '普法服务详情', activeMenu: '/supervision/educationServices' }
}
]
},
{
path: '/enforcement-code/statistical',
component: Layout,
hidden: true,
children: [
{
path: 'home',
component: () => import('@/views/supervision/statistical/home/index.vue'),
name: 'StatisticalHome',
meta: { title: '首页统计分析', fullscreen: true }
},
{
path: 'city-direct',
component: () => import('@/views/supervision/statistical/city-direct/index.vue'),
name: 'StatisticalCityDirect',
meta: { title: '市直综合分析', fullscreen: true }
},
{
path: 'district-direct',
component: () => import('@/views/supervision/statistical/district-direct/index.vue'),
name: 'StatisticalDistrictDirect',
meta: { title: '各区综合分析', fullscreen: true }
}
]
}
];

21
zdxt-web-client/zdxt-admin-plus-ui/src/store/modules/permission.ts

@ -20,12 +20,14 @@ export interface SystemCodeOption {
icon: string;
/** 当设置了 iframeUrl 时,切换到该选项会以全屏 iframe 展示,而非加载菜单路由 */
iframeUrl?: string;
/** 当设置了 fullscreenRoute 时,切换到该选项会以全屏 Vue 路由展示 */
fullscreenRoute?: string;
}
/** 404 兜底路由名称,方便动态移除和重新添加 */
export const CATCH_ALL_ROUTE_NAME = 'CatchAll404';
export const systemCodeOptions: SystemCodeOption[] = [
{ label: '首页', value: 'planindex', icon: 'HomeFilled', iframeUrl: '/enforcement-code-v1/statistical/home.html' },
{ label: '首页', value: 'planindex', icon: 'HomeFilled', fullscreenRoute: '/enforcement-code/statistical/home' },
{ label: '执法监督码', value: 'supervisionCode', icon: 'Document' },
{ label: '后台管理', value: 'authService', icon: 'Setting' }
];
@ -45,9 +47,11 @@ export const usePermissionStore = defineStore('permission', () => {
const savedOption = systemCodeOptions.find((o) => o.value === savedCode);
const currentSystemCode = ref<string>(savedCode);
/** 当前是否处于 iframe 全屏模式 */
const iframeMode = ref<boolean>(savedOption?.iframeUrl ? true : false);
const iframeMode = ref<boolean>(!!(savedOption?.iframeUrl || savedOption?.fullscreenRoute));
/** 当前 iframe 地址 */
const iframeUrl = ref<string>(savedOption?.iframeUrl || '');
/** 当前全屏 Vue 路由地址 */
const fullscreenRoute = ref<string>(savedOption?.fullscreenRoute || '');
const getRoutes = (): RouteRecordRaw[] => {
return routes.value as RouteRecordRaw[];
@ -154,16 +158,20 @@ export const usePermissionStore = defineStore('permission', () => {
currentSystemCode.value = systemCode;
sessionStorage.setItem(SYSTEM_CODE_KEY, systemCode);
const option = systemCodeOptions.find((o) => o.value === systemCode);
// 判断是否为 iframe 模式
if (option?.iframeUrl) {
// 判断是否为全屏模式(iframe 或 Vue 路由)
if (option?.iframeUrl || option?.fullscreenRoute) {
iframeMode.value = true;
iframeUrl.value = option.iframeUrl;
// iframe 模式下清空侧边栏路由
iframeUrl.value = option.iframeUrl || '';
fullscreenRoute.value = option.fullscreenRoute || '';
setSidebarRouters([]);
if (option.fullscreenRoute) {
await router.push(option.fullscreenRoute);
}
return;
}
iframeMode.value = false;
iframeUrl.value = '';
fullscreenRoute.value = '';
// ====== 彻底清理所有动态路由,保证路由表干净 ======
// 1. 收集所有静态路由名称(包括子路由)
@ -230,6 +238,7 @@ export const usePermissionStore = defineStore('permission', () => {
currentSystemCode,
iframeMode,
iframeUrl,
fullscreenRoute,
visibleSystemCodeOptions,
getRoutes,

16
zdxt-web-client/zdxt-admin-plus-ui/src/utils/request.ts

@ -151,13 +151,19 @@ service.interceptors.response.use(
}
return Promise.reject('无效的会话,或者会话已过期,请重新登录。');
} else if (code === HttpStatus.SERVER_ERROR) {
ElMessage({ message: msg, type: 'error' });
if (res.config.headers?.silent !== true && res.config.headers?.silent !== 'true') {
ElMessage({ message: msg, type: 'error' });
}
return Promise.reject(new Error(msg));
} else if (code === HttpStatus.WARN) {
ElMessage({ message: msg, type: 'warning' });
if (res.config.headers?.silent !== true && res.config.headers?.silent !== 'true') {
ElMessage({ message: msg, type: 'warning' });
}
return Promise.reject(new Error(msg));
} else if (code !== HttpStatus.SUCCESS) {
ElNotification.error({ title: msg });
if (res.config.headers?.silent !== true && res.config.headers?.silent !== 'true') {
ElNotification.error({ title: msg });
}
return Promise.reject('error');
} else {
return Promise.resolve(res.data);
@ -172,7 +178,9 @@ service.interceptors.response.use(
} else if (message.includes('Request failed with status code')) {
message = '系统接口' + message.substr(message.length - 3) + '异常';
}
ElMessage({ message: message, type: 'error', duration: 5 * 1000 });
if (error?.config?.headers?.silent !== true && error?.config?.headers?.silent !== 'true') {
ElMessage({ message: message, type: 'error', duration: 5 * 1000 });
}
return Promise.reject(error);
}
);

12
zdxt-web-client/zdxt-efcode-enterprise-app/src/api/enterprise/index.js

@ -4,11 +4,11 @@ import { _get, _post,_form,_delete } from "../../http/index";
let enterpriseAppBaseUrl = "/app-ent";
// 企业端用户登录
export const enterpriseLogin = (params, success, error) => _post(enterpriseAppBaseUrl + "/enterprise/login/siqLogin", params, success, error);
export const enterpriseLogin = (params, success, error) => _post(enterpriseAppBaseUrl + "/enterprise/login/siqLoginMock", params, success, error);
export const enterpriseLoginByPassword = (params, success, error) => _post(enterpriseAppBaseUrl + "/login/do", params, success, error);
// 获取包裹的数据
export const siqCode = (params, success, error) => _get(enterpriseAppBaseUrl+"/thirdLogin/getSiqCode",params,success,error);
// 获取深i企鉴权 accessKey / accessSecret
export const siqCode = (params, success, error) => _get(enterpriseAppBaseUrl + "/enterprise/login/getSiqCode", params, success, error);
// 获取用户关联的企业信息
@ -82,11 +82,11 @@ export const getDeptList = (params, success, error) => _get("/enforcementcode/vi
//投诉事项列表
export const getComplaintItemList = (params, success, error) => _post(enterpriseAppBaseUrl +"/complaint/listNotComplaint",params,success,error)
//深i企登录-暂时没有环境调通
export const getSiqLoginAuth = (params, success, error) => _post(enterpriseAppBaseUrl +"/thirdLogin/siqLogin",params,success,error);
//深i企登录
export const getSiqLoginAuth = (params, success, error) => _post(enterpriseAppBaseUrl + "/enterprise/login/siqLogin", params, success, error);
//深i企模拟登录(通过userId模拟)
export const getSiqLoginAuthMock = (params, success, error) => _post(enterpriseAppBaseUrl +"/thirdLogin/siqLoginMock",params,success,error);
export const getSiqLoginAuthMock = (params, success, error) => _post(enterpriseAppBaseUrl + "/enterprise/login/siqLoginMock", params, success, error);
//强制生成二维码
export const forceGenerateQrCode = (params, success, error) => _get(enterpriseAppBaseUrl+"/enterpriseInfo/forceGenerateQrCode",params,success,error)

56
zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/home/enterpriseHome.vue

@ -109,8 +109,6 @@ const generateRandomNumber = () => {
const getEnterpriseMerchant = (enterpriseNum, phoneNumber) => {
getEnterpriseMerchantAuthorization({enterpriseNumber: enterpriseNum, merchantTel: phoneNumber}, success => {
//debugger;
//console.log('------------->>>: ', success.data[0].enterpriseNumber)
if (success.data != null && success.data.length > 0) {
useCommon.SET_USER_ENTERPRISE_NUMBER(success.data[0].enterpriseNumber);
}
@ -118,29 +116,31 @@ const getEnterpriseMerchant = (enterpriseNum, phoneNumber) => {
})
}
// 判断用户信息是否已完整(企业端登录后已写入store)
const hasUserInfo = () => {
return useCommon.userId
&& useCommon.enterpriseName
&& useCommon.enterpriseNumber
&& useCommon.enterpriseId;
};
/** 登录成功后写入 store(与一期 Home.vue 一致,并补充企业名称/ID) */
const applyLoginResult = (data) => {
useCommon.SET_USER_PHONENUMBER(data.phonenumber.toString());
useCommon.SET_USER_ID(data.userId);
useCommon.SET_USER_ENTERPRISE_NUMBER(data.enterpriseNumber);
if (data.enterpriseName) {
useCommon.SET_USER_ENTERPRISE_NAME(data.enterpriseName);
}
if (data.enterpriseId) {
useCommon.SET_USER_ENTERPRISE_ID(data.enterpriseId);
}
useCommon.SET_TOKEN(data.token);
useCommon.SET_IS_FIRST_LOAD(false);
if (useCommon.firstLoad) {
isLoading.value = false;
}
getEnterpriseMerchant(data.enterpriseNumber.toString(), data.phonenumber.toString());
}
onMounted(() => {
console.log(useCommon.firstLoad);
console.log(useCommon);
isLoading.value = useCommon.firstLoad;
// 如果store中已存在完整的用户和企业信息,则跳过w6s鉴权
if (hasUserInfo()) {
console.log("用户信息已存在,跳过w6s鉴权");
isLoading.value = false;
getEnterpriseMerchant(useCommon.enterpriseNumber.toString(), useCommon.phonenumber.toString());
useCommon.SET_IS_FIRST_LOAD(false);
return;
}
siqCode(null, success => {
console.log("---> 获取密钥", success);
let access_key = "";
let access_secret = "";
if (success.success) {
@ -167,7 +167,7 @@ onMounted(() => {
console.log("鉴权", res);
}).catch((err) => {
console.log("鉴权", err);
//getEnterpriseMerchant(useCommon.enterpriseNumber.toString(), useCommon.phonenumber.toString());
getEnterpriseMerchant(useCommon.enterpriseNumber.toString(), useCommon.phonenumber.toString());
});
w6s.ready(() => {
@ -178,22 +178,8 @@ onMounted(() => {
console.log("认证", res);
console.log("code: " + res.result.result.code);
getSiqLoginAuth({code: res.result.result.code}, success => {
useCommon.SET_USER_PHONENUMBER(success.data.phonenumber.toString());
useCommon.SET_USER_ID(success.data.userId);
useCommon.SET_USER_ENTERPRISE_NUMBER(success.data.enterpriseNumber);
console.log(success.data);
useCommon.SET_TOKEN(success.data.token);
console.log(useCommon.userId);
console.log(useCommon.firstLoad);
if (useCommon.firstLoad) {
isLoading.value = false;
}
//设置已经初始化
useCommon.SET_IS_FIRST_LOAD(false)
getEnterpriseMerchant(success.data.enterpriseNumber.toString(), success.data.phonenumber.toString());
if (useCommon.firstLoad) {
isLoading.value = false;
}
applyLoginResult(success.data);
}, error => {
console.log("error : " + error)
})

Loading…
Cancel
Save