pref#_优化量化考核编辑后导致数据Id不一致

This commit is contained in:
Paidax
2025-12-11 15:41:20 +08:00
parent 7d10b31a55
commit 5390a52e3c
4 changed files with 55 additions and 23 deletions
@@ -2,9 +2,12 @@ package com.budwk.app.zhgh.dayofficework.ghkh.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.param.PageForm; import com.budwk.app.base.param.PageForm;
import com.budwk.app.base.result.Result; import com.budwk.app.base.result.Result;
import com.budwk.app.zhgh.dayofficework.ghkh.model.Kh_bz;
import com.budwk.app.zhgh.dayofficework.ghkh.model.Kh_zb; import com.budwk.app.zhgh.dayofficework.ghkh.model.Kh_zb;
import com.budwk.app.zhgh.dayofficework.ghkh.model.Kh_zp;
import com.budwk.app.zhgh.dayofficework.ghkh.model.kh_nr; import com.budwk.app.zhgh.dayofficework.ghkh.model.kh_nr;
import com.budwk.app.zhgh.dayofficework.ghkh.service.KhBzService; import com.budwk.app.zhgh.dayofficework.ghkh.service.KhBzService;
import com.budwk.app.zhgh.dayofficework.ghkh.service.KhNrService; import com.budwk.app.zhgh.dayofficework.ghkh.service.KhNrService;
@@ -16,13 +19,18 @@ import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop; import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings; import org.nutz.lang.Strings;
import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.POST; import org.nutz.mvc.annotation.POST;
import org.nutz.mvc.annotation.Param; import org.nutz.mvc.annotation.Param;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
* Created with IntelliJ IDEA. * Created with IntelliJ IDEA.
@@ -101,21 +109,53 @@ public class GhkhGhzbController {
@SaCheckPermission("ghkh.khzb") @SaCheckPermission("ghkh.khzb")
@Aop(TransAop.READ_COMMITTED) @Aop(TransAop.READ_COMMITTED)
public Result doEdit(@Param(value = "kh_zb") Kh_zb kh_zb, @Param(value = "type") String type) { public Result doEdit(@Param(value = "kh_zb") Kh_zb kh_zb, @Param(value = "type") String type) {
khZbService.updateIgnoreNull(kh_zb); // 查出数据库里面的考核内容和标准,找出需要删除的
List<kh_nr> nrList = khNrService.query(Cnd.where(kh_nr::getZb_id, "=", kh_zb.getId()));
// 查出考核内容(那个傻逼写的,他妈的zb_id都他妈的不存,真的是人才嘞,我踏马还要去根据nrList里面的主键Id去查询)
Set<String> nrIdList = nrList.stream().map(kh_nr::getId).collect(Collectors.toSet());
List<Kh_bz> bzList = khBzService.query(Cnd.where(Kh_bz::getNr_id, "in", nrIdList));
List<kh_nr> query = khNrService.query(Cnd.where("zb_id", "=", kh_zb.getId())); // 构建考核内容
List<kh_nr> nrs = kh_zb.getNrs().stream().peek(v -> v.setZb_id(kh_zb.getId())).toList();
List<String> webNrIdList = nrs.stream().map(kh_nr::getId).toList();
for (kh_nr kh_nr : query) { // 构建考核标准
System.err.println(kh_nr.getZb_id()); List<Kh_bz> bzs = nrs.stream()
khBzService.clear(Cnd.where("nr_id", "=", kh_nr.getId())); .map(v -> {
} return v.getBzs().stream().peek(bz -> {
bz.setNr_id(v.getId());
bz.setZb_id(kh_zb.getId());
}).toList();
}).flatMap(List::stream).toList();
List<String> webBzIdList = bzs.stream().map(Kh_bz::getId).toList();
khNrService.clear(Cnd.where("zb_id", "=", kh_zb.getId()));
for (kh_nr nr : kh_zb.getNrs()) { // 找不同,找出需要删除的内容和标准
nr.setZb_id(kh_zb.getId()); List<kh_nr> deleteNrs = nrList.stream().filter(v -> !webNrIdList.contains(v.getId())).toList();
khNrService.insertWith(nr, "bzs"); List<Kh_bz> deleteBzs = bzList.stream().filter(v -> !webBzIdList.contains(v.getId())).toList();
}
// 找出bzs和nrs中Id是null的
List<kh_nr> insertNrList = nrs.stream().filter(v -> StrUtil.isBlank(v.getId())).toList();
List<Kh_bz> insertBzList = bzs.stream().filter(v -> StrUtil.isBlank(v.getId())).toList();
// 新增数据
khBzService.insert(insertBzList);
khNrService.insert(insertNrList);
// 删除数据
if (Lang.isNotEmpty(deleteNrs)) {
khNrService.delete(deleteNrs.stream().map(kh_nr::getId).toList());
}
if (Lang.isNotEmpty(deleteBzs)) {
khBzService.delete(deleteBzs.stream().map(Kh_bz::getId).toList());
}
// 修改考核指标
khZbService.updateIgnoreNull(kh_zb);
// 新增或修改考核内容
khNrService.updateIgnoreNull(nrs);
// 新增或修改考核标准
khBzService.updateIgnoreNull(bzs);
return Result.success(); return Result.success();
} }
@@ -309,7 +309,6 @@ layout("/layouts/v4/baseLayout.html"){
}, },
methods: { methods: {
menuSelect(index, indexPath) { menuSelect(index, indexPath) {
debugger
try { try {
const app = JSON.parse(window.sessionStorage.getItem("zhgh_sub_app")) const app = JSON.parse(window.sessionStorage.getItem("zhgh_sub_app"))
window.sessionStorage.setItem("zhgh_sub_app_left_menu_active_index-" + app.id, index) window.sessionStorage.setItem("zhgh_sub_app_left_menu_active_index-" + app.id, index)
@@ -319,7 +318,6 @@ layout("/layouts/v4/baseLayout.html"){
}, },
// 获取菜单 // 获取菜单
getMenus(appId) { getMenus(appId) {
debugger
if (!appId) return if (!appId) return
this.$axios.post("/platform/sys/user/subAppMenus", {appId}).then((res) => { this.$axios.post("/platform/sys/user/subAppMenus", {appId}).then((res) => {
if (res.code === 0) { if (res.code === 0) {
@@ -334,7 +332,6 @@ layout("/layouts/v4/baseLayout.html"){
// 设置应用信息 // 设置应用信息
setAppInfo(app) { setAppInfo(app) {
debugger
if (app) { if (app) {
// 储存到缓存 // 储存到缓存
window.sessionStorage.setItem("zhgh_sub_app", JSON.stringify(app)) window.sessionStorage.setItem("zhgh_sub_app", JSON.stringify(app))
@@ -350,7 +347,6 @@ layout("/layouts/v4/baseLayout.html"){
}, },
// 菜单回显 // 菜单回显
echoMenus() { echoMenus() {
debugger
try { try {
const app = JSON.parse(window.sessionStorage.getItem("zhgh_sub_app")) const app = JSON.parse(window.sessionStorage.getItem("zhgh_sub_app"))
this.activeMenuIndex = window.sessionStorage.getItem("zhgh_sub_app_left_menu_active_index-" + app.id) this.activeMenuIndex = window.sessionStorage.getItem("zhgh_sub_app_left_menu_active_index-" + app.id)
@@ -371,7 +367,6 @@ layout("/layouts/v4/baseLayout.html"){
// 地址选中 // 地址选中
hrefSelect() { hrefSelect() {
debugger
function findMenuPath(menus, targetHref) { function findMenuPath(menus, targetHref) {
function search(items, path) { function search(items, path) {
for (const item of items) { for (const item of items) {
@@ -404,7 +399,6 @@ layout("/layouts/v4/baseLayout.html"){
// 默认选中 // 默认选中
defaultSelect() { defaultSelect() {
debugger
// 查找第一个有href的子菜单 // 查找第一个有href的子菜单
function findFirstChildWithHref(menus) { function findFirstChildWithHref(menus) {
for (const menu of menus) { for (const menu of menus) {
@@ -430,7 +424,6 @@ layout("/layouts/v4/baseLayout.html"){
} }
const result = findFirstChildWithHref(this.menus) const result = findFirstChildWithHref(this.menus)
debugger
if (result) { if (result) {
this.activeMenuIndex = result.menu.id this.activeMenuIndex = result.menu.id
this.openedMenus = result.parentIds this.openedMenus = result.parentIds
@@ -451,7 +444,6 @@ layout("/layouts/v4/baseLayout.html"){
}, },
init() { init() {
debugger
// 页面加载时获取到正确的菜单 // 页面加载时获取到正确的菜单
const pathname = window.location.pathname const pathname = window.location.pathname
if (!pathname.startsWith("/platform/v4/subApp")) { if (!pathname.startsWith("/platform/v4/subApp")) {
@@ -150,8 +150,8 @@
} }
connect() { connect() {
//const WS_URL = window.location.host + "${base}/websocket" const WS_URL = window.location.host + "${base}/websocket"
const WS_URL = 'zhgh.jshvc.edu.cn' + "${base}/websocket" // const WS_URL = 'zhgh.jshvc.edu.cn' + "${base}/websocket"
const protocol = window.location.protocol === "http:" ? "ws://" : "wss://" const protocol = window.location.protocol === "http:" ? "ws://" : "wss://"
this.ws = new WebSocket(protocol + WS_URL) this.ws = new WebSocket(protocol + WS_URL)
} }
@@ -47,10 +47,10 @@ layout("/layouts/platform.html"){
:width="column.width" :width="column.width"
header-align="center" header-align="center"
show-overflow-tooltip> show-overflow-tooltip>
<template scope="{row}" v-if="column.prop==='startTime'"> <template scope="{row}" v-if="column.prop=='startTime'">
<span>{{row.startDateTime}} - {{row.endDateTime}}</span> <span>{{row.startDateTime}} - {{row.endDateTime}}</span>
</template> </template>
<template scope="{row}" v-else-if="column.prop==='disabled'"> <template scope="{row}" v-else-if="column.prop=='disabled'">
<el-switch <el-switch
v-model="row.disabled" v-model="row.disabled"
active-color="#13ce66" active-color="#13ce66"