Commit d524bf9b by MMF

MMF 2026-03-23 新增项目管理模块

parent d2030fee
......@@ -16,6 +16,8 @@ public class QianHeApplication
{
// System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(QianHeApplication.class, args);
System.out.println("=========================================");
System.out.println("============= 云端三基 启动成功 ==========");
System.out.println("=========================================");
}
}
package com.qianhe.common.constant;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MtConstant {
......@@ -117,4 +119,39 @@ public class MtConstant {
put(ZQCZ_RYLX_SSYZX, ZQCZ_RYLX_SSYZX_CODE);
put(ZQCZ_RYLX_BZ, ZQCZ_RYLX_BZ_CODE);
}};
/**
* 最强操作-项目专业 采油专业
*/
public static final String ZQCZ_XMZY_CYZY_CODE = "1";
/**
* 最强操作-项目专业 集输专业
*/
public static final String ZQCZ_XMZY_JSZY_CODE = "2";
/**
* 最强操作-项目类别 个人应急项目
*/
public static final String ZQCZ_XMLB_GRYJXM_CODE = "1";
/**
* 最强操作-项目类别 团队应急项目
*/
public static final String ZQCZ_XMLB_TDYJXM_CODE = "2";
/**
* 最强操作-项目类别 单人/双人操作项目
*/
public static final String ZQCZ_XMLB_DRSRCZXM_CODE = "3";
/**
* 最强操作-项目类别 团队操作项目
*/
public static final String ZQCZ_XMLB_TDCZXM_CODE = "4";
/**
* 最强操作-项目类别 列表
*/
public static final List<String> ZQCZ_XMLB_LIST = Arrays.asList(ZQCZ_XMLB_GRYJXM_CODE, ZQCZ_XMLB_TDYJXM_CODE, ZQCZ_XMLB_DRSRCZXM_CODE, ZQCZ_XMLB_TDCZXM_CODE);
}
package com.qianhe.common.enums.zqcz;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public enum ZqczCyzyGzcjEnum {
YINGJI_CHUZHI("1", "应急处置工作场景"),
XUNJIAN_CHUZHI("2", "巡检处置工作场景"),
WEIHU_BAOYANG("3", "维护保养工作场景"),
CUOSHI_ZHIXING("4", "措施执行工作场景"),
ZILIAO_HUAYAN("5", "资料化验工作场景"),
YE_YAN_YOU("6", "页岩油工作场景"),
ZHU_SHUI_ZHAN("7", "注水站工作场景");
private final String code;
private final String name;
ZqczCyzyGzcjEnum(String code, String name) {
this.code = code;
this.name = name;
}
public String getCode() {
return code;
}
public String getName() {
return name;
}
/**
* 通过编码找名称
*/
public static String getNameByCode(String code) {
if (code == null || code.trim().isEmpty()) {
return "";
}
for (ZqczCyzyGzcjEnum e : values()) {
if (e.code.equals(code.trim())) {
return e.name;
}
}
return "";
}
/**
* 通过名称找编码
*/
public static String getCodeByName(String name) {
// 空值校验
if (name == null || name.trim().isEmpty()) {
return "";
}
// 遍历枚举找匹配(忽略大小写,兼容"应急处置"/"应急处置 "等情况)
for (ZqczCyzyGzcjEnum e : values()) {
if (e.name.equalsIgnoreCase(name.trim())) {
return e.code;
}
}
// 无匹配返回空
return "";
}
/**
* 通过编码找整个枚举对象
*/
public static ZqczCyzyGzcjEnum getEnumByCode(String code) {
if (code == null || code.trim().isEmpty()) {
return null;
}
for (ZqczCyzyGzcjEnum e : values()) {
if (e.code.equals(code.trim())) {
return e;
}
}
return null;
}
/**
* 获取所有名称
*/
public static List<String> getAllNames() {
return Arrays.stream(values())
.map(ZqczCyzyGzcjEnum::getName)
.collect(Collectors.toList());
}
/**
* 获取所有编码
*/
public static List<String> getAllCodes() {
return Arrays.stream(values())
.map(ZqczCyzyGzcjEnum::getCode)
.collect(Collectors.toList());
}
/**
* 获取所有name-code的映射
*/
public static Map<String, String> getNameToCodeMap() {
return Arrays.stream(values())
.collect(Collectors.toMap(
ZqczCyzyGzcjEnum::getName, // key = name
ZqczCyzyGzcjEnum::getCode, // value = code
(oldValue, newValue) -> oldValue // 避免重复name(兜底,实际枚举中name唯一)
));
}
/**
* 获取所有的code-name的映射
*/
public static Map<String, String> getCodeToNameMap() {
return Arrays.stream(values())
.collect(Collectors.toMap(
ZqczCyzyGzcjEnum::getCode, // key = code
ZqczCyzyGzcjEnum::getName, // value = name
(oldValue, newValue) -> oldValue // 避免重复code(兜底,实际枚举中code唯一)
));
}
/**
* 将当前枚举转为「编码-名称」格式字符串(如:code-name)
*/
private String toCodeNameStr() {
return String.format("%s-%s", this.code, this.name);
}
/**
* 获取所有「编码-名称」格式的字符串列表 如:["code-name", "code-name", ...]
*/
public static List<String> getAllCodeNameStrs() {
return Arrays.stream(values())
.map(ZqczCyzyGzcjEnum::toCodeNameStr) // 调用单个拼接方法
.collect(Collectors.toList());
}
/**
* 获取所有「编码-名称」格式的字符串,以竖线分隔 如:"code-name|code-name|code-name"
*/
public static String getAllCodeNameStrWithSeparator() {
return String.join("|", getAllCodeNameStrs());
}
}
package com.qianhe.common.enums.zqcz;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public enum ZqczJszyGzcjEnum {
JISHU_YUNXING("1", "集输运行工作场景"),
JISHU_HUAYAN("2", "集输化验工作场景"),
JISHU_WEIHUBAOYANG("3", "集输维护保养工作场景"),
ZHUSHUZHAN("4", "注水站工作场景"),
YINGJI_CHUZHI("5", "应急处置工作场景"),
JISHU_CCUS("6", "集输、CCUS处理站工作场景"),
CCUS_CHUZHI("7", "CCUS处理站维护保养工作场景");
private final String code;
private final String name;
ZqczJszyGzcjEnum(String code, String name) {
this.code = code;
this.name = name;
}
public String getCode() {
return code;
}
public String getName() {
return name;
}
/**
* 通过编码找名称
*/
public static String getNameByCode(String code) {
if (code == null || code.trim().isEmpty()) {
return "";
}
for (ZqczJszyGzcjEnum e : values()) {
if (e.code.equals(code.trim())) {
return e.name;
}
}
return "";
}
/**
* 通过名称找编码
*/
public static String getCodeByName(String name) {
// 空值校验
if (name == null || name.trim().isEmpty()) {
return "";
}
// 遍历枚举找匹配(忽略大小写,兼容"应急处置"/"应急处置 "等情况)
for (ZqczJszyGzcjEnum e : values()) {
if (e.name.equalsIgnoreCase(name.trim())) {
return e.code;
}
}
// 无匹配返回空
return "";
}
/**
* 通过编码找整个枚举对象
*/
public static ZqczJszyGzcjEnum getEnumByCode(String code) {
if (code == null || code.trim().isEmpty()) {
return null;
}
for (ZqczJszyGzcjEnum e : values()) {
if (e.code.equals(code.trim())) {
return e;
}
}
return null;
}
/**
* 获取所有名称
*/
public static List<String> getAllNames() {
return Arrays.stream(values())
.map(ZqczJszyGzcjEnum::getName)
.collect(Collectors.toList());
}
/**
* 获取所有编码
*/
public static List<String> getAllCodes() {
return Arrays.stream(values())
.map(ZqczJszyGzcjEnum::getCode)
.collect(Collectors.toList());
}
/**
* 获取所有name-code的映射
*/
public static Map<String, String> getNameToCodeMap() {
return Arrays.stream(values())
.collect(Collectors.toMap(
ZqczJszyGzcjEnum::getName, // key = name
ZqczJszyGzcjEnum::getCode, // value = code
(oldValue, newValue) -> oldValue // 避免重复name(兜底,实际枚举中name唯一)
));
}
/**
* 获取所有的code-name的映射
*/
public static Map<String, String> getCodeToNameMap() {
return Arrays.stream(values())
.collect(Collectors.toMap(
ZqczJszyGzcjEnum::getCode, // key = code
ZqczJszyGzcjEnum::getName, // value = name
(oldValue, newValue) -> oldValue // 避免重复code(兜底,实际枚举中code唯一)
));
}
/**
* 将当前枚举转为「编码-名称」格式字符串(如:code-name)
*/
private String toCodeNameStr() {
return String.format("%s-%s", this.code, this.name);
}
/**
* 获取所有「编码-名称」格式的字符串列表 如:["code-name", "code-name", ...]
*/
public static List<String> getAllCodeNameStrs() {
return Arrays.stream(values())
.map(ZqczJszyGzcjEnum::toCodeNameStr) // 调用单个拼接方法
.collect(Collectors.toList());
}
/**
* 获取所有「编码-名称」格式的字符串,以竖线分隔 如:"code-name|code-name|code-name"
*/
public static String getAllCodeNameStrWithSeparator() {
return String.join("|", getAllCodeNameStrs());
}
}
package com.qianhe.common.enums.zqcz;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public enum ZqczXmlbEnum {
GEREN_YINGJI("1", "个人应急项目"),
TUANDUI_YINGJI("2", "团队应急项目"),
DANREN_SHUANGREN("3", "单人/双人操作项目"),
TUANDUI_CAOZUO("4", "团队操作项目"),
;
private final String code;
private final String name;
ZqczXmlbEnum(String code, String name) {
this.code = code;
this.name = name;
}
public String getCode() {
return code;
}
public String getName() {
return name;
}
/**
* 通过编码找名称
*/
public static String getNameByCode(String code) {
if (code == null || code.trim().isEmpty()) {
return "";
}
for (ZqczXmlbEnum e : values()) {
if (e.code.equals(code.trim())) {
return e.name;
}
}
return "";
}
/**
* 通过名称找编码
*/
public static String getCodeByName(String name) {
// 空值校验
if (name == null || name.trim().isEmpty()) {
return "";
}
// 遍历枚举找匹配(忽略大小写,兼容"应急处置"/"应急处置 "等情况)
for (ZqczXmlbEnum e : values()) {
if (e.name.equalsIgnoreCase(name.trim())) {
return e.code;
}
}
// 无匹配返回空
return "";
}
/**
* 通过编码找整个枚举对象
*/
public static ZqczXmlbEnum getEnumByCode(String code) {
if (code == null || code.trim().isEmpty()) {
return null;
}
for (ZqczXmlbEnum e : values()) {
if (e.code.equals(code.trim())) {
return e;
}
}
return null;
}
/**
* 获取所有名称
*/
public static List<String> getAllNames() {
return Arrays.stream(values())
.map(ZqczXmlbEnum::getName)
.collect(Collectors.toList());
}
/**
* 获取所有编码
*/
public static List<String> getAllCodes() {
return Arrays.stream(values())
.map(ZqczXmlbEnum::getCode)
.collect(Collectors.toList());
}
/**
* 获取所有name-code的映射
*/
public static Map<String, String> getNameToCodeMap() {
return Arrays.stream(values())
.collect(Collectors.toMap(
ZqczXmlbEnum::getName, // key = name
ZqczXmlbEnum::getCode, // value = code
(oldValue, newValue) -> oldValue // 避免重复name(兜底,实际枚举中name唯一)
));
}
/**
* 获取所有的code-name的映射
*/
public static Map<String, String> getCodeToNameMap() {
return Arrays.stream(values())
.collect(Collectors.toMap(
ZqczXmlbEnum::getCode, // key = code
ZqczXmlbEnum::getName, // value = name
(oldValue, newValue) -> oldValue // 避免重复code(兜底,实际枚举中code唯一)
));
}
/**
* 将当前枚举转为「编码-名称」格式字符串(如:code-name)
*/
private String toCodeNameStr() {
return String.format("%s-%s", this.code, this.name);
}
/**
* 获取所有「编码-名称」格式的字符串列表 如:["code-name", "code-name", ...]
*/
public static List<String> getAllCodeNameStrs() {
return Arrays.stream(values())
.map(ZqczXmlbEnum::toCodeNameStr) // 调用单个拼接方法
.collect(Collectors.toList());
}
/**
* 获取所有「编码-名称」格式的字符串,以竖线分隔 如:"code-name|code-name|code-name"
*/
public static String getAllCodeNameStrWithSeparator() {
return String.join("|", getAllCodeNameStrs());
}
}
package com.qianhe.common.enums.zqcz;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public enum ZqczXmzyEnum {
CAIYOU_ZHUANYE("1", "采油专业"),
JISHU_ZHUANYE("2", "集输专业");
private final String code;
private final String name;
ZqczXmzyEnum(String code, String name) {
this.code = code;
this.name = name;
}
public String getCode() {
return code;
}
public String getName() {
return name;
}
/**
* 通过编码找名称
*/
public static String getNameByCode(String code) {
if (code == null || code.trim().isEmpty()) {
return "";
}
for (ZqczXmzyEnum e : values()) {
if (e.code.equals(code.trim())) {
return e.name;
}
}
return "";
}
/**
* 通过名称找编码
*/
public static String getCodeByName(String name) {
// 空值校验
if (name == null || name.trim().isEmpty()) {
return "";
}
// 遍历枚举找匹配(忽略大小写,兼容"应急处置"/"应急处置 "等情况)
for (ZqczXmzyEnum e : values()) {
if (e.name.equalsIgnoreCase(name.trim())) {
return e.code;
}
}
// 无匹配返回空
return "";
}
/**
* 通过编码找整个枚举对象
*/
public static ZqczXmzyEnum getEnumByCode(String code) {
if (code == null || code.trim().isEmpty()) {
return null;
}
for (ZqczXmzyEnum e : values()) {
if (e.code.equals(code.trim())) {
return e;
}
}
return null;
}
/**
* 获取所有名称
*/
public static List<String> getAllNames() {
return Arrays.stream(values())
.map(ZqczXmzyEnum::getName)
.collect(Collectors.toList());
}
/**
* 获取所有编码
*/
public static List<String> getAllCodes() {
return Arrays.stream(values())
.map(ZqczXmzyEnum::getCode)
.collect(Collectors.toList());
}
/**
* 获取所有name-code的映射
*/
public static Map<String, String> getNameToCodeMap() {
return Arrays.stream(values())
.collect(Collectors.toMap(
ZqczXmzyEnum::getName, // key = name
ZqczXmzyEnum::getCode, // value = code
(oldValue, newValue) -> oldValue // 避免重复name(兜底,实际枚举中name唯一)
));
}
/**
* 获取所有的code-name的映射
*/
public static Map<String, String> getCodeToNameMap() {
return Arrays.stream(values())
.collect(Collectors.toMap(
ZqczXmzyEnum::getCode, // key = code
ZqczXmzyEnum::getName, // value = name
(oldValue, newValue) -> oldValue // 避免重复code(兜底,实际枚举中code唯一)
));
}
/**
* 将当前枚举转为「编码-名称」格式字符串(如:code-name)
*/
private String toCodeNameStr() {
return String.format("%s-%s", this.code, this.name);
}
/**
* 获取所有「编码-名称」格式的字符串列表 如:["code-name", "code-name", ...]
*/
public static List<String> getAllCodeNameStrs() {
return Arrays.stream(values())
.map(ZqczXmzyEnum::toCodeNameStr) // 调用单个拼接方法
.collect(Collectors.toList());
}
/**
* 获取所有「编码-名称」格式的字符串,以竖线分隔 如:"code-name|code-name|code-name"
*/
public static String getAllCodeNameStrWithSeparator() {
return String.join("|", getAllCodeNameStrs());
}
}
package com.qianhe.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* Excel单元格解析配置
*/
@Data
@AllArgsConstructor
public class ExcelCellConfig {
/**
* 列索引
*/
private int cellIndex;
/**
* 列名称
*/
private String fieldName;
/**
* 是否必填
*/
private boolean required;
}
package com.qianhe.util;
import com.qianhe.common.exception.BusinessException;
import com.qianhe.common.utils.StringUtils;
import com.qianhe.domain.ExcelCellConfig;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.*;
import java.util.function.BiFunction;
import java.util.function.Consumer;
/**
* 自定义Excel导入工具类
*/
public class MtExcelImportUtils {
private static final DataFormatter DATA_FORMATTER = new DataFormatter();
/**
* 通用Excel导入方法(XLSX格式)
* @param file 上传的Excel文件
* @param skipHeader 是否跳过标题行(true=跳过第0行,false=不跳过)
* @param rowParser 行数据解析器:参数(行号、行对象)→ 返回解析后的业务对象
* @param batchHandler 批量数据处理器:接收解析后的业务数据列表,执行批量插入/更新等操作
* @param <T> 业务对象类型(如ZqczPwxx、ZqczRyxx)
* @return 处理的记录数
* @throws BusinessException 业务异常
*/
public static <T> int importXlsx(MultipartFile file,
boolean skipHeader,
BiFunction<Integer, XSSFRow, T> rowParser,
Consumer<List<T>> batchHandler) {
// 1. 前置校验
if (file == null || file.isEmpty()) {
throw new BusinessException("上传的Excel文件不能为空");
}
if (!file.getOriginalFilename().endsWith(".xlsx")) {
throw new BusinessException("仅支持.xlsx格式的Excel文件");
}
XSSFWorkbook workbook = null;
try {
workbook = new XSSFWorkbook(file.getInputStream());
XSSFSheet sheet = workbook.getSheetAt(0); // 读取第一个sheet
int lastRowNum = sheet.getLastRowNum();
List<T> dataList = new ArrayList<>();
// 2. 遍历行数据
for (int i = 0; i <= lastRowNum; i++) {
// 跳过标题行
if (skipHeader && i == 0) {
continue;
}
XSSFRow row = sheet.getRow(i);
if (row == null) {
continue; // 跳过空行
}
// 3. 调用业务侧的行解析逻辑
T businessObj = rowParser.apply(i, row);
if (businessObj != null) {
dataList.add(businessObj);
}
}
// 4. 校验解析结果
if (Optional.ofNullable(dataList).orElse(Collections.emptyList()).isEmpty()) {
throw new BusinessException("读取Excel文件失败,上传数据为空");
}
// 5. 调用业务侧的批量处理逻辑
batchHandler.accept(dataList);
return dataList.size();
} catch (BusinessException e) {
throw e; // 业务异常直接抛出
} catch (IOException e) {
throw new BusinessException("读取Excel文件失败,请检查文件格式或是否损坏");
} finally {
// 6. 关闭资源(避免内存泄漏)
if (workbook != null) {
try {
workbook.close();
} catch (IOException ignored) {
}
}
}
}
/**
* 批量解析Excel行数据并做非空校验
* @param row 当前行对象
* @param rowNum 当前行号(用于错误提示)
* @param cellConfigs 单元格解析配置列表
* @return 解析结果:key=字段名,value=单元格值
* @throws BusinessException 校验失败抛出异常
*/
public static Map<String, String> parseAndValidateCells(XSSFRow row, int rowNum, List<ExcelCellConfig> cellConfigs) {
Map<String, String> cellValueMap = new HashMap<>();
for (ExcelCellConfig config : cellConfigs) {
// 1. 解析单元格值(处理null单元格)
String cellValue = "";
if (row.getCell(config.getCellIndex()) != null) {
cellValue = DATA_FORMATTER.formatCellValue(row.getCell(config.getCellIndex())).trim();
}
// 2. 非空校验
if (config.isRequired() && StringUtils.isEmpty(cellValue)) {
throw new BusinessException(
String.format("导入失败,第%d行%s不能为空", rowNum + 1, config.getFieldName())
);
}
// 3. 存入解析结果
cellValueMap.put(config.getFieldName(), cellValue);
}
return cellValueMap;
}
/**
* 安全转换为整数(用于Excel数字字段解析)
* @param cellValue 单元格原始值
* @param fieldName 字段名称(用于错误提示)
* @param rowNum 行号(用于错误提示)
* @return 转换后的整数
* @throws BusinessException 转换失败抛出友好异常
*/
public static Integer safeParseInt(String cellValue, String fieldName, int rowNum) {
// 1. 空值校验(已在parseAndValidateCells中做过,这里兜底)
if (StringUtils.isEmpty(cellValue)) {
throw new BusinessException(String.format("导入失败,第%d行%s不能为空", rowNum + 1, fieldName));
}
try {
// 2. 尝试转换为整数(兼容带小数点的数字,如"10.0"转为10)
double doubleValue = Double.parseDouble(cellValue.trim());
if (doubleValue % 1 != 0) {
throw new BusinessException(String.format("导入失败,第%d行%s必须为整数(当前值:%s)", rowNum + 1, fieldName, cellValue));
}
return (int) doubleValue;
} catch (NumberFormatException e) {
// 3. 转换失败抛出友好异常
throw new BusinessException(String.format("导入失败,第%d行%s必须为数字(当前值:%s)", rowNum + 1, fieldName, cellValue));
}
}
}
......@@ -125,7 +125,8 @@ public class ZqczJcdwServiceImpl implements ZqczJcdwService {
if (workbook != null) {
try {
workbook.close();
} catch (IOException ignored) {}
} catch (IOException ignored) {
}
}
}
}
......
package com.qianhe.zqcz.xmgl.controller;
import com.qianhe.common.core.controller.BaseController;
import com.qianhe.common.core.domain.AjaxResult;
import com.qianhe.common.core.page.TableDataInfo;
import com.qianhe.common.exception.BusinessException;
import com.qianhe.common.utils.poi.ExcelUtil;
import com.qianhe.zqcz.xmgl.domain.ZqczXmgl;
import com.qianhe.zqcz.xmgl.domain.ZqczXmglQuery;
import com.qianhe.zqcz.xmgl.domain.ZqczXmglVo;
import com.qianhe.zqcz.xmgl.service.ZqczXmglService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@Slf4j
@RestController
@RequestMapping("/zqcz/xmgl")
public class ZqczXmglController extends BaseController {
@Autowired
private ZqczXmglService zqczXmglService;
/**
* 分页查询
*/
@GetMapping("/list")
public TableDataInfo list(ZqczXmglQuery zqczXmglQuery) {
startPage();
return getDataTable(zqczXmglService.list(zqczXmglQuery));
}
/**
* 查询详情
*/
@GetMapping("/{id}")
public AjaxResult info(@PathVariable Long id) {
try {
return success(zqczXmglService.info(id));
} catch (Exception e) {
log.error(e.getMessage());
return error(e.getMessage());
}
}
/**
* 新增
*/
@PostMapping
public AjaxResult add(@RequestBody ZqczXmgl zqczXmgl) {
try {
return toAjax(zqczXmglService.add(zqczXmgl, getUsername()));
} catch (BusinessException e) {
log.warn("最强操作-项目管理-新增异常:" + e.getMessage());
return warn(e.getMessage());
} catch (Exception e) {
log.error(e.getMessage());
return error(e.getMessage());
}
}
/**
* 修改
*/
@PutMapping
public AjaxResult edit(@RequestBody ZqczXmgl zqczXmgl) {
try {
return toAjax(zqczXmglService.edit(zqczXmgl, getUsername()));
} catch (BusinessException e) {
log.warn("最强操作-项目管理-修改异常:" + e.getMessage());
return warn(e.getMessage());
} catch (Exception e) {
log.error(e.getMessage());
return error(e.getMessage());
}
}
/**
* 删除
*/
@DeleteMapping("/{ids}")
public AjaxResult delete(@PathVariable Long[] ids) {
try {
return toAjax(zqczXmglService.delete(ids));
} catch (Exception e) {
log.error(e.getMessage());
return error(e.getMessage());
}
}
/**
* 导出
*/
@PostMapping("/export")
public void export(HttpServletResponse response, ZqczXmglQuery zqczXmglQuery) {
List<ZqczXmglVo> dataList = zqczXmglService.list(zqczXmglQuery);
ExcelUtil<ZqczXmglVo> util = new ExcelUtil<>(ZqczXmglVo.class);
util.exportExcel(response, dataList, "sheetName");
}
/**
* 导入
*/
@PostMapping("/import")
public AjaxResult importExcel(@RequestParam("file") MultipartFile file) {
try {
if (file.isEmpty()) return warn("文件不能为空");
int count = zqczXmglService.importExcel(file);
return success("导入成功,共导入 " + count + " 条数据");
} catch (BusinessException e) {
log.warn("最强操作-导入项目失败:" + e.getMessage());
return warn(e.getMessage());
} catch (Exception e) {
log.error("最强操作-导入项目失败:" + e.getMessage());
return error(e.getMessage());
}
}
/**
* 逻辑删除
*/
@DeleteMapping("/logicDelete/{ids}")
public AjaxResult logicDelete(@PathVariable Long[] ids) {
try {
return toAjax(zqczXmglService.logicDelete(ids));
} catch (Exception e) {
log.error(e.getMessage());
return error(e.getMessage());
}
}
}
package com.qianhe.zqcz.xmgl.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.qianhe.common.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 最强操作 项目管理 Model
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ZqczXmgl extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 项目ID
*/
private Long xmid;
/**
* 项目名称
*/
private String xmmc;
/**
* 项目专业:1 - 采油专业,2 - 集输专业 字典:zqcz_xmzy
*/
private String xmzy;
/**
* 项目类别:1 - 个人应急项目,2 - 团队应急项目,3 - 单人/双人操作项目,4 - 团队操作项目 字典:zqcz_xmlb
*/
private String xmlb;
/**
* 工作场景码表:采油 zqcz_cyzy_gzcj,集输 zqcz_jszy_gzcj
* zqcz_cyzy_gzcj: 1 - 应急处置 | 2 - 巡检处置 | 3 - 维护保养 | 4 - 措施执行 | 5 - 资料化验 | 6 - 页岩油 | 7 - 注水站
* zqcz_jszy_gzcj:1 - 集输运行 | 2 - 集输化验 | 3 - 集输维护保养 | 4 - 注水站 | 5 - 应急处置 | 6 - 集输、CCUS 处理站 | 7 - CCUS 处理站维护保养
*/
private String gzcj;
/**
* 项目要求参与人数(用于抽检)
*/
private Integer xmrs;
/**
* 状态:1 - 启用 0 - 停用(默认启用)
*/
private String xmzt;
/**
* 创建者
*/
private String create_by;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date create_time;
/**
* 修改人
*/
private String update_by;
/**
* 修改时间(更新时自动刷新)
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date update_time;
/**
* 备注
*/
private String remark;
/**
* 预留1
*/
private String yl1;
/**
* 预留2
*/
private String yl2;
/**
* 预留3
*/
private String yl3;
/**
* 预留4
*/
private String yl4;
/**
* 预留5
*/
private String yl5;
}
package com.qianhe.zqcz.xmgl.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.qianhe.common.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 最强操作 项目管理 Model
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ZqczXmglQuery extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 项目名称
*/
private String xmmc;
/**
* 项目专业:1 - 采油专业,2 - 集输专业 字典:zqcz_xmzy
*/
private String xmzy;
/**
* 项目类别:1 - 个人应急项目,2 - 团队应急项目,3 - 单人/双人操作项目,4 - 团队操作项目 字典:zqcz_xmlb
*/
private String xmlb;
/**
* 工作场景码表:采油 zqcz_cyzy_gzcj,集输 zqcz_jszy_gzcj
* zqcz_cyzy_gzcj: 1 - 应急处置 | 2 - 巡检处置 | 3 - 维护保养 | 4 - 措施执行 | 5 - 资料化验 | 6 - 页岩油 | 7 - 注水站
* zqcz_jszy_gzcj:1 - 集输运行 | 2 - 集输化验 | 3 - 集输维护保养 | 4 - 注水站 | 5 - 应急处置 | 6 - 集输、CCUS 处理站 | 7 - CCUS 处理站维护保养
*/
private String gzcj;
/**
* 状态:1 - 启用 0 - 停用(默认启用)
*/
private String xmzt;
}
package com.qianhe.zqcz.xmgl.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.qianhe.common.annotation.Excel;
import com.qianhe.common.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* 最强操作 项目管理 Model
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ZqczXmglVo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 项目ID
*/
private Long xmid;
/**
* 项目类别:1 - 个人应急项目,2 - 团队应急项目,3 - 单人/双人操作项目,4 - 团队操作项目 字典:zqcz_xmlb
*/
@Excel(name = "项目类别",dictType = "zqcz_xmlb",type = Excel.Type.EXPORT)
private String xmlb;
/**
* 工作场景码表:采油 zqcz_cyzy_gzcj,集输 zqcz_jszy_gzcj
* zqcz_cyzy_gzcj: 1 - 应急处置 | 2 - 巡检处置 | 3 - 维护保养 | 4 - 措施执行 | 5 - 资料化验 | 6 - 页岩油 | 7 - 注水站
* zqcz_jszy_gzcj:1 - 集输运行 | 2 - 集输化验 | 3 - 集输维护保养 | 4 - 注水站 | 5 - 应急处置 | 6 - 集输、CCUS 处理站 | 7 - CCUS 处理站维护保养
*/
private String gzcj;
@Excel(name = "工作场景")
private String gzcjmc;
/**
* 项目名称
*/
@Excel(name = "项目名称")
private String xmmc;
/**
* 项目要求参与人数(用于抽检)
*/
@Excel(name = "项目人数")
private Integer xmrs;
/**
* 项目专业:1 - 采油专业,2 - 集输专业 字典:zqcz_xmzy
*/
private String xmzy;
}
package com.qianhe.zqcz.xmgl.mapper;
import com.qianhe.zqcz.xmgl.domain.ZqczXmgl;
import com.qianhe.zqcz.xmgl.domain.ZqczXmglQuery;
import com.qianhe.zqcz.xmgl.domain.ZqczXmglVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface ZqczXmglMapper {
/**
* 条件查询
*/
List<ZqczXmglVo> list(ZqczXmglQuery zqczXmglQuery);
/**
* 查询详情
*/
ZqczXmglVo info(@Param("xmid") Long xmid);
/**
* 新增
*/
int add(ZqczXmgl zqczXmgl);
/**
* 修改
*/
int edit(ZqczXmgl zqczXmgl);
/**
* 删除
*/
int delete(Long[] ids);
/**
* 批量新增
*/
int batchAdd(@Param("dataList") List<ZqczXmgl> dataList);
/**
* 逻辑删除
*/
int logicDelete(Long[] ids);
}
package com.qianhe.zqcz.xmgl.service;
import com.qianhe.zqcz.xmgl.domain.ZqczXmgl;
import com.qianhe.zqcz.xmgl.domain.ZqczXmglQuery;
import com.qianhe.zqcz.xmgl.domain.ZqczXmglVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
public interface ZqczXmglService {
/**
* 条件查询
*/
List<ZqczXmglVo> list(ZqczXmglQuery zqczXmglQuery);
/**
* 查询详情
*/
ZqczXmglVo info(Long xmid);
/**
* 新增
*/
int add(ZqczXmgl zqczXmgl, String username);
/**
* 修改
*/
int edit(ZqczXmgl zqczXmgl, String username);
/**
* 删除
*/
int delete(Long[] ids);
/**
* 导入
*/
int importExcel(MultipartFile file);
/**
* 逻辑删除
*/
int logicDelete(Long[] ids);
}
package com.qianhe.zqcz.xmgl.service.impl;
import com.qianhe.common.constant.MtConstant;
import com.qianhe.common.enums.zqcz.ZqczCyzyGzcjEnum;
import com.qianhe.common.enums.zqcz.ZqczJszyGzcjEnum;
import com.qianhe.common.enums.zqcz.ZqczXmlbEnum;
import com.qianhe.common.enums.zqcz.ZqczXmzyEnum;
import com.qianhe.common.exception.BusinessException;
import com.qianhe.domain.ExcelCellConfig;
import com.qianhe.util.MtExcelImportUtils;
import com.qianhe.common.utils.SecurityUtils;
import com.qianhe.common.utils.StringUtils;
import com.qianhe.zqcz.xmgl.domain.ZqczXmgl;
import com.qianhe.zqcz.xmgl.domain.ZqczXmglQuery;
import com.qianhe.zqcz.xmgl.domain.ZqczXmglVo;
import com.qianhe.zqcz.xmgl.mapper.ZqczXmglMapper;
import com.qianhe.zqcz.xmgl.service.ZqczXmglService;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
public class ZqczXmglServiceImpl implements ZqczXmglService {
@Autowired
private ZqczXmglMapper zqczXmglMapper;
/**
* 条件查询
*/
@Override
public List<ZqczXmglVo> list(ZqczXmglQuery zqczXmglQuery) {
List<ZqczXmglVo> dataList = zqczXmglMapper.list(zqczXmglQuery);
return dataList;
}
/**
* 查询详情
*/
@Override
public ZqczXmglVo info(Long id) {
ZqczXmglVo info = zqczXmglMapper.info(id);
return info;
}
/**
* 校验参数合法性
*/
private void checkParams(ZqczXmgl zqczXmgl) {
if (StringUtils.isEmpty(zqczXmgl.getXmmc())) {
throw new BusinessException("项目名称不能为空");
}
if (StringUtils.isEmpty(zqczXmgl.getXmzy())) {
throw new BusinessException("项目专业不能为空");
}
if (!ZqczXmzyEnum.getAllCodes().contains(zqczXmgl.getXmzy())) {
throw new BusinessException(String.format("项目专业必须为%s, 当前值 %s", ZqczXmzyEnum.getAllCodeNameStrWithSeparator(), zqczXmgl.getXmzy()));
}
if (StringUtils.isEmpty(zqczXmgl.getXmlb())) {
throw new BusinessException("项目类别不能为空");
}
if (!ZqczXmlbEnum.getAllCodes().contains(zqczXmgl.getXmlb())) {
throw new BusinessException(String.format("项目类别必须为%s, 当前值 %s", ZqczXmlbEnum.getAllCodeNameStrWithSeparator(), zqczXmgl.getXmlb()));
}
if (StringUtils.isEmpty(zqczXmgl.getGzcj())) {
throw new BusinessException("工作场景不能为空");
} else {
if (MtConstant.ZQCZ_XMZY_CYZY_CODE.equals(zqczXmgl.getXmzy())) {
ZqczCyzyGzcjEnum zqczCyzyGzcjEnum = ZqczCyzyGzcjEnum.getEnumByCode(zqczXmgl.getGzcj());
if (zqczCyzyGzcjEnum == null) {
throw new BusinessException(String.format("工作场景必须为%s, 当前工作场景 %s", ZqczCyzyGzcjEnum.getAllCodeNameStrWithSeparator(), zqczXmgl.getGzcj()));
}
}
if (MtConstant.ZQCZ_XMZY_JSZY_CODE.equals(zqczXmgl.getXmzy())) {
ZqczJszyGzcjEnum jszyGzcjEnum = ZqczJszyGzcjEnum.getEnumByCode(zqczXmgl.getGzcj());
if (jszyGzcjEnum == null) {
throw new BusinessException(String.format("工作场景必须为%s, 当前工作场景 %s", ZqczJszyGzcjEnum.getAllCodeNameStrWithSeparator(), zqczXmgl.getGzcj()));
}
}
}
if (zqczXmgl.getXmrs() == null || zqczXmgl.getXmrs() == 0) {
throw new BusinessException("项目人数不能为空或0");
}
}
/**
* 新增
*/
@Override
public int add(ZqczXmgl zqczXmgl, String username) {
checkParams(zqczXmgl); // 校验入参
zqczXmgl.setCreate_by(username);
zqczXmgl.setUpdate_by(username);
zqczXmgl.setCreate_time(new Date());
return zqczXmglMapper.add(zqczXmgl);
}
/**
* 修改
*/
@Override
public int edit(ZqczXmgl zqczXmgl, String username) {
checkParams(zqczXmgl); // 校验入参
zqczXmgl.setUpdate_by(username);
return zqczXmglMapper.edit(zqczXmgl);
}
/**
* 删除
*/
@Override
public int delete(Long[] ids) {
return zqczXmglMapper.delete(ids);
}
private void importExcelCheck() {
}
/**
* 导入
*/
@Transactional(rollbackFor = BusinessException.class)
@Override
public int importExcel(MultipartFile file) {
String username = SecurityUtils.getLoginUser().getUsername(); // 当前用户
// 定义通用校验规则
List<ExcelCellConfig> cellConfigs = Arrays.asList(
new ExcelCellConfig(0, "项目专业", true), // 项目专业(A列)
new ExcelCellConfig(1, "项目类别", true), // 项目专业(B列)
new ExcelCellConfig(2, "工作场景", true), // 工作场景(C列)
new ExcelCellConfig(3, "项目名称", true), // 项目名称(D列)
new ExcelCellConfig(4, "项目人数", true) // 项目人数(E列)
);
return MtExcelImportUtils.importXlsx(file, true, (i, row) -> {
Map<String, String> cellValueMap = MtExcelImportUtils.parseAndValidateCells(row, i, cellConfigs);
// 项目专业处理
String xmzyStr = cellValueMap.get("项目专业");
if (!ZqczXmzyEnum.getAllNames().contains(xmzyStr)) {
throw new BusinessException(String.format("项目专业必须为%s, 当前值 %s", ZqczXmzyEnum.getAllCodeNameStrWithSeparator(), xmzyStr));
}
String xmzy = ZqczXmzyEnum.getCodeByName(xmzyStr);
// 项目类别处理
String xmlbStr = cellValueMap.get("项目类别");
if (!ZqczXmlbEnum.getAllNames().contains(xmlbStr)) {
throw new BusinessException(String.format("项目类别必须为%s, 当前值 %s", ZqczXmlbEnum.getAllCodeNameStrWithSeparator(), xmlbStr));
}
String xmlb = ZqczXmlbEnum.getCodeByName(xmlbStr);
// 工作场景处理
String gzcjStr = cellValueMap.get("工作场景");
String gzcj = "";
if (MtConstant.ZQCZ_XMZY_CYZY_CODE.equals(xmzy)) {
gzcj = ZqczCyzyGzcjEnum.getCodeByName(gzcjStr);
if (StringUtils.isEmpty(gzcj)) {
throw new BusinessException(String.format("工作场景必须为%s, 当前工作场景 %s", ZqczCyzyGzcjEnum.getAllCodeNameStrWithSeparator(), gzcjStr));
}
}
if (MtConstant.ZQCZ_XMZY_JSZY_CODE.equals(xmzy)) {
gzcj = ZqczJszyGzcjEnum.getCodeByName(gzcjStr);
if (gzcj == null) {
throw new BusinessException(String.format("工作场景必须为%s, 当前工作场景 %s", ZqczJszyGzcjEnum.getAllCodeNameStrWithSeparator(), gzcjStr));
}
}
String xmmc = cellValueMap.get("项目名称");
// 项目人数处理
String xmrsStr = cellValueMap.get("项目人数");
Integer xmrs = MtExcelImportUtils.safeParseInt(xmrsStr, "项目人数", i);
ZqczXmgl zqczXmgl = ZqczXmgl.builder()
.xmzy(xmzy)
.xmlb(xmlb)
.gzcj(gzcj)
.xmmc(xmmc)
.xmrs(xmrs)
.build();
return zqczXmgl;
}, dataList -> {
zqczXmglMapper.batchAdd(dataList);
});
}
/**
* 逻辑删除
*/
@Override
public int logicDelete(Long[] ids) {
return zqczXmglMapper.logicDelete(ids);
}
}
......@@ -5,6 +5,7 @@ import com.qianhe.zqcz.zsrw.domain.ZqczZsrw;
import com.qianhe.zqcz.zsrw.domain.ZqczZsrwQuery;
import com.qianhe.zqcz.zsrw.domain.ZqczZsrwVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
......@@ -35,4 +36,9 @@ public interface ZqczZsrwMapper {
* 删除
*/
int delete(Long[] ids);
/**
* 重新修改基层单位总数
*/
int computeGlqsl(@Param("zsrwid") Long zsrwid, @Param("count") Integer count);
}
......@@ -28,8 +28,7 @@
<if test="jcdwmc != null and jcdwmc != ''">AND jcdw.jcdwmc like concat('%', #{jcdwmc}, '%')</if>
<if test="jczzlx != null and jczzlx != ''">AND jcdw.jczzlx = #{jczzlx}</if>
</where>
ORDER BY
jcdw.jcdwid ASC
ORDER BY jcdw.jczzlx ASC, jcdw.jcdwid DESC
</select>
<!-- 查询详情 -->
<select id="info" parameterType="long" resultMap="ZqczJcdwResult">
......
<?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.qianhe.zqcz.xmgl.mapper.ZqczXmglMapper">
<!-- 返回实体 -->
<resultMap id="ZqczXmglResult" type="com.qianhe.zqcz.xmgl.domain.ZqczXmglVo">
<result property="xmid" column="XMID"/>
<result property="xmmc" column="XMMC"/>
<result property="xmzy" column="XMZY"/>
<result property="xmlb" column="XMLB"/>
<result property="gzcj" column="GZCJ"/>
</resultMap>
<!-- 通用查询 -->
<sql id="selectCommon">
SELECT
xmgl.XMID,
xmgl.XMMC,
xmgl.XMZY,
xmgl.XMLB,
xmgl.GZCJ,
xmgl.XMRS,
IFNULL( dict.dict_label, '' ) AS GZCJMC
FROM
zqcz_xmgl xmgl
LEFT JOIN sys_dict_data dict ON xmgl.gzcj = dict.dict_value AND dict.dict_type = CASE WHEN xmgl.XMZY = 1 THEN 'zqcz_cyzy_gzcj' WHEN xmgl.XMZY = 2 THEN 'zqcz_jszy_gzcj' ELSE '' END
</sql>
<!-- 条件查询 -->
<select id="list" parameterType="com.qianhe.zqcz.xmgl.domain.ZqczXmglQuery" resultMap="ZqczXmglResult">
<include refid="selectCommon"></include>
<where>
<if test="xmmc != null and xmmc !='' ">AND xmgl.XMMC like concat('%', #{xmmc}, '%')</if>
<if test="xmzy != null and xmzy !='' ">AND xmgl.XMZY = #{xmzy}</if>
<if test="xmlb != null and xmlb !='' ">AND xmgl.XMLB = #{xmlb}</if>
<if test="gzcj != null and gzcj !='' ">AND xmgl.GZCJ = #{gzcj}</if>
<if test="xmzt != null and xmzt !='' ">AND xmgl.XMZT = #{xmzt}</if>
</where>
ORDER BY xmgl.XMLB, xmgl.GZCJ, xmgl.UPDATE_TIME DESC
</select>
<!-- 查询详情 -->
<select id="info" parameterType="long" resultMap="ZqczXmglResult">
<include refid="selectCommon"></include> WHERE xmgl.XMID = #{xmid}
</select>
<!-- 新增 -->
<insert id="add" parameterType="ZqczXmgl">
INSERT INTO zqcz_xmgl
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="xmmc != null and xmmc != ''">XMMC,</if>
<if test="xmzy != null and xmzy != ''">XMZY,</if>
<if test="xmlb != null and xmlb != ''">XMLB,</if>
<if test="gzcj != null and gzcj != ''">GZCJ,</if>
<if test="xmrs != null ">XMRS,</if>
<if test="xmzt != null and xmzt != ''">XMZT,</if>
<if test="create_by != null and create_by != ''">CREATE_BY,</if>
<if test="create_time != null ">CREATE_TIME,</if>
<if test="update_by != null and update_by != ''">UPDATE_BY,</if>
<if test="remark != null and remark != ''">REMARK,</if>
<if test="yl1 != null and yl1 != ''">YL1,</if>
<if test="yl2 != null and yl2 != ''">YL2,</if>
<if test="yl3 != null and yl3 != ''">YL3,</if>
<if test="yl4 != null and yl4 != ''">YL4,</if>
<if test="yl5 != null and yl5 != ''">YL5,</if>
UPDATE_TIME
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="xmmc != null and xmmc != ''">#{xmmc},</if>
<if test="xmzy != null and xmzy != ''">#{xmzy},</if>
<if test="xmlb != null and xmlb != ''">#{xmlb},</if>
<if test="gzcj != null and gzcj != ''">#{gzcj},</if>
<if test="xmrs != null">#{xmrs},</if>
<if test="xmzt != null and xmzt != ''">#{xmzt},</if>
<if test="create_by != null">#{create_by},</if>
<if test="create_time != null">#{create_time},</if>
<if test="update_by != null">#{update_by},</if>
<if test="remark != null">#{remark},</if>
<if test="yl1 != null">#{yl1},</if>
<if test="yl2 != null">#{yl2},</if>
<if test="yl3 != null">#{yl3},</if>
<if test="yl4 != null">#{yl4},</if>
<if test="yl5 != null">#{yl5},</if>
now()
</trim>
</insert>
<!-- 修改 -->
<update id="edit" parameterType="ZqczXmgl">
UPDATE zqcz_xmgl
<trim prefix="SET" suffixOverrides=",">
<if test="xmmc != null">XMMC = #{xmmc},</if>
<if test="xmzy != null">XMZY = #{xmzy},</if>
<if test="xmlb != null">XMLB = #{xmlb},</if>
<if test="gzcj != null">GZCJ = #{gzcj},</if>
<if test="xmrs != null">XMRS = #{xmrs},</if>
<if test="xmzt != null">XMZT = #{xmzt},</if>
<if test="create_by != null">CREATE_BY = #{create_by},</if>
<if test="create_time != null">CREATE_TIME = #{create_time},</if>
<if test="update_by != null">UPDATE_BY = #{update_by},</if>
<if test="remark != null">REMARK = #{remark},</if>
<if test="yl1 != null">YL1 = #{yl1},</if>
<if test="yl2 != null">YL2 = #{yl2},</if>
<if test="yl3 != null">YL3 = #{yl3},</if>
<if test="yl4 != null">YL4 = #{yl4},</if>
<if test="yl5 != null">YL5 = #{yl5},</if>
UPDATE_TIME = now()
</trim>
WHERE XMID = #{xmid}
</update>
<!-- 删除 -->
<delete id="delete" parameterType="long">
DELETE FROM zqcz_xmgl WHERE XMID IN
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<!-- 项目管理表批量插入 -->
<insert id="batchAdd" parameterType="java.util.List">
<choose>
<when test="dataList != null and dataList.size() > 0 and !dataList.isEmpty()">
INSERT INTO zqcz_xmgl
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="dataList[0].xmmc != null and dataList[0].xmmc != ''">XMMC,</if>
<if test="dataList[0].xmzy != null and dataList[0].xmzy != ''">XMZY,</if>
<if test="dataList[0].xmlb != null and dataList[0].xmlb != ''">XMLB,</if>
<if test="dataList[0].gzcj != null and dataList[0].gzcj != ''">GZCJ,</if>
<if test="dataList[0].xmrs != null">XMRS,</if>
<if test="dataList[0].xmzt != null and dataList[0].xmzt != ''">XMZT,</if>
<if test="dataList[0].createBy != null and dataList[0].createBy != ''">CREATE_BY,</if>
<if test="dataList[0].createTime != null">CREATE_TIME,</if>
<if test="dataList[0].updateBy != null and dataList[0].updateBy != ''">UPDATE_BY,</if>
<if test="dataList[0].remark != null and dataList[0].remark != ''">REMARK,</if>
<if test="dataList[0].yl1 != null and dataList[0].yl1 != ''">YL1,</if>
<if test="dataList[0].yl2 != null and dataList[0].yl2 != ''">YL2,</if>
<if test="dataList[0].yl3 != null and dataList[0].yl3 != ''">YL3,</if>
<if test="dataList[0].yl4 != null and dataList[0].yl4 != ''">YL4,</if>
<if test="dataList[0].yl5 != null and dataList[0].yl5 != ''">YL5,</if>
UPDATE_TIME
</trim>
VALUES
<foreach collection="dataList" item="item" index="index" separator=",">
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="item.xmmc != null and item.xmmc != ''">#{item.xmmc},</if>
<if test="item.xmzy != null and item.xmzy != ''">#{item.xmzy},</if>
<if test="item.xmlb != null and item.xmlb != ''">#{item.xmlb},</if>
<if test="item.gzcj != null and item.gzcj != ''">#{item.gzcj},</if>
<if test="item.xmrs != null">#{item.xmrs},</if>
<if test="item.xmzt != null and item.xmzt != ''">#{item.xmzt},</if>
<if test="item.createBy != null and item.createBy != ''">#{item.createBy},</if>
<if test="item.createTime != null">#{item.createTime},</if>
<if test="item.updateBy != null and item.updateBy != ''">#{item.updateBy},</if>
<if test="item.remark != null and item.remark != ''">#{item.remark},</if>
<if test="item.yl1 != null and item.yl1 != ''">#{item.yl1},</if>
<if test="item.yl2 != null and item.yl2 != ''">#{item.yl2},</if>
<if test="item.yl3 != null and item.yl3 != ''">#{item.yl3},</if>
<if test="item.yl4 != null and item.yl4 != ''">#{item.yl4},</if>
<if test="item.yl5 != null and item.yl5 != ''">#{item.yl5},</if>
now()
</trim>
</foreach>
</when>
<otherwise>
SELECT 0 FROM DUAL
</otherwise>
</choose>
</insert>
<!-- 逻辑删除 -->
<update id="logicDelete" parameterType="long">
UPDATE zqcz_xmgl SET XMZT = '0' WHERE XMID IN
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</update>
</mapper>
\ No newline at end of file
......@@ -19,28 +19,29 @@
</resultMap>
<!-- 通用查询 -->
<sql id="selectCommon">
</sql>
<!-- 条件查询 -->
<select id="list" parameterType="com.qianhe.zqcz.zsrw.domain.ZqczZsrwQuery" resultMap="ZqczZsrwResult">
SELECT
zsrw.zsrwid,
dept.dept_id,
dept.dept_name,
zsrw.rwmc,
zsrw.glqsl,
zsrw.cjglqsl,
IFNULL(zsrw.cjglqsl, 0) AS cjglqsl,
zsrw.rwkssj,
zsrw.rwjssj,
zsrw.remark,
zsrw.jccjzt,
COUNT(jcrw.jcrwid) AS jcrwsl,
SUM(CASE WHEN jcrw.jcrwzt = '7' THEN 1 ELSE 0 END) AS jcrwwcsl,
CONCAT(IFNULL(SUM(CASE WHEN jcrw.jcrwzt = '7' THEN 1 ELSE 0 END), 0), '/', IFNULL(COUNT(jcrw.jcrwid), 0)) AS zsrwjd
IFNULL(jcdw_count.glqsl, 0) AS glqsl,
IFNULL(jcrw_count.jcrwsl, 0) AS jcrwsl,
IFNULL(jcrw_count.jcrwwcsl, 0) AS jcrwwcsl,
CONCAT(IFNULL(jcrw_count.jcrwwcsl, 0), '/', IFNULL(jcrw_count.jcrwsl, 0)) AS zsrwjd
FROM
zqcz_zsrw zsrw
LEFT JOIN sys_dept dept ON zsrw.dept_id = dept.dept_id
LEFT JOIN zqcz_jcrw jcrw ON zsrw.zsrwid = jcrw.zsrwid
LEFT JOIN (SELECT zsrwid, COUNT(*) AS glqsl FROM zqcz_jcdw GROUP BY zsrwid) jcdw_count ON zsrw.zsrwid = jcdw_count.zsrwid
LEFT JOIN ( SELECT zsrwid, COUNT(jcrwid) AS jcrwsl, SUM(CASE WHEN jcrwzt = '7' THEN 1 ELSE 0 END) AS jcrwwcsl FROM zqcz_jcrw GROUP BY zsrwid) jcrw_count ON zsrw.zsrwid = jcrw_count.zsrwid
</sql>
<!-- 条件查询 -->
<select id="list" parameterType="com.qianhe.zqcz.zsrw.domain.ZqczZsrwQuery" resultMap="ZqczZsrwResult">
<include refid="selectCommon"></include>
<where>
<if test="deptId != null and deptId != ''">AND zsrw.dept_id = #{deptId}</if>
<if test="rwmc != null and rwmc != ''">AND zsrw.rwmc like concat('%', #{rwmc}, '%')</if>
......@@ -48,56 +49,12 @@
<if test="rwjssj != null">AND zsrw.rwjssj &lt;= #{rwjssj}</if>
${params.dataScope}
</where>
GROUP BY
zsrw.zsrwid,
dept.dept_id,
dept.dept_name,
zsrw.rwmc,
zsrw.glqsl,
zsrw.cjglqsl,
zsrw.rwkssj,
zsrw.rwjssj,
zsrw.remark,
zsrw.jccjzt
ORDER BY
zsrw.rwjssj DESC,
zsrw.rwkssj DESC
</select>
<!-- 查询详情 -->
<select id="info" parameterType="long" resultMap="ZqczZsrwResult">
SELECT
zsrw.zsrwid,
dept.dept_id,
dept.dept_name,
zsrw.rwmc,
zsrw.glqsl,
zsrw.cjglqsl,
zsrw.rwkssj,
zsrw.rwjssj,
zsrw.remark,
zsrw.jccjzt,
COUNT(jcrw.jcrwid) AS jcrwsl,
SUM(CASE WHEN jcrw.jcrwzt = '7' THEN 1 ELSE 0 END) AS jcrwwcsl,
CONCAT(IFNULL(SUM(CASE WHEN jcrw.jcrwzt = '7' THEN 1 ELSE 0 END), 0), '/', IFNULL(COUNT(jcrw.jcrwid), 0)) AS zsrwjd
FROM
zqcz_zsrw zsrw
LEFT JOIN sys_dept dept ON zsrw.dept_id = dept.dept_id
LEFT JOIN zqcz_jcrw jcrw ON zsrw.zsrwid = jcrw.zsrwid
WHERE zsrw.zsrwid = #{zsrwid}
GROUP BY
zsrw.zsrwid,
dept.dept_id,
dept.dept_name,
zsrw.rwmc,
zsrw.glqsl,
zsrw.cjglqsl,
zsrw.rwkssj,
zsrw.rwjssj,
zsrw.remark,
zsrw.jccjzt
ORDER BY
zsrw.rwjssj DESC,
zsrw.rwkssj DESC
<include refid="selectCommon"></include> WHERE zsrw.zsrwid = #{zsrwid}
</select>
<!-- 新增 -->
<insert id="add" parameterType="com.qianhe.zqcz.zsrw.domain.ZqczZsrw">
......@@ -172,4 +129,8 @@
#{id}
</foreach>
</delete>
<!-- 重新修改基层单位总数 -->
<update id="computeGlqsl">
UPDATE zqcz_zsrw SET glqsl = glqsl + #{count} WHERE zsrwid = #{zsrwid}
</update>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment