部门管理增加省市区等

This commit is contained in:
1378012178@qq.com 2025-05-30 16:50:15 +08:00
parent 1c45d971b5
commit 09bd0e2cda
31 changed files with 1283 additions and 604 deletions

View File

@ -11,8 +11,12 @@ import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSONObject;
import com.nu.modules.nuBizAdvisoryInfo.entity.NuBizAdvisoryInfo; import com.nu.modules.nuBizAdvisoryInfo.entity.NuBizAdvisoryInfo;
import org.apache.commons.lang.StringUtils;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.query.QueryRuleEnum; import org.jeecg.common.system.query.QueryRuleEnum;
import org.jeecg.common.util.oConvertUtils; import org.jeecg.common.util.oConvertUtils;
@ -31,6 +35,7 @@ import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.commons.util.IdUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartHttpServletRequest;
@ -41,128 +46,148 @@ import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
/** /**
* @Description: 护理单元 * @Description: 护理单元
* @Author: jeecg-boot * @Author: jeecg-boot
* @Date: 2025-04-11 * @Date: 2025-04-11
* @Version: V1.0 * @Version: V1.0
*/ */
@Api(tags="护理单元") @Api(tags = "护理单元")
@RestController @RestController
@RequestMapping("/nuBaseInfo/nuBaseInfo") @RequestMapping("/nuBaseInfo/nuBaseInfo")
@Slf4j @Slf4j
public class NuBaseInfoController extends JeecgController<NuBaseInfo, INuBaseInfoService> { public class NuBaseInfoController extends JeecgController<NuBaseInfo, INuBaseInfoService> {
@Autowired @Autowired
private INuBaseInfoService nuBaseInfoService; private INuBaseInfoService nuBaseInfoService;
@Autowired
/** private ISysBaseAPI sysBaseAPI;
* 分页列表查询
*
* @param nuBaseInfo
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "护理单元-分页列表查询")
@ApiOperation(value="护理单元-分页列表查询", notes="护理单元-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<NuBaseInfo>> queryPageList(NuBaseInfo nuBaseInfo,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
Map<String, QueryRuleEnum> customeRuleMap = new HashMap<>();
customeRuleMap.put("area_flag", QueryRuleEnum.LIKE_WITH_OR);
customeRuleMap.put("status", QueryRuleEnum.LIKE_WITH_OR);
QueryWrapper<NuBaseInfo> queryWrapper = QueryGenerator.initQueryWrapper(nuBaseInfo, req.getParameterMap(),customeRuleMap);
Page<NuBaseInfo> page = new Page<NuBaseInfo>(pageNo, pageSize);
IPage<NuBaseInfo> pageList = nuBaseInfoService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param nuBaseInfo
* @return
*/
@AutoLog(value = "护理单元-添加")
@ApiOperation(value="护理单元-添加", notes="护理单元-添加")
@RequiresPermissions("nuBaseInfo:nu_base_info:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody NuBaseInfo nuBaseInfo) {
nuBaseInfoService.save(nuBaseInfo);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param nuBaseInfo
* @return
*/
@AutoLog(value = "护理单元-编辑")
@ApiOperation(value="护理单元-编辑", notes="护理单元-编辑")
@RequiresPermissions("nuBaseInfo:nu_base_info:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody NuBaseInfo nuBaseInfo) {
nuBaseInfoService.updateById(nuBaseInfo);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "护理单元-通过id删除")
@ApiOperation(value="护理单元-通过id删除", notes="护理单元-通过id删除")
@RequiresPermissions("nuBaseInfo:nu_base_info:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
nuBaseInfoService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "护理单元-批量删除")
@ApiOperation(value="护理单元-批量删除", notes="护理单元-批量删除")
@RequiresPermissions("nuBaseInfo:nu_base_info:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.nuBaseInfoService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "护理单元-通过id查询")
@ApiOperation(value="护理单元-通过id查询", notes="护理单元-通过id查询")
@GetMapping(value = "/queryById")
public Result<NuBaseInfo> queryById(@RequestParam(name="id",required=true) String id) {
NuBaseInfo nuBaseInfo = nuBaseInfoService.getById(id);
if(nuBaseInfo==null) {
return Result.error("未找到对应数据");
}
return Result.OK(nuBaseInfo);
}
/** /**
* 导出excel * 分页列表查询
* *
* @param request * @param nuBaseInfo
* @param nuBaseInfo * @param pageNo
*/ * @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "护理单元-分页列表查询")
@ApiOperation(value = "护理单元-分页列表查询", notes = "护理单元-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<NuBaseInfo>> queryPageList(NuBaseInfo nuBaseInfo,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
Map<String, QueryRuleEnum> customeRuleMap = new HashMap<>();
customeRuleMap.put("area_flag", QueryRuleEnum.LIKE_WITH_OR);
customeRuleMap.put("status", QueryRuleEnum.LIKE_WITH_OR);
QueryWrapper<NuBaseInfo> queryWrapper = QueryGenerator.initQueryWrapper(nuBaseInfo, req.getParameterMap(), customeRuleMap);
Page<NuBaseInfo> page = new Page<NuBaseInfo>(pageNo, pageSize);
IPage<NuBaseInfo> pageList = nuBaseInfoService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param nuBaseInfo
* @return
*/
@AutoLog(value = "护理单元-添加")
@ApiOperation(value = "护理单元-添加", notes = "护理单元-添加")
@RequiresPermissions("nuBaseInfo:nu_base_info:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody NuBaseInfo nuBaseInfo) {
JSONObject deptInfo = sysBaseAPI.getDeptInfo();
String orgCode = deptInfo.getString("code");
if (StringUtils.isBlank(orgCode)) {
throw new RuntimeException("请先在部门管理中设置机构编码!");
}
try {
Integer code = nuBaseInfoService.getCode();
if (code == null) {
nuBaseInfo.setCode(orgCode + "-001");
} else {
//保证3位字符串 不足前面用0补全
String codeStr = String.format("%03d", code + 1);
nuBaseInfo.setCode(orgCode + "-" + codeStr);
}
} catch (Exception e) {
e.printStackTrace();
nuBaseInfo.setCode(orgCode + "-" + IdUtil.simpleUUID());
}
nuBaseInfoService.save(nuBaseInfo);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param nuBaseInfo
* @return
*/
@AutoLog(value = "护理单元-编辑")
@ApiOperation(value = "护理单元-编辑", notes = "护理单元-编辑")
@RequiresPermissions("nuBaseInfo:nu_base_info:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<String> edit(@RequestBody NuBaseInfo nuBaseInfo) {
nuBaseInfoService.updateById(nuBaseInfo);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "护理单元-通过id删除")
@ApiOperation(value = "护理单元-通过id删除", notes = "护理单元-通过id删除")
@RequiresPermissions("nuBaseInfo:nu_base_info:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
nuBaseInfoService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "护理单元-批量删除")
@ApiOperation(value = "护理单元-批量删除", notes = "护理单元-批量删除")
@RequiresPermissions("nuBaseInfo:nu_base_info:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
this.nuBaseInfoService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "护理单元-通过id查询")
@ApiOperation(value = "护理单元-通过id查询", notes = "护理单元-通过id查询")
@GetMapping(value = "/queryById")
public Result<NuBaseInfo> queryById(@RequestParam(name = "id", required = true) String id) {
NuBaseInfo nuBaseInfo = nuBaseInfoService.getById(id);
if (nuBaseInfo == null) {
return Result.error("未找到对应数据");
}
return Result.OK(nuBaseInfo);
}
/**
* 导出excel
*
* @param request
* @param nuBaseInfo
*/
@RequiresPermissions("nuBaseInfo:nu_base_info:exportXls") @RequiresPermissions("nuBaseInfo:nu_base_info:exportXls")
@RequestMapping(value = "/exportXls") @RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, NuBaseInfo nuBaseInfo) { public ModelAndView exportXls(HttpServletRequest request, NuBaseInfo nuBaseInfo) {
@ -170,12 +195,12 @@ public class NuBaseInfoController extends JeecgController<NuBaseInfo, INuBaseInf
} }
/** /**
* 通过excel导入数据 * 通过excel导入数据
* *
* @param request * @param request
* @param response * @param response
* @return * @return
*/ */
@RequiresPermissions("nuBaseInfo:nu_base_info:importExcel") @RequiresPermissions("nuBaseInfo:nu_base_info:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST) @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {

View File

@ -42,6 +42,10 @@ public class NuBaseInfo implements Serializable {
@Excel(name = "护理单元名称", width = 15) @Excel(name = "护理单元名称", width = 15)
@ApiModelProperty(value = "护理单元名称") @ApiModelProperty(value = "护理单元名称")
private java.lang.String nuName; private java.lang.String nuName;
/**护理单元编码*/
@Excel(name = "护理单元编码", width = 15)
@ApiModelProperty(value = "护理单元编码")
private java.lang.String code;
/**区域标签ID*/ /**区域标签ID*/
@Excel(name = "区域标签ID", width = 15, dicCode = "nu_type") @Excel(name = "区域标签ID", width = 15, dicCode = "nu_type")
@Dict(dicCode = "nu_type") @Dict(dicCode = "nu_type")

View File

@ -14,4 +14,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/ */
public interface NuBaseInfoMapper extends BaseMapper<NuBaseInfo> { public interface NuBaseInfoMapper extends BaseMapper<NuBaseInfo> {
Integer getCode();
} }

View File

@ -2,4 +2,9 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nu.modules.nuBaseInfo.mapper.NuBaseInfoMapper"> <mapper namespace="com.nu.modules.nuBaseInfo.mapper.NuBaseInfoMapper">
<select id="getCode" resultType="java.lang.Integer">
SELECT MAX(CAST(SUBSTRING_INDEX(code, '-', -1) AS UNSIGNED)) AS max_number
FROM nu_base_info
WHERE SUBSTRING_INDEX(code, '-', -1) REGEXP '^[0-9]+$';
</select>
</mapper> </mapper>

View File

@ -11,4 +11,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface INuBaseInfoService extends IService<NuBaseInfo> { public interface INuBaseInfoService extends IService<NuBaseInfo> {
Integer getCode();
} }

View File

@ -16,4 +16,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@Service @Service
public class NuBaseInfoServiceImpl extends ServiceImpl<NuBaseInfoMapper, NuBaseInfo> implements INuBaseInfoService { public class NuBaseInfoServiceImpl extends ServiceImpl<NuBaseInfoMapper, NuBaseInfo> implements INuBaseInfoService {
@Override
public Integer getCode() {
return baseMapper.getCode();
}
} }

View File

@ -133,7 +133,7 @@ public class AppCameraInfo implements Serializable {
private String topTime; private String topTime;
/**护理单元*/ /**护理单元*/
@ApiModelProperty(value = "护理单元ID") @ApiModelProperty(value = "护理单元ID")
@Dict(dictTable ="nu_base_info",dicText = "nu_name",dicCode = "id") @Dict(dictTable ="nu_base_info",dicText = "nu_name",dicCode = "code")
private String nuId; private String nuId;
/**护理单元*/ /**护理单元*/
@ApiModelProperty(value = "护理单元") @ApiModelProperty(value = "护理单元")

View File

@ -5,7 +5,7 @@ import org.springframework.stereotype.Component;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.time.LocalDate; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
@Component @Component
@ -24,22 +24,26 @@ public class SafetyUtil {
* @param secureKey 客户端传入的密钥MD5 * @param secureKey 客户端传入的密钥MD5
* @return true=验证通过false=验证失败 * @return true=验证通过false=验证失败
*/ */
public static boolean validateSecureKey(String secureKey) { public static boolean validateSecureKey(String secureKey) {
if (secureKey == null || downloadkey == null) { if (secureKey == null || downloadkey == null) {
return false; return false;
} }
// 1. 获取当前日期yyyyMMdd // 获取当前时间精确到分钟格式为 yyyyMMddHHmm
String currentDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); String currentTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm"));
// 获取前一分钟的时间用于扩大验证窗口
String previousMinute = LocalDateTime.now().minusMinutes(1).format(DateTimeFormatter.ofPattern("yyyyMMddHHmm"));
// 2. 复杂混拼固定规则 // 验证当前时间的密钥
String mixedKey = complexMix(downloadkey, currentDate); String mixedKey = complexMix(downloadkey, currentTime);
// 3. 计算 MD5
String md5Hash = calculateMD5(mixedKey); String md5Hash = calculateMD5(mixedKey);
if (secureKey.equalsIgnoreCase(md5Hash)) {
return true;
}
// 4. 比较 secureKey 是否匹配忽略大小写 // 验证前一分钟的密钥扩大验证窗口
mixedKey = complexMix(downloadkey, previousMinute);
md5Hash = calculateMD5(mixedKey);
return secureKey.equalsIgnoreCase(md5Hash); return secureKey.equalsIgnoreCase(md5Hash);
} }
@ -54,7 +58,6 @@ public class SafetyUtil {
* 进行倒序 * 进行倒序
* 3. 3个字符插入一个固定干扰符 '#' * 3. 3个字符插入一个固定干扰符 '#'
*/ */
private static String complexMix(String key, String date) { private static String complexMix(String key, String date) {
StringBuilder mixed = new StringBuilder(); StringBuilder mixed = new StringBuilder();
@ -102,19 +105,22 @@ public class SafetyUtil {
} }
} }
/**
* 获取当前的安全密钥
* 现在包含精确到分钟的时间信息yyyyMMddHHmm
*/
public static String getSecureKey() { public static String getSecureKey() {
if (downloadkey == null) { if (downloadkey == null) {
return "aaa"; return "aaa";
} }
// 1. 获取当前日期yyyyMMdd // 获取当前时间精确到分钟格式为 yyyyMMddHHmm
String currentDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); String currentTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm"));
// 2. 复杂混拼固定规则 // 复杂混拼固定规则
String mixedKey = complexMix(downloadkey, currentDate); String mixedKey = complexMix(downloadkey, currentTime);
// 3. 计算 MD5 并返回 // 计算 MD5 并返回
return calculateMD5(mixedKey); return calculateMD5(mixedKey);
} }
} }

View File

@ -132,8 +132,8 @@ public class CameraInfo implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private String topTime; private String topTime;
/**护理单元*/ /**护理单元*/
@ApiModelProperty(value = "护理单元ID") @ApiModelProperty(value = "护理单元编码")
@Dict(dictTable ="nu_base_info",dicText = "nu_name",dicCode = "id") @Dict(dictTable ="nu_base_info",dicText = "nu_name",dicCode = "code")
private String nuId; private String nuId;
/**护理单元*/ /**护理单元*/
@ApiModelProperty(value = "护理单元") @ApiModelProperty(value = "护理单元")

View File

@ -129,12 +129,12 @@
<select id="findNuPage" parameterType="com.nu.modules.tplink.camera.entity.CameraInfo" resultType="com.nu.modules.tplink.camera.entity.CameraInfo"> <select id="findNuPage" parameterType="com.nu.modules.tplink.camera.entity.CameraInfo" resultType="com.nu.modules.tplink.camera.entity.CameraInfo">
select select
id as nuId, code as nuId,
nu_name as nuName nu_name as nuName
from nu_base_info b from nu_base_info b
<where> <where>
<if test="params.nuId != null and params.nuId != ''"> <if test="params.nuId != null and params.nuId != ''">
AND b.id = #{params.nuId} AND b.code = #{params.nuId}
</if> </if>
<if test="params.nuName != null and params.nuName != ''"> <if test="params.nuName != null and params.nuName != ''">
AND b.nu_name LIKE concat('%',#{params.nuName},'%') AND b.nu_name LIKE concat('%',#{params.nuName},'%')

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.nursingunit.boot</groupId>
<artifactId>nu-payment-api</artifactId>
<version>2.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>nu-payment-local-api</artifactId>
</project>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.nursingunit.boot</groupId>
<artifactId>nursing-unit-payment</artifactId>
<version>2.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>nu-payment-api</artifactId>
<packaging>pom</packaging>
<modules>
<module>nu-payment-local-api</module>
</modules>
<dependencies>
<dependency>
<groupId>com.nursingunit.boot</groupId>
<artifactId>nursing-unit-base-core</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,35 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.nursingunit.boot</groupId>
<artifactId>nursing-unit-payment</artifactId>
<version>2.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>nu-payment-biz</artifactId>
<dependencies>
<dependency>
<groupId>com.nursingunit.boot</groupId>
<artifactId>nu-payment-local-api</artifactId>
<version>${nursingunit.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>hibernate-re</artifactId>
</dependency>
<!-- 企业微信/钉钉 api -->
<dependency>
<groupId>org.jeecgframework</groupId>
<artifactId>weixin4j</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,186 @@
package com.nu.modules.systemorder.controller;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.query.QueryRuleEnum;
import org.jeecg.common.util.oConvertUtils;
import com.nu.modules.systemorder.entity.SystemOrder;
import com.nu.modules.systemorder.service.ISystemOrderService;
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.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.jeecg.common.system.base.controller.JeecgController;
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 io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
* @Description: 系统订单表
* @Author: 张明远
* @Date: 2025-05-30
* @Version: V1.0
*/
@Api(tags="系统订单表")
@RestController
@RequestMapping("/systemorder/systemOrder")
@Slf4j
public class SystemOrderController extends JeecgController<SystemOrder, ISystemOrderService> {
@Autowired
private ISystemOrderService systemOrderService;
/**
* 分页列表查询
*
* @param systemOrder
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "系统订单表-分页列表查询")
@ApiOperation(value="系统订单表-分页列表查询", notes="系统订单表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<SystemOrder>> queryPageList(SystemOrder systemOrder,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
// 自定义查询规则
Map<String, QueryRuleEnum> customeRuleMap = new HashMap<>();
// 自定义多选的查询规则为LIKE_WITH_OR
customeRuleMap.put("nursingUnit", QueryRuleEnum.LIKE_WITH_OR);
customeRuleMap.put("orderType", QueryRuleEnum.LIKE_WITH_OR);
customeRuleMap.put("orderStatus", QueryRuleEnum.LIKE_WITH_OR);
QueryWrapper<SystemOrder> queryWrapper = QueryGenerator.initQueryWrapper(systemOrder, req.getParameterMap(),customeRuleMap);
Page<SystemOrder> page = new Page<SystemOrder>(pageNo, pageSize);
IPage<SystemOrder> pageList = systemOrderService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param systemOrder
* @return
*/
@AutoLog(value = "系统订单表-添加")
@ApiOperation(value="系统订单表-添加", notes="系统订单表-添加")
@RequiresPermissions("systemorder:nu_system_order:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody SystemOrder systemOrder) {
systemOrderService.save(systemOrder);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param systemOrder
* @return
*/
@AutoLog(value = "系统订单表-编辑")
@ApiOperation(value="系统订单表-编辑", notes="系统订单表-编辑")
@RequiresPermissions("systemorder:nu_system_order:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody SystemOrder systemOrder) {
systemOrderService.updateById(systemOrder);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "系统订单表-通过id删除")
@ApiOperation(value="系统订单表-通过id删除", notes="系统订单表-通过id删除")
@RequiresPermissions("systemorder:nu_system_order:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
systemOrderService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "系统订单表-批量删除")
@ApiOperation(value="系统订单表-批量删除", notes="系统订单表-批量删除")
@RequiresPermissions("systemorder:nu_system_order:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.systemOrderService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "系统订单表-通过id查询")
@ApiOperation(value="系统订单表-通过id查询", notes="系统订单表-通过id查询")
@GetMapping(value = "/queryById")
public Result<SystemOrder> queryById(@RequestParam(name="id",required=true) String id) {
SystemOrder systemOrder = systemOrderService.getById(id);
if(systemOrder==null) {
return Result.error("未找到对应数据");
}
return Result.OK(systemOrder);
}
/**
* 导出excel
*
* @param request
* @param systemOrder
*/
@RequiresPermissions("systemorder:nu_system_order:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, SystemOrder systemOrder) {
return super.exportXls(request, systemOrder, SystemOrder.class, "系统订单表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("systemorder:nu_system_order:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, SystemOrder.class);
}
}

View File

@ -0,0 +1,98 @@
package com.nu.modules.systemorder.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import org.jeecg.common.constant.ProvinceCityArea;
import org.jeecg.common.util.SpringContextUtils;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 系统订单表
* @Author: 张明远
* @Date: 2025-05-30
* @Version: V1.0
*/
@Data
@TableName("nu_system_order")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="nu_system_order对象", description="系统订单表")
public class SystemOrder implements Serializable {
private static final long serialVersionUID = 1L;
/**主键ID*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键ID")
private java.lang.String id;
/**机构编码*/
@Excel(name = "机构编码", width = 15)
@ApiModelProperty(value = "机构编码")
private java.lang.String orgCode;
/**护理单元*/
@Excel(name = "护理单元", width = 15)
@ApiModelProperty(value = "护理单元")
private java.lang.String nursingUnit;
/**支付人的openId*/
@Excel(name = "支付人的openId", width = 15)
@ApiModelProperty(value = "支付人的openId")
private java.lang.String openId;
/**客户id系统中的*/
@Excel(name = "客户id系统中的", width = 15)
@ApiModelProperty(value = "客户id系统中的")
private java.lang.String customerId;
/**订单类型字典order_type*/
@Excel(name = "订单类型字典order_type", width = 15, dicCode = "order_type")
@Dict(dicCode = "order_type")
@ApiModelProperty(value = "订单类型字典order_type")
private java.lang.String orderType;
/**金额*/
@Excel(name = "金额", width = 15)
@ApiModelProperty(value = "金额")
private java.math.BigDecimal amount;
/**下单时间*/
@Excel(name = "下单时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "下单时间")
private java.util.Date orderTime;
/**回执时间*/
@Excel(name = "回执时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "回执时间")
private java.util.Date receiptTime;
/**订单状态*/
@Excel(name = "订单状态", width = 15)
@ApiModelProperty(value = "订单状态")
private java.lang.String orderStatus;
/**订单名称*/
@Excel(name = "订单名称", width = 15)
@ApiModelProperty(value = "订单名称")
private java.lang.String orderName;
/**订单描述(咱们自己说明的跟微信支付回执没关系)*/
@Excel(name = "订单描述(咱们自己说明的跟微信支付回执没关系)", width = 15)
@ApiModelProperty(value = "订单描述(咱们自己说明的跟微信支付回执没关系)")
private java.lang.String orderDescription;
/**回执描述*/
@Excel(name = "回执描述", width = 15)
@ApiModelProperty(value = "回执描述")
private java.lang.String receiptDescription;
/**回执报文*/
@Excel(name = "回执报文", width = 15)
@ApiModelProperty(value = "回执报文")
private java.lang.String receiptMessage;
}

View File

@ -0,0 +1,17 @@
package com.nu.modules.systemorder.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.nu.modules.systemorder.entity.SystemOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 系统订单表
* @Author: 张明远
* @Date: 2025-05-30
* @Version: V1.0
*/
public interface SystemOrderMapper extends BaseMapper<SystemOrder> {
}

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.nu.modules.systemorder.mapper.SystemOrderMapper">
</mapper>

View File

@ -0,0 +1,14 @@
package com.nu.modules.systemorder.service;
import com.nu.modules.systemorder.entity.SystemOrder;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 系统订单表
* @Author: 张明远
* @Date: 2025-05-30
* @Version: V1.0
*/
public interface ISystemOrderService extends IService<SystemOrder> {
}

View File

@ -0,0 +1,19 @@
package com.nu.modules.systemorder.service.impl;
import com.nu.modules.systemorder.entity.SystemOrder;
import com.nu.modules.systemorder.mapper.SystemOrderMapper;
import com.nu.modules.systemorder.service.ISystemOrderService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 系统订单表
* @Author: 张明远
* @Date: 2025-05-30
* @Version: V1.0
*/
@Service
public class SystemOrderServiceImpl extends ServiceImpl<SystemOrderMapper, SystemOrder> implements ISystemOrderService {
}

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.nursingunit.boot</groupId>
<artifactId>nursing-unit-parent</artifactId>
<version>2.0.0</version>
</parent>
<description>支付功能模块</description>
<modelVersion>4.0.0</modelVersion>
<artifactId>nursing-unit-payment</artifactId>
<packaging>pom</packaging>
<modules>
<module>nu-payment-api</module>
<module>nu-payment-biz</module>
</modules>
</project>

View File

@ -38,10 +38,10 @@ import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* @Description: 分类字典 * @Description: 分类字典
* @Author: jeecg-boot * @Author: jeecg-boot
* @Date: 2019-05-29 * @Date: 2019-05-29
* @Version: V1.0 * @Version: V1.0
*/ */
@RestController @RestController
@ -51,13 +51,14 @@ public class SysCategoryController {
@Autowired @Autowired
private ISysCategoryService sysCategoryService; private ISysCategoryService sysCategoryService;
/** /**
* 分类编码0 * 分类编码0
*/ */
private static final String CATEGORY_ROOT_CODE = "0"; private static final String CATEGORY_ROOT_CODE = "0";
/** /**
* 分页列表查询 * 分页列表查询
*
* @param sysCategory * @param sysCategory
* @param pageNo * @param pageNo
* @param pageSize * @param pageSize
@ -66,17 +67,14 @@ public class SysCategoryController {
*/ */
@GetMapping(value = "/rootList") @GetMapping(value = "/rootList")
public Result<IPage<SysCategory>> queryPageList(SysCategory sysCategory, public Result<IPage<SysCategory>> queryPageList(SysCategory sysCategory,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) { HttpServletRequest req) {
if(oConvertUtils.isEmpty(sysCategory.getPid())){
sysCategory.setPid("0");
}
Result<IPage<SysCategory>> result = new Result<IPage<SysCategory>>(); Result<IPage<SysCategory>> result = new Result<IPage<SysCategory>>();
//------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------
//是否开启系统管理模块的多租户数据隔离SAAS多租户模式 //是否开启系统管理模块的多租户数据隔离SAAS多租户模式
if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
sysCategory.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(),0)); sysCategory.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0));
} }
//------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------
@ -86,8 +84,8 @@ public class SysCategoryController {
String name = sysCategory.getName(); String name = sysCategory.getName();
String code = sysCategory.getCode(); String code = sysCategory.getCode();
//QueryWrapper<SysCategory> queryWrapper = new QueryWrapper<SysCategory>(); //QueryWrapper<SysCategory> queryWrapper = new QueryWrapper<SysCategory>();
if(StringUtils.isBlank(name)&&StringUtils.isBlank(code)){ if (StringUtils.isBlank(name) && StringUtils.isBlank(code)) {
queryWrapper.eq("pid", sysCategory.getPid()); queryWrapper.eq("pid","0");
} }
//--author:liusq---date:20211119 -----for: 分类字典页面查询条件配置--------end //--author:liusq---date:20211119 -----for: 分类字典页面查询条件配置--------end
//--author:os_chengtgen---date:20190804 -----for:vue3 分类字典页面显示错误,issues:377--------end //--author:os_chengtgen---date:20190804 -----for:vue3 分类字典页面显示错误,issues:377--------end
@ -100,15 +98,16 @@ public class SysCategoryController {
} }
@GetMapping(value = "/childList") @GetMapping(value = "/childList")
public Result<List<SysCategory>> queryPageList(SysCategory sysCategory,HttpServletRequest req) { public Result<List<SysCategory>> queryPageList(SysCategory sysCategory, HttpServletRequest req) {
//------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------
//是否开启系统管理模块的多租户数据隔离SAAS多租户模式 //是否开启系统管理模块的多租户数据隔离SAAS多租户模式
if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
sysCategory.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); sysCategory.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0));
} }
//------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------
Result<List<SysCategory>> result = new Result<List<SysCategory>>(); Result<List<SysCategory>> result = new Result<List<SysCategory>>();
QueryWrapper<SysCategory> queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, req.getParameterMap()); QueryWrapper<SysCategory> queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, req.getParameterMap());
queryWrapper.orderByAsc("code");
List<SysCategory> list = sysCategoryService.list(queryWrapper); List<SysCategory> list = sysCategoryService.list(queryWrapper);
result.setSuccess(true); result.setSuccess(true);
result.setResult(list); result.setResult(list);
@ -117,7 +116,8 @@ public class SysCategoryController {
/** /**
* 添加 * 添加
*
* @param sysCategory * @param sysCategory
* @return * @return
*/ */
@ -128,24 +128,25 @@ public class SysCategoryController {
sysCategoryService.addSysCategory(sysCategory); sysCategoryService.addSysCategory(sysCategory);
result.success("添加成功!"); result.success("添加成功!");
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(),e); log.error(e.getMessage(), e);
result.error500("操作失败"); result.error500("编码重复!");
} }
return result; return result;
} }
/** /**
* 编辑 * 编辑
*
* @param sysCategory * @param sysCategory
* @return * @return
*/ */
@RequestMapping(value = "/edit", method = { RequestMethod.PUT,RequestMethod.POST }) @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<SysCategory> edit(@RequestBody SysCategory sysCategory) { public Result<SysCategory> edit(@RequestBody SysCategory sysCategory) {
Result<SysCategory> result = new Result<SysCategory>(); Result<SysCategory> result = new Result<SysCategory>();
SysCategory sysCategoryEntity = sysCategoryService.getById(sysCategory.getId()); SysCategory sysCategoryEntity = sysCategoryService.getById(sysCategory.getId());
if(sysCategoryEntity==null) { if (sysCategoryEntity == null) {
result.error500("未找到对应实体"); result.error500("编码重复!");
}else { } else {
sysCategoryService.updateSysCategory(sysCategory); sysCategoryService.updateSysCategory(sysCategory);
result.success("修改成功!"); result.success("修改成功!");
} }
@ -153,17 +154,18 @@ public class SysCategoryController {
} }
/** /**
* 通过id删除 * 通过id删除
*
* @param id * @param id
* @return * @return
*/ */
@DeleteMapping(value = "/delete") @DeleteMapping(value = "/delete")
public Result<SysCategory> delete(@RequestParam(name="id",required=true) String id) { public Result<SysCategory> delete(@RequestParam(name = "id", required = true) String id) {
Result<SysCategory> result = new Result<SysCategory>(); Result<SysCategory> result = new Result<SysCategory>();
SysCategory sysCategory = sysCategoryService.getById(id); SysCategory sysCategory = sysCategoryService.getById(id);
if(sysCategory==null) { if (sysCategory == null) {
result.error500("未找到对应实体"); result.error500("未找到对应实体");
}else { } else {
this.sysCategoryService.deleteSysCategory(id); this.sysCategoryService.deleteSysCategory(id);
result.success("删除成功!"); result.success("删除成功!");
} }
@ -172,16 +174,17 @@ public class SysCategoryController {
} }
/** /**
* 批量删除 * 批量删除
*
* @param ids * @param ids
* @return * @return
*/ */
@DeleteMapping(value = "/deleteBatch") @DeleteMapping(value = "/deleteBatch")
public Result<SysCategory> deleteBatch(@RequestParam(name="ids",required=true) String ids) { public Result<SysCategory> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
Result<SysCategory> result = new Result<SysCategory>(); Result<SysCategory> result = new Result<SysCategory>();
if(ids==null || "".equals(ids.trim())) { if (ids == null || "".equals(ids.trim())) {
result.error500("参数不识别!"); result.error500("参数不识别!");
}else { } else {
this.sysCategoryService.deleteSysCategory(ids); this.sysCategoryService.deleteSysCategory(ids);
result.success("删除成功!"); result.success("删除成功!");
} }
@ -189,170 +192,170 @@ public class SysCategoryController {
} }
/** /**
* 通过id查询 * 通过id查询
*
* @param id * @param id
* @return * @return
*/ */
@GetMapping(value = "/queryById") @GetMapping(value = "/queryById")
public Result<SysCategory> queryById(@RequestParam(name="id",required=true) String id) { public Result<SysCategory> queryById(@RequestParam(name = "id", required = true) String id) {
Result<SysCategory> result = new Result<SysCategory>(); Result<SysCategory> result = new Result<SysCategory>();
SysCategory sysCategory = sysCategoryService.getById(id); SysCategory sysCategory = sysCategoryService.getById(id);
if(sysCategory==null) { if (sysCategory == null) {
result.error500("未找到对应实体"); result.error500("未找到对应实体");
}else { } else {
result.setResult(sysCategory); result.setResult(sysCategory);
result.setSuccess(true); result.setSuccess(true);
} }
return result; return result;
} }
/** /**
* 导出excel * 导出excel
* *
* @param request * @param request
*/ */
@RequestMapping(value = "/exportXls") @RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, SysCategory sysCategory) { public ModelAndView exportXls(HttpServletRequest request, SysCategory sysCategory) {
//------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------
//是否开启系统管理模块的多租户数据隔离SAAS多租户模式 //是否开启系统管理模块的多租户数据隔离SAAS多租户模式
if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
sysCategory.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); sysCategory.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0));
} }
//------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------
// Step.1 组装查询条件查询数据 // Step.1 组装查询条件查询数据
QueryWrapper<SysCategory> queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, request.getParameterMap()); QueryWrapper<SysCategory> queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, request.getParameterMap());
List<SysCategory> pageList = sysCategoryService.list(queryWrapper); List<SysCategory> pageList = sysCategoryService.list(queryWrapper);
// Step.2 AutoPoi 导出Excel // Step.2 AutoPoi 导出Excel
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
// 过滤选中数据 // 过滤选中数据
String selections = request.getParameter("selections"); String selections = request.getParameter("selections");
if(oConvertUtils.isEmpty(selections)) { if (oConvertUtils.isEmpty(selections)) {
mv.addObject(NormalExcelConstants.DATA_LIST, pageList); mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
}else { } else {
List<String> selectionList = Arrays.asList(selections.split(",")); List<String> selectionList = Arrays.asList(selections.split(","));
List<SysCategory> exportList = pageList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList()); List<SysCategory> exportList = pageList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList());
mv.addObject(NormalExcelConstants.DATA_LIST, exportList); mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
} }
//导出文件名称 //导出文件名称
mv.addObject(NormalExcelConstants.FILE_NAME, "分类字典列表"); mv.addObject(NormalExcelConstants.FILE_NAME, "分类字典列表");
mv.addObject(NormalExcelConstants.CLASS, SysCategory.class); mv.addObject(NormalExcelConstants.CLASS, SysCategory.class);
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("分类字典列表数据", "导出人:"+user.getRealname(), "导出信息")); mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("分类字典列表数据", "导出人:" + user.getRealname(), "导出信息"));
return mv; return mv;
} }
/** /**
* 通过excel导入数据 * 通过excel导入数据
* *
* @param request * @param request
* @param response * @param response
* @return * @return
*/ */
@RequestMapping(value = "/importExcel", method = RequestMethod.POST) @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) throws IOException{ public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) throws IOException {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
// 错误信息 // 错误信息
List<String> errorMessage = new ArrayList<>(); List<String> errorMessage = new ArrayList<>();
int successLines = 0, errorLines = 0; int successLines = 0, errorLines = 0;
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
// 获取上传文件对象 // 获取上传文件对象
MultipartFile file = entity.getValue(); MultipartFile file = entity.getValue();
ImportParams params = new ImportParams(); ImportParams params = new ImportParams();
params.setTitleRows(2); params.setTitleRows(2);
params.setHeadRows(1); params.setHeadRows(1);
params.setNeedSave(true); params.setNeedSave(true);
try { try {
List<SysCategory> listSysCategorys = ExcelImportUtil.importExcel(file.getInputStream(), SysCategory.class, params); List<SysCategory> listSysCategorys = ExcelImportUtil.importExcel(file.getInputStream(), SysCategory.class, params);
//按照编码长度排序 //按照编码长度排序
Collections.sort(listSysCategorys); Collections.sort(listSysCategorys);
log.info("排序后的list====>",listSysCategorys); log.info("排序后的list====>", listSysCategorys);
for (int i = 0; i < listSysCategorys.size(); i++) { for (int i = 0; i < listSysCategorys.size(); i++) {
SysCategory sysCategoryExcel = listSysCategorys.get(i); SysCategory sysCategoryExcel = listSysCategorys.get(i);
String code = sysCategoryExcel.getCode(); String code = sysCategoryExcel.getCode();
if(code.length()>3){ if (code.length() > 3) {
String pCode = sysCategoryExcel.getCode().substring(0,code.length()-3); String pCode = sysCategoryExcel.getCode().substring(0, code.length() - 3);
log.info("pCode====>",pCode); log.info("pCode====>", pCode);
String pId=sysCategoryService.queryIdByCode(pCode); String pId = sysCategoryService.queryIdByCode(pCode);
log.info("pId====>",pId); log.info("pId====>", pId);
if(StringUtils.isNotBlank(pId)){ if (StringUtils.isNotBlank(pId)) {
sysCategoryExcel.setPid(pId); sysCategoryExcel.setPid(pId);
} }
}else{ } else {
sysCategoryExcel.setPid("0"); sysCategoryExcel.setPid("0");
} }
try { try {
sysCategoryService.save(sysCategoryExcel); sysCategoryService.save(sysCategoryExcel);
successLines++; successLines++;
} catch (Exception e) { } catch (Exception e) {
errorLines++; errorLines++;
String message = e.getMessage().toLowerCase(); String message = e.getMessage().toLowerCase();
int lineNumber = i + 1; int lineNumber = i + 1;
// 通过索引名判断出错信息 // 通过索引名判断出错信息
if (message.contains(CommonConstant.SQL_INDEX_UNIQ_CATEGORY_CODE)) { if (message.contains(CommonConstant.SQL_INDEX_UNIQ_CATEGORY_CODE)) {
errorMessage.add("" + lineNumber + " 行:分类编码已经存在,忽略导入。"); errorMessage.add("" + lineNumber + " 行:分类编码已经存在,忽略导入。");
} else { } else {
errorMessage.add("" + lineNumber + " 行:未知错误,忽略导入"); errorMessage.add("" + lineNumber + " 行:未知错误,忽略导入");
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
} }
} }
} catch (Exception e) { } catch (Exception e) {
errorMessage.add("发生异常:" + e.getMessage()); errorMessage.add("发生异常:" + e.getMessage());
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} finally { } finally {
try { try {
file.getInputStream().close(); file.getInputStream().close();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
} }
return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage); return ImportExcelUtil.imporReturnRes(errorLines, successLines, errorMessage);
} }
/**
/** * 加载单个数据 用于回显
* 加载单个数据 用于回显 */
*/ @RequestMapping(value = "/loadOne", method = RequestMethod.GET)
@RequestMapping(value = "/loadOne", method = RequestMethod.GET) public Result<SysCategory> loadOne(@RequestParam(name = "field") String field, @RequestParam(name = "val") String val) {
public Result<SysCategory> loadOne(@RequestParam(name="field") String field,@RequestParam(name="val") String val) { Result<SysCategory> result = new Result<SysCategory>();
Result<SysCategory> result = new Result<SysCategory>(); try {
try {
//update-begin-author:taoyan date:2022-5-6 for: issues/3663 sql注入问题 //update-begin-author:taoyan date:2022-5-6 for: issues/3663 sql注入问题
boolean isClassField = ReflectHelper.isClassField(field, SysCategory.class); boolean isClassField = ReflectHelper.isClassField(field, SysCategory.class);
if (!isClassField) { if (!isClassField) {
return Result.error("字段无效,请检查!"); return Result.error("字段无效,请检查!");
} }
//update-end-author:taoyan date:2022-5-6 for: issues/3663 sql注入问题 //update-end-author:taoyan date:2022-5-6 for: issues/3663 sql注入问题
QueryWrapper<SysCategory> query = new QueryWrapper<SysCategory>(); QueryWrapper<SysCategory> query = new QueryWrapper<SysCategory>();
query.eq(field, val); query.eq(field, val);
List<SysCategory> ls = this.sysCategoryService.list(query); List<SysCategory> ls = this.sysCategoryService.list(query);
if(ls==null || ls.size()==0) { if (ls == null || ls.size() == 0) {
result.setMessage("查询无果"); result.setMessage("查询无果");
result.setSuccess(false); result.setSuccess(false);
}else if(ls.size()>1) { } else if (ls.size() > 1) {
result.setMessage("查询数据异常,["+field+"]存在多个值:"+val); result.setMessage("查询数据异常,[" + field + "]存在多个值:" + val);
result.setSuccess(false); result.setSuccess(false);
}else { } else {
result.setSuccess(true); result.setSuccess(true);
result.setResult(ls.get(0)); result.setResult(ls.get(0));
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
result.setMessage(e.getMessage()); result.setMessage(e.getMessage());
result.setSuccess(false); result.setSuccess(false);
} }
return result; return result;
} }
/** /**
* 加载节点的子数据 * 加载节点的子数据
*/ */
@RequestMapping(value = "/loadTreeChildren", method = RequestMethod.GET) @RequestMapping(value = "/loadTreeChildren", method = RequestMethod.GET)
public Result<List<TreeSelectModel>> loadTreeChildren(@RequestParam(name="pid") String pid) { public Result<List<TreeSelectModel>> loadTreeChildren(@RequestParam(name = "pid") String pid) {
Result<List<TreeSelectModel>> result = new Result<List<TreeSelectModel>>(); Result<List<TreeSelectModel>> result = new Result<List<TreeSelectModel>>();
try { try {
List<TreeSelectModel> ls = this.sysCategoryService.queryListByPid(pid); List<TreeSelectModel> ls = this.sysCategoryService.queryListByPid(pid);
@ -366,173 +369,217 @@ public class SysCategoryController {
return result; return result;
} }
/** /**
* 加载一级节点/如果是同步 则所有数据 * 加载一级节点/如果是同步 则所有数据
*/ */
@RequestMapping(value = "/loadTreeRoot", method = RequestMethod.GET) @RequestMapping(value = "/loadTreeRoot", method = RequestMethod.GET)
public Result<List<TreeSelectModel>> loadTreeRoot(@RequestParam(name="async") Boolean async,@RequestParam(name="pcode") String pcode) { public Result<List<TreeSelectModel>> loadTreeRoot(@RequestParam(name = "async") Boolean async, @RequestParam(name = "pcode") String pcode) {
Result<List<TreeSelectModel>> result = new Result<List<TreeSelectModel>>(); Result<List<TreeSelectModel>> result = new Result<List<TreeSelectModel>>();
try { try {
List<TreeSelectModel> ls = this.sysCategoryService.queryListByCode(pcode); List<TreeSelectModel> ls = this.sysCategoryService.queryListByCode(pcode);
if(!async) { if (!async) {
loadAllCategoryChildren(ls); //框架自带傻逼for循环套sql 慎用 慢到想骂人 实测几百个非叶节点就已经爆炸了
} // loadAllCategoryChildren(ls);
result.setResult(ls); //一次sql查所有系统代码处理循环生成树结构
result.setSuccess(true); loadAllCategoryChildrenQO(ls);
} catch (Exception e) { }
e.printStackTrace(); result.setResult(ls);
result.setMessage(e.getMessage()); result.setSuccess(true);
result.setSuccess(false); } catch (Exception e) {
} e.printStackTrace();
return result; result.setMessage(e.getMessage());
} result.setSuccess(false);
}
return result;
}
/** /**
* 递归求子节点 同步加载用到 * 递归求子节点 同步加载用到
*/ */
private void loadAllCategoryChildren(List<TreeSelectModel> ls) { private void loadAllCategoryChildren(List<TreeSelectModel> ls) {
for (TreeSelectModel tsm : ls) { for (TreeSelectModel tsm : ls) {
List<TreeSelectModel> temp = this.sysCategoryService.queryListByPid(tsm.getKey()); List<TreeSelectModel> temp = this.sysCategoryService.queryListByPid(tsm.getKey());
if(temp!=null && temp.size()>0) { if (temp != null && temp.size() > 0) {
tsm.setChildren(temp); tsm.setChildren(temp);
loadAllCategoryChildren(temp); loadAllCategoryChildren(temp);
} }
} }
} }
/** /**
* 校验编码 * 只查询一次数据库代码内容循环处理避免for-sql
* @param pid *
* @param code * @param ls
* @return */
*/ private void loadAllCategoryChildrenQO(List<TreeSelectModel> ls) {
@GetMapping(value = "/checkCode") // 1. 首先获取所有可能的pid值
public Result<?> checkCode(@RequestParam(name="pid",required = false) String pid,@RequestParam(name="code",required = false) String code) { Set<String> pids = new HashSet<>();
if(oConvertUtils.isEmpty(code)){ for (TreeSelectModel tsm : ls) {
pids.add(tsm.getKey());
}
// 2. 一次性查询所有可能需要的节点
List<TreeSelectModel> allNodes = this.sysCategoryService.queryAllCategories();
// 3. 构建节点映射表
Map<String, List<TreeSelectModel>> nodeMap = new HashMap<>();
for (TreeSelectModel node : allNodes) {
String parentId = node.getParentId();
nodeMap.computeIfAbsent(parentId, k -> new ArrayList<>()).add(node);
}
// 4. 递归构建树结构
buildTree(ls, nodeMap);
}
private void buildTree(List<TreeSelectModel> nodes, Map<String, List<TreeSelectModel>> nodeMap) {
for (TreeSelectModel node : nodes) {
String nodeKey = node.getKey();
List<TreeSelectModel> children = nodeMap.get(nodeKey);
if (children != null && !children.isEmpty()) {
node.setChildren(children);
buildTree(children, nodeMap);
}
}
}
/**
* 校验编码
*
* @param pid
* @param code
* @return
*/
@GetMapping(value = "/checkCode")
public Result<?> checkCode(@RequestParam(name = "pid", required = false) String pid, @RequestParam(name = "code", required = false) String code) {
if (oConvertUtils.isEmpty(code)) {
return Result.error("错误,类型编码为空!"); return Result.error("错误,类型编码为空!");
} }
if(oConvertUtils.isEmpty(pid)){ if (oConvertUtils.isEmpty(pid)) {
return Result.ok(); return Result.ok();
} }
SysCategory parent = this.sysCategoryService.getById(pid); SysCategory parent = this.sysCategoryService.getById(pid);
if(code.startsWith(parent.getCode())){ if (code.startsWith(parent.getCode())) {
return Result.ok(); return Result.ok();
}else{ } else {
return Result.error("编码不符合规范,须以\""+parent.getCode()+"\"开头!"); return Result.error("编码不符合规范,须以\"" + parent.getCode() + "\"开头!");
} }
} }
/** /**
* 分类字典树控件 加载节点 * 分类字典树控件 加载节点
* @param pid *
* @param pcode * @param pid
* @param condition * @param pcode
* @return * @param condition
*/ * @return
@RequestMapping(value = "/loadTreeData", method = RequestMethod.GET) */
public Result<List<TreeSelectModel>> loadDict(@RequestParam(name="pid",required = false) String pid,@RequestParam(name="pcode",required = false) String pcode, @RequestParam(name="condition",required = false) String condition) { @RequestMapping(value = "/loadTreeData", method = RequestMethod.GET)
Result<List<TreeSelectModel>> result = new Result<List<TreeSelectModel>>(); public Result<List<TreeSelectModel>> loadDict(@RequestParam(name = "pid", required = false) String pid, @RequestParam(name = "pcode", required = false) String pcode, @RequestParam(name = "condition", required = false) String condition) {
//pid如果传值了 就忽略pcode的作用 Result<List<TreeSelectModel>> result = new Result<List<TreeSelectModel>>();
if(oConvertUtils.isEmpty(pid)){ //pid如果传值了 就忽略pcode的作用
if(oConvertUtils.isEmpty(pcode)){ if (oConvertUtils.isEmpty(pid)) {
if (oConvertUtils.isEmpty(pcode)) {
result.setSuccess(false); result.setSuccess(false);
result.setMessage("加载分类字典树参数有误.[null]!"); result.setMessage("加载分类字典树参数有误.[null]!");
return result; return result;
}else{ } else {
if(ISysCategoryService.ROOT_PID_VALUE.equals(pcode)){ if (ISysCategoryService.ROOT_PID_VALUE.equals(pcode)) {
pid = ISysCategoryService.ROOT_PID_VALUE; pid = ISysCategoryService.ROOT_PID_VALUE;
}else{ } else {
pid = this.sysCategoryService.queryIdByCode(pcode); pid = this.sysCategoryService.queryIdByCode(pcode);
} }
if(oConvertUtils.isEmpty(pid)){ if (oConvertUtils.isEmpty(pid)) {
result.setSuccess(false); result.setSuccess(false);
result.setMessage("加载分类字典树参数有误.[code]!"); result.setMessage("加载分类字典树参数有误.[code]!");
return result; return result;
} }
} }
} }
Map<String, String> query = null; Map<String, String> query = null;
if(oConvertUtils.isNotEmpty(condition)) { if (oConvertUtils.isNotEmpty(condition)) {
query = JSON.parseObject(condition, Map.class); query = JSON.parseObject(condition, Map.class);
} }
List<TreeSelectModel> ls = sysCategoryService.queryListByPid(pid,query); List<TreeSelectModel> ls = sysCategoryService.queryListByPid(pid, query);
result.setSuccess(true); result.setSuccess(true);
result.setResult(ls); result.setResult(ls);
return result; return result;
} }
/** /**
* 分类字典控件数据回显[表单页面] * 分类字典控件数据回显[表单页面]
* *
* @param ids * @param ids
* @param delNotExist 是否移除不存在的项默认为true设为false如果某个key不存在数据库中则直接返回key本身 * @param delNotExist 是否移除不存在的项默认为true设为false如果某个key不存在数据库中则直接返回key本身
* @return * @return
*/ */
@RequestMapping(value = "/loadDictItem", method = RequestMethod.GET) @RequestMapping(value = "/loadDictItem", method = RequestMethod.GET)
public Result<List<String>> loadDictItem(@RequestParam(name = "ids") String ids, @RequestParam(name = "delNotExist", required = false, defaultValue = "true") boolean delNotExist) { public Result<List<String>> loadDictItem(@RequestParam(name = "ids") String ids, @RequestParam(name = "delNotExist", required = false, defaultValue = "true") boolean delNotExist) {
Result<List<String>> result = new Result<>(); Result<List<String>> result = new Result<>();
// 非空判断 // 非空判断
if (StringUtils.isBlank(ids)) { if (StringUtils.isBlank(ids)) {
result.setSuccess(false); result.setSuccess(false);
result.setMessage("ids 不能为空"); result.setMessage("ids 不能为空");
return result; return result;
} }
// 查询数据 // 查询数据
List<String> textList = sysCategoryService.loadDictItem(ids, delNotExist); List<String> textList = sysCategoryService.loadDictItem(ids, delNotExist);
result.setSuccess(true); result.setSuccess(true);
result.setResult(textList); result.setResult(textList);
return result; return result;
} }
/** /**
* [列表页面]加载分类字典数据 用于值的替换 * [列表页面]加载分类字典数据 用于值的替换
* @param code *
* @return * @param code
*/ * @return
@RequestMapping(value = "/loadAllData", method = RequestMethod.GET) */
public Result<List<DictModel>> loadAllData(@RequestParam(name="code",required = true) String code) { @RequestMapping(value = "/loadAllData", method = RequestMethod.GET)
Result<List<DictModel>> result = new Result<List<DictModel>>(); public Result<List<DictModel>> loadAllData(@RequestParam(name = "code", required = true) String code) {
LambdaQueryWrapper<SysCategory> query = new LambdaQueryWrapper<SysCategory>(); Result<List<DictModel>> result = new Result<List<DictModel>>();
if(oConvertUtils.isNotEmpty(code) && !CATEGORY_ROOT_CODE.equals(code)){ LambdaQueryWrapper<SysCategory> query = new LambdaQueryWrapper<SysCategory>();
query.likeRight(SysCategory::getCode,code); if (oConvertUtils.isNotEmpty(code) && !CATEGORY_ROOT_CODE.equals(code)) {
} query.likeRight(SysCategory::getCode, code);
List<SysCategory> list = this.sysCategoryService.list(query); }
if(list==null || list.size()==0) { List<SysCategory> list = this.sysCategoryService.list(query);
result.setMessage("无数据,参数有误.[code]"); if (list == null || list.size() == 0) {
result.setSuccess(false); result.setMessage("无数据,参数有误.[code]");
return result; result.setSuccess(false);
} return result;
List<DictModel> rdList = new ArrayList<DictModel>(); }
for (SysCategory c : list) { List<DictModel> rdList = new ArrayList<DictModel>();
rdList.add(new DictModel(c.getId(),c.getName())); for (SysCategory c : list) {
} rdList.add(new DictModel(c.getId(), c.getName()));
result.setSuccess(true); }
result.setResult(rdList); result.setSuccess(true);
return result; result.setResult(rdList);
} return result;
}
/** /**
* 根据父级id批量查询子节点 * 根据父级id批量查询子节点
* @param parentIds *
* @return * @param parentIds
*/ * @return
@GetMapping("/getChildListBatch") */
public Result getChildListBatch(@RequestParam("parentIds") String parentIds) { @GetMapping("/getChildListBatch")
try { public Result getChildListBatch(@RequestParam("parentIds") String parentIds) {
QueryWrapper<SysCategory> queryWrapper = new QueryWrapper<>(); try {
List<String> parentIdList = Arrays.asList(parentIds.split(",")); QueryWrapper<SysCategory> queryWrapper = new QueryWrapper<>();
queryWrapper.in("pid", parentIdList); List<String> parentIdList = Arrays.asList(parentIds.split(","));
List<SysCategory> list = sysCategoryService.list(queryWrapper); queryWrapper.in("pid", parentIdList);
IPage<SysCategory> pageList = new Page<>(1, 10, list.size()); List<SysCategory> list = sysCategoryService.list(queryWrapper);
pageList.setRecords(list); IPage<SysCategory> pageList = new Page<>(1, 10, list.size());
return Result.OK(pageList); pageList.setRecords(list);
} catch (Exception e) { return Result.OK(pageList);
log.error(e.getMessage(), e); } catch (Exception e) {
return Result.error("批量查询子节点失败:" + e.getMessage()); log.error(e.getMessage(), e);
} return Result.error("批量查询子节点失败:" + e.getMessage());
} }
}
} }

View File

@ -20,109 +20,180 @@ import java.util.Objects;
* <p> * <p>
* *
* @Author Steve * @Author Steve
* @Since 2019-01-22 * @Since 2019-01-22
*/ */
@Data @Data
@TableName("sys_depart") @TableName("sys_depart")
public class SysDepart implements Serializable { public class SysDepart implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/**ID*/ /**
@TableId(type = IdType.ASSIGN_ID) * ID
private String id; */
/**父机构ID*/ @TableId(type = IdType.ASSIGN_ID)
private String parentId; private String id;
/**机构/部门名称*/ /**
@Excel(name="机构/部门名称",width=15) * 父机构ID
private String departName; */
/**英文名*/ private String parentId;
@Excel(name="英文名",width=15) /**
private String departNameEn; * 机构/部门名称
/**缩写*/ */
private String departNameAbbr; @Excel(name = "机构/部门名称", width = 15)
/**排序*/ private String departName;
@Excel(name="排序",width=15) /**
private Integer departOrder; * 英文名
/**描述*/ */
@Excel(name="描述",width=15) @Excel(name = "英文名", width = 15)
private String description; private String departNameEn;
/**机构类别 1=公司2=组织机构3=岗位*/ /**
@Excel(name="机构类别",width=15,dicCode="org_category") * 缩写
private String orgCategory; */
/**机构类型*/ private String departNameAbbr;
private String orgType; /**
/**机构编码*/ * 排序
@Excel(name="机构编码",width=15) */
private String orgCode; @Excel(name = "排序", width = 15)
/**协议+域名*/ private Integer departOrder;
@Excel(name="协议+域名",width=30) /**
private String url; * 描述
/**手机号*/ */
@Excel(name="手机号",width=15) @Excel(name = "描述", width = 15)
private String mobile; private String description;
/**传真*/ /**
@Excel(name="传真",width=15) * 机构类别 1=公司2=组织机构3=岗位
private String fax; */
/**地址*/ @Excel(name = "机构类别", width = 15, dicCode = "org_category")
@Excel(name="地址",width=15) private String orgCategory;
private String address; /**
/**备注*/ * 机构类型
@Excel(name="备注",width=15) */
private String memo; private String orgType;
/**状态1启用0不启用*/ /**
@Dict(dicCode = "depart_status") * 机构编码
private String status; */
/**删除状态0正常1已删除*/ @Excel(name = "机构编码", width = 15)
@Dict(dicCode = "del_flag") private String orgCode;
private String delFlag; /**
/**对接企业微信的ID*/ * 协议+域名
private String qywxIdentifier; */
/**对接钉钉的部门ID*/ @Excel(name = "协议+域名", width = 30)
private String dingIdentifier; private String url;
/**创建人*/ /**
private String createBy; * 省份
/**创建日期*/ */
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "省份", width = 30)
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private String province;
private Date createTime; /**
/**更新人*/ * 城市
private String updateBy; */
/**更新日期*/ @Excel(name = "城市", width = 30)
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") private String city;
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") /**
private Date updateTime; * 区县
/**租户ID*/ */
private java.lang.Integer tenantId; @Excel(name = "区县", width = 30)
private String district;
/**
* 手机号
*/
@Excel(name = "手机号", width = 15)
private String mobile;
/**
* 传真
*/
@Excel(name = "传真", width = 15)
private String fax;
/**
* 地址
*/
@Excel(name = "地址", width = 15)
private String address;
/**
* 备注
*/
@Excel(name = "备注", width = 15)
private String memo;
/**
* 状态1启用0不启用
*/
@Dict(dicCode = "depart_status")
private String status;
/**
* 删除状态0正常1已删除
*/
@Dict(dicCode = "del_flag")
private String delFlag;
/**
* 对接企业微信的ID
*/
private String qywxIdentifier;
/**
* 对接钉钉的部门ID
*/
private String dingIdentifier;
/**
* 创建人
*/
private String createBy;
/**
* 创建日期
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 更新人
*/
private String updateBy;
/**
* 更新日期
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/**
* 租户ID
*/
private java.lang.Integer tenantId;
/**是否有叶子节点: 1是0否*/ /**
private Integer izLeaf; * 是否有叶子节点: 1是0否
*/
private Integer izLeaf;
/**各机构服务器后台接口地址*/ /**
private String serverUrl; * 各机构服务器后台接口地址
*/
private String serverUrl;
//update-begin---author:wangshuai ---date:20200308 for[JTC-119]在部门管理菜单下设置部门负责人新增字段负责人ids和旧的负责人ids //update-begin---author:wangshuai ---date:20200308 for[JTC-119]在部门管理菜单下设置部门负责人新增字段负责人ids和旧的负责人ids
/**部门负责人的ids*/ /**
@TableField(exist = false) * 部门负责人的ids
private String directorUserIds; */
/**旧的部门负责人的ids(用于比较删除和新增)*/ @TableField(exist = false)
@TableField(exist = false) private String directorUserIds;
/**
* 旧的部门负责人的ids(用于比较删除和新增)
*/
@TableField(exist = false)
private String oldDirectorUserIds; private String oldDirectorUserIds;
//update-end---author:wangshuai ---date:20200308 for[JTC-119]新增字段负责人ids和旧的负责人ids //update-end---author:wangshuai ---date:20200308 for[JTC-119]新增字段负责人ids和旧的负责人ids
/** /**
* 重写equals方法 * 重写equals方法
*/ */
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) { if (this == o) {
return true; return true;
} }
if (o == null || getClass() != o.getClass()) { if (o == null || getClass() != o.getClass()) {
return false; return false;
} }
if (!super.equals(o)) { if (!super.equals(o)) {
return false; return false;
} }
SysDepart depart = (SysDepart) o; SysDepart depart = (SysDepart) o;
return Objects.equals(id, depart.id) && return Objects.equals(id, depart.id) &&
Objects.equals(parentId, depart.parentId) && Objects.equals(parentId, depart.parentId) &&
@ -134,6 +205,10 @@ public class SysDepart implements Serializable {
Objects.equals(orgCategory, depart.orgCategory) && Objects.equals(orgCategory, depart.orgCategory) &&
Objects.equals(orgType, depart.orgType) && Objects.equals(orgType, depart.orgType) &&
Objects.equals(orgCode, depart.orgCode) && Objects.equals(orgCode, depart.orgCode) &&
Objects.equals(url, depart.url) &&
Objects.equals(province, depart.province) &&
Objects.equals(city, depart.city) &&
Objects.equals(district, depart.district) &&
Objects.equals(mobile, depart.mobile) && Objects.equals(mobile, depart.mobile) &&
Objects.equals(fax, depart.fax) && Objects.equals(fax, depart.fax) &&
Objects.equals(address, depart.address) && Objects.equals(address, depart.address) &&
@ -153,8 +228,8 @@ public class SysDepart implements Serializable {
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(super.hashCode(), id, parentId, departName, return Objects.hash(super.hashCode(), id, parentId, departName,
departNameEn, departNameAbbr, departOrder, description,orgCategory, departNameEn, departNameAbbr, departOrder, description, orgCategory,
orgType, orgCode, mobile, fax, address, memo, status, orgType, orgCode, url, province, city, district, mobile, fax, address, memo, status,
delFlag, createBy, createTime, updateBy, updateTime, tenantId); delFlag, createBy, createTime, updateBy, updateTime, tenantId);
} }
} }

View File

@ -23,16 +23,16 @@ public interface SysCategoryMapper extends BaseMapper<SysCategory> {
/** /**
* 根据父级ID查询树节点数据 * 根据父级ID查询树节点数据
* @param pid * @param pid
* @param query * @param query
* @return * @return
*/ */
public List<TreeSelectModel> queryListByPid(@Param("pid") String pid,@Param("query") Map<String, String> query); public List<TreeSelectModel> queryListByPid(@Param("pid") String pid,@Param("query") Map<String, String> query);
/** /**
* 通过code查询分类字典表 * 通过code查询分类字典表
* @param code * @param code
* @return * @return
*/ */
@Select("SELECT ID FROM sys_category WHERE CODE = #{code,jdbcType=VARCHAR}") @Select("SELECT ID FROM sys_category WHERE CODE = #{code,jdbcType=VARCHAR}")
public String queryIdByCode(@Param("code") String code); public String queryIdByCode(@Param("code") String code);
@ -48,4 +48,6 @@ public interface SysCategoryMapper extends BaseMapper<SysCategory> {
@InterceptorIgnore(tenantLine = "true") @InterceptorIgnore(tenantLine = "true")
@Select("SELECT code FROM sys_category WHERE ID = #{id}") @Select("SELECT code FROM sys_category WHERE ID = #{id}")
SysCategory selectSysCategoryById(@Param("id") String id); SysCategory selectSysCategoryById(@Param("id") String id);
List<TreeSelectModel> queryAllCategories();
} }

View File

@ -33,5 +33,12 @@
</if> </if>
</select> </select>
<select id="queryAllCategories" resultType="org.jeecg.modules.system.model.TreeSelectModel">
select code,
name as "title",
id as "key",
(case when has_child = '1' then 0 else 1 end) as isLeaf,
pid as parentId
from sys_category
</select>
</mapper> </mapper>

View File

@ -61,6 +61,12 @@ public class SysDepartTreeModel implements Serializable {
private String url; private String url;
private String province;
private String city;
private String district;
private String mobile; private String mobile;
private String fax; private String fax;
@ -113,6 +119,9 @@ public class SysDepartTreeModel implements Serializable {
this.orgType = sysDepart.getOrgType(); this.orgType = sysDepart.getOrgType();
this.orgCode = sysDepart.getOrgCode(); this.orgCode = sysDepart.getOrgCode();
this.url = sysDepart.getUrl(); this.url = sysDepart.getUrl();
this.province = sysDepart.getProvince();
this.city = sysDepart.getCity();
this.district = sysDepart.getDistrict();
this.mobile = sysDepart.getMobile(); this.mobile = sysDepart.getMobile();
this.fax = sysDepart.getFax(); this.fax = sysDepart.getFax();
this.address = sysDepart.getAddress(); this.address = sysDepart.getAddress();
@ -372,6 +381,30 @@ public class SysDepartTreeModel implements Serializable {
this.directorUserIds = directorUserIds; this.directorUserIds = directorUserIds;
} }
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getDistrict() {
return district;
}
public void setDistrict(String district) {
this.district = district;
}
/** /**
* 重写equals方法 * 重写equals方法
*/ */
@ -395,6 +428,9 @@ public class SysDepartTreeModel implements Serializable {
Objects.equals(orgType, model.orgType) && Objects.equals(orgType, model.orgType) &&
Objects.equals(orgCode, model.orgCode) && Objects.equals(orgCode, model.orgCode) &&
Objects.equals(url, model.url) && Objects.equals(url, model.url) &&
Objects.equals(province, model.province) &&
Objects.equals(city, model.city) &&
Objects.equals(district, model.district) &&
Objects.equals(mobile, model.mobile) && Objects.equals(mobile, model.mobile) &&
Objects.equals(fax, model.fax) && Objects.equals(fax, model.fax) &&
Objects.equals(address, model.address) && Objects.equals(address, model.address) &&
@ -417,7 +453,7 @@ public class SysDepartTreeModel implements Serializable {
public int hashCode() { public int hashCode() {
return Objects.hash(id, parentId, departName, departNameEn, departNameAbbr, return Objects.hash(id, parentId, departName, departNameEn, departNameAbbr,
departOrder, description, orgCategory, orgType, orgCode, url, mobile, fax, address, departOrder, description, orgCategory, orgType, orgCode, url, province, city, district, mobile, fax, address,
memo, status, delFlag, qywxIdentifier, createBy, createTime, updateBy, updateTime, memo, status, delFlag, qywxIdentifier, createBy, createTime, updateBy, updateTime,
children, directorUserIds); children, directorUserIds);
} }

View File

@ -19,38 +19,40 @@ public interface ISysCategoryService extends IService<SysCategory> {
/**根节点父ID的值*/ /**根节点父ID的值*/
public static final String ROOT_PID_VALUE = "0"; public static final String ROOT_PID_VALUE = "0";
/** /**
* 存在子节点 * 存在子节点
*/ */
public static final String HAS_CHILD = "1"; public static final String HAS_CHILD = "1";
/** /**
* 添加分类字典 * 添加分类字典
* @param sysCategory * @param sysCategory
*/ */
void addSysCategory(SysCategory sysCategory); void addSysCategory(SysCategory sysCategory);
/** /**
* 修改分类字典 * 修改分类字典
* @param sysCategory * @param sysCategory
*/ */
void updateSysCategory(SysCategory sysCategory); void updateSysCategory(SysCategory sysCategory);
/** /**
* 根据父级编码加载分类字典的数据 * 根据父级编码加载分类字典的数据
* @param pcode * @param pcode
* @return * @return
* @throws JeecgBootException * @throws JeecgBootException
*/ */
public List<TreeSelectModel> queryListByCode(String pcode) throws JeecgBootException; public List<TreeSelectModel> queryListByCode(String pcode) throws JeecgBootException;
/** /**
* 根据pid查询子节点集合 * 根据pid查询子节点集合
* @param pid * @param pid
* @return * @return
*/ */
public List<TreeSelectModel> queryListByPid(String pid); public List<TreeSelectModel> queryListByPid(String pid);
public List<TreeSelectModel> queryAllCategories();
/** /**
* 根据pid查询子节点集合,支持查询条件 * 根据pid查询子节点集合,支持查询条件
* @param pid * @param pid

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang.StringUtils;
import org.jeecg.common.constant.FillRuleConstant; import org.jeecg.common.constant.FillRuleConstant;
import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.exception.JeecgBootException;
@ -23,7 +24,7 @@ import java.util.stream.Collectors;
/** /**
* @Description: 分类字典 * @Description: 分类字典
* @Author: jeecg-boot * @Author: jeecg-boot
* @Date: 2019-05-29 * @Date: 2019-05-29
* @Version: V1.0 * @Version: V1.0
*/ */
@Service @Service
@ -34,14 +35,14 @@ public class SysCategoryServiceImpl extends ServiceImpl<SysCategoryMapper, SysCa
String categoryCode = ""; String categoryCode = "";
String categoryPid = ISysCategoryService.ROOT_PID_VALUE; String categoryPid = ISysCategoryService.ROOT_PID_VALUE;
String parentCode = null; String parentCode = null;
if(oConvertUtils.isNotEmpty(sysCategory.getPid())){ if (oConvertUtils.isNotEmpty(sysCategory.getPid())) {
categoryPid = sysCategory.getPid(); categoryPid = sysCategory.getPid();
//PID 不是根节点 说明需要设置父节点 hasChild 为1 //PID 不是根节点 说明需要设置父节点 hasChild 为1
if(!ISysCategoryService.ROOT_PID_VALUE.equals(categoryPid)){ if (!ISysCategoryService.ROOT_PID_VALUE.equals(categoryPid)) {
SysCategory parent = baseMapper.selectById(categoryPid); SysCategory parent = baseMapper.selectById(categoryPid);
parentCode = parent.getCode(); parentCode = parent.getCode();
if(parent!=null && !ISysCategoryService.HAS_CHILD.equals(parent.getHasChild())){ if (parent != null && !ISysCategoryService.HAS_CHILD.equals(parent.getHasChild())) {
parent.setHasChild(ISysCategoryService.HAS_CHILD); parent.setHasChild(ISysCategoryService.HAS_CHILD);
baseMapper.updateById(parent); baseMapper.updateById(parent);
} }
@ -49,22 +50,24 @@ public class SysCategoryServiceImpl extends ServiceImpl<SysCategoryMapper, SysCa
} }
//update-begin--Author:baihailong Date:20191209 for分类字典编码规则生成器做成公用配置 //update-begin--Author:baihailong Date:20191209 for分类字典编码规则生成器做成公用配置
JSONObject formData = new JSONObject(); JSONObject formData = new JSONObject();
formData.put("pid",categoryPid); formData.put("pid", categoryPid);
categoryCode = (String) FillRuleUtil.executeRule(FillRuleConstant.CATEGORY,formData); categoryCode = (String) FillRuleUtil.executeRule(FillRuleConstant.CATEGORY, formData);
//update-end--Author:baihailong Date:20191209 for分类字典编码规则生成器做成公用配置 //update-end--Author:baihailong Date:20191209 for分类字典编码规则生成器做成公用配置
sysCategory.setCode(categoryCode); if (StringUtils.isBlank(sysCategory.getCode())) {
sysCategory.setCode(categoryCode);
}
sysCategory.setPid(categoryPid); sysCategory.setPid(categoryPid);
baseMapper.insert(sysCategory); baseMapper.insert(sysCategory);
} }
@Override @Override
public void updateSysCategory(SysCategory sysCategory) { public void updateSysCategory(SysCategory sysCategory) {
if(oConvertUtils.isEmpty(sysCategory.getPid())){ if (oConvertUtils.isEmpty(sysCategory.getPid())) {
sysCategory.setPid(ISysCategoryService.ROOT_PID_VALUE); sysCategory.setPid(ISysCategoryService.ROOT_PID_VALUE);
}else{ } else {
//如果当前节点父ID不为空 则设置父节点的hasChild 为1 //如果当前节点父ID不为空 则设置父节点的hasChild 为1
SysCategory parent = baseMapper.selectById(sysCategory.getPid()); SysCategory parent = baseMapper.selectById(sysCategory.getPid());
if(parent!=null && !ISysCategoryService.HAS_CHILD.equals(parent.getHasChild())){ if (parent != null && !ISysCategoryService.HAS_CHILD.equals(parent.getHasChild())) {
parent.setHasChild(ISysCategoryService.HAS_CHILD); parent.setHasChild(ISysCategoryService.HAS_CHILD);
baseMapper.updateById(parent); baseMapper.updateById(parent);
} }
@ -73,35 +76,40 @@ public class SysCategoryServiceImpl extends ServiceImpl<SysCategoryMapper, SysCa
} }
@Override @Override
public List<TreeSelectModel> queryListByCode(String pcode) throws JeecgBootException{ public List<TreeSelectModel> queryListByCode(String pcode) throws JeecgBootException {
String pid = ROOT_PID_VALUE; String pid = ROOT_PID_VALUE;
if(oConvertUtils.isNotEmpty(pcode)) { if (oConvertUtils.isNotEmpty(pcode)) {
List<SysCategory> list = baseMapper.selectList(new LambdaQueryWrapper<SysCategory>().eq(SysCategory::getCode, pcode)); List<SysCategory> list = baseMapper.selectList(new LambdaQueryWrapper<SysCategory>().eq(SysCategory::getCode, pcode));
if(list==null || list.size() ==0) { if (list == null || list.size() == 0) {
throw new JeecgBootException("该编码【"+pcode+"】不存在,请核实!"); throw new JeecgBootException("该编码【" + pcode + "】不存在,请核实!");
} }
if(list.size()>1) { if (list.size() > 1) {
throw new JeecgBootException("该编码【"+pcode+"】存在多个,请核实!"); throw new JeecgBootException("该编码【" + pcode + "】存在多个,请核实!");
} }
pid = list.get(0).getId(); pid = list.get(0).getId();
} }
return baseMapper.queryListByPid(pid,null); return baseMapper.queryListByPid(pid, null);
} }
@Override @Override
public List<TreeSelectModel> queryListByPid(String pid) { public List<TreeSelectModel> queryListByPid(String pid) {
if(oConvertUtils.isEmpty(pid)) { if (oConvertUtils.isEmpty(pid)) {
pid = ROOT_PID_VALUE; pid = ROOT_PID_VALUE;
} }
return baseMapper.queryListByPid(pid,null); return baseMapper.queryListByPid(pid, null);
}
@Override
public List<TreeSelectModel> queryAllCategories() {
return baseMapper.queryAllCategories();
} }
@Override @Override
public List<TreeSelectModel> queryListByPid(String pid, Map<String, String> condition) { public List<TreeSelectModel> queryListByPid(String pid, Map<String, String> condition) {
if(oConvertUtils.isEmpty(pid)) { if (oConvertUtils.isEmpty(pid)) {
pid = ROOT_PID_VALUE; pid = ROOT_PID_VALUE;
} }
return baseMapper.queryListByPid(pid,condition); return baseMapper.queryListByPid(pid, condition);
} }
@Override @Override
@ -117,17 +125,18 @@ public class SysCategoryServiceImpl extends ServiceImpl<SysCategoryMapper, SysCa
//1.删除时将节点下所有子节点一并删除 //1.删除时将节点下所有子节点一并删除
this.baseMapper.deleteBatchIds(Arrays.asList(allIds.split(","))); this.baseMapper.deleteBatchIds(Arrays.asList(allIds.split(",")));
//2.将父节点中已经没有下级的节点修改为没有子节点 //2.将父节点中已经没有下级的节点修改为没有子节点
if(oConvertUtils.isNotEmpty(pids)){ if (oConvertUtils.isNotEmpty(pids)) {
LambdaUpdateWrapper<SysCategory> updateWrapper = new UpdateWrapper<SysCategory>() LambdaUpdateWrapper<SysCategory> updateWrapper = new UpdateWrapper<SysCategory>()
.lambda() .lambda()
.in(SysCategory::getId,Arrays.asList(pids.split(","))) .in(SysCategory::getId, Arrays.asList(pids.split(",")))
.set(SysCategory::getHasChild,"0"); .set(SysCategory::getHasChild, "0");
this.update(updateWrapper); this.update(updateWrapper);
} }
} }
/** /**
* 查询节点下所有子节点 * 查询节点下所有子节点
*
* @param ids * @param ids
* @return * @return
*/ */
@ -136,13 +145,13 @@ public class SysCategoryServiceImpl extends ServiceImpl<SysCategoryMapper, SysCa
String[] idArr = ids.split(","); String[] idArr = ids.split(",");
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
for (String pidVal : idArr) { for (String pidVal : idArr) {
if(pidVal != null){ if (pidVal != null) {
if(!sb.toString().contains(pidVal)){ if (!sb.toString().contains(pidVal)) {
if(sb.toString().length() > 0){ if (sb.toString().length() > 0) {
sb.append(","); sb.append(",");
} }
sb.append(pidVal); sb.append(pidVal);
this.getTreeChildIds(pidVal,sb); this.getTreeChildIds(pidVal, sb);
} }
} }
} }
@ -151,6 +160,7 @@ public class SysCategoryServiceImpl extends ServiceImpl<SysCategoryMapper, SysCa
/** /**
* 查询需修改标识的父节点ids * 查询需修改标识的父节点ids
*
* @param ids * @param ids
* @return * @return
*/ */
@ -159,24 +169,24 @@ public class SysCategoryServiceImpl extends ServiceImpl<SysCategoryMapper, SysCa
//获取id数组 //获取id数组
String[] idArr = ids.split(","); String[] idArr = ids.split(",");
for (String id : idArr) { for (String id : idArr) {
if(id != null){ if (id != null) {
SysCategory category = this.baseMapper.selectById(id); SysCategory category = this.baseMapper.selectById(id);
//根据id查询pid值 //根据id查询pid值
String metaPid = category.getPid(); String metaPid = category.getPid();
//查询此节点上一级是否还有其他子节点 //查询此节点上一级是否还有其他子节点
LambdaQueryWrapper<SysCategory> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysCategory> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysCategory::getPid,metaPid); queryWrapper.eq(SysCategory::getPid, metaPid);
queryWrapper.notIn(SysCategory::getId,Arrays.asList(idArr)); queryWrapper.notIn(SysCategory::getId, Arrays.asList(idArr));
List<SysCategory> dataList = this.baseMapper.selectList(queryWrapper); List<SysCategory> dataList = this.baseMapper.selectList(queryWrapper);
boolean flag = (dataList == null || dataList.size()==0) && !Arrays.asList(idArr).contains(metaPid) boolean flag = (dataList == null || dataList.size() == 0) && !Arrays.asList(idArr).contains(metaPid)
&& !sb.toString().contains(metaPid); && !sb.toString().contains(metaPid);
if(flag){ if (flag) {
//如果当前节点原本有子节点 现在木有了更新状态 //如果当前节点原本有子节点 现在木有了更新状态
sb.append(metaPid).append(","); sb.append(metaPid).append(",");
} }
} }
} }
if(sb.toString().endsWith(SymbolConstant.COMMA)){ if (sb.toString().endsWith(SymbolConstant.COMMA)) {
sb = sb.deleteCharAt(sb.length() - 1); sb = sb.deleteCharAt(sb.length() - 1);
} }
return sb.toString(); return sb.toString();
@ -184,17 +194,18 @@ public class SysCategoryServiceImpl extends ServiceImpl<SysCategoryMapper, SysCa
/** /**
* 递归 根据父id获取子节点id * 递归 根据父id获取子节点id
*
* @param pidVal * @param pidVal
* @param sb * @param sb
* @return * @return
*/ */
private StringBuffer getTreeChildIds(String pidVal,StringBuffer sb){ private StringBuffer getTreeChildIds(String pidVal, StringBuffer sb) {
LambdaQueryWrapper<SysCategory> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysCategory> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysCategory::getPid,pidVal); queryWrapper.eq(SysCategory::getPid, pidVal);
List<SysCategory> dataList = baseMapper.selectList(queryWrapper); List<SysCategory> dataList = baseMapper.selectList(queryWrapper);
if(dataList != null && dataList.size()>0){ if (dataList != null && dataList.size() > 0) {
for(SysCategory category : dataList) { for (SysCategory category : dataList) {
if(!sb.toString().contains(category.getId())){ if (!sb.toString().contains(category.getId())) {
sb.append(",").append(category.getId()); sb.append(",").append(category.getId());
} }
this.getTreeChildIds(category.getId(), sb); this.getTreeChildIds(category.getId(), sb);

View File

@ -388,3 +388,18 @@ aliyun:
accessKeySecret: pQBMT6TlUWgRfvvDnOu0IKVYXCfKee accessKeySecret: pQBMT6TlUWgRfvvDnOu0IKVYXCfKee
#文件传输秘钥 #文件传输秘钥
downloadkey: hP2K9Z!WLuj"M#8, downloadkey: hP2K9Z!WLuj"M#8,
# 微信支付
wxpay:
# APIv3密钥
api-v3-key: asdfiuzwe3534565478WETDSAFRWEq1E
# APPID
appid: wx8fc3e4305d2fbf0b
# 商户ID
mch-id: 1717618860
# 商户API证书序列号
mch-serial-no: 3E51C9D24F64CE50E9273E544561D29684AB21C7
# 接收结果通知地址
notify-domain: https://www.focusnu.com/nursing-unit_0010507/weiXinPay/callback
# 商户私钥文件路径
private-key-path: /opt/nu001/apiclient_key.pem

View File

@ -249,8 +249,10 @@ jeecg:
pc: http://localhost:3100 pc: http://localhost:3100
app: http://localhost:8051 app: http://localhost:8051
path: path:
#服务指令上传目录
directivepath: /opt/upFiles001/directive
#文件上传根目录 设置 #文件上传根目录 设置
upload: /opt/upFiles upload: /opt/upFiles001
#webapp文件路径 #webapp文件路径
webapp: /opt/webapp webapp: /opt/webapp
shiro: shiro:

View File

@ -247,6 +247,8 @@ jeecg:
pc: http://localhost:3100 pc: http://localhost:3100
app: http://localhost:8051 app: http://localhost:8051
path: path:
#服务指令上传目录
directivepath: /opt/upFiles001/directive
#文件上传根目录 设置 #文件上传根目录 设置
upload: /opt/nu001/upFiles upload: /opt/nu001/upFiles
#webapp文件路径 #webapp文件路径

View File

@ -70,6 +70,8 @@
<modules> <modules>
<!-- COMMON 通用工具模块 --> <!-- COMMON 通用工具模块 -->
<module>nursing-unit-common</module> <module>nursing-unit-common</module>
<!-- PAYMENT 支付模块 -->
<module>nursing-unit-payment</module>
<!-- 框架基础包模块 --> <!-- 框架基础包模块 -->
<module>nursing-unit-base-core</module> <module>nursing-unit-base-core</module>
<!-- 框架demo功能模块 --> <!-- 框架demo功能模块 -->