实现整体思路
以2个层级的指标为例
1.操作第一级指标:关/开闭一级指标,下面的二级指标也全关/开
2.操作第二级指标:
关闭: 如果关闭的这个正好是最后一个,则同时修改上一级 。其他情况不用修改上级
打开:如果同级指标 修改的这个是唯一开的,就修改上级
实体类
public class QUERY_CONFIG {
private String id;
private String code;
private String name;
private String cj;
private String fcode;
private String sfqy;
}
逻辑代码
@Autowired
private QUERY_CONFIGMapper dataQueryConfigMapper;
public void batchUpdateSfqy(QUERY_CONFIG param) {
if (StringUtils.isEmpty(param.getSfqy()) || StringUtils.isEmpty(param.getCj())
|| StringUtils.isEmpty(param.getCode()) || StringUtils.isEmpty(param.getFcode()) ) {
return "传参有误,修改失败";
}
Map<String, Object> insertData = new HashMap<>();
try {
insertData.put("sfqy", param.getSfqy());
insertData.put("code", param.getCode());
if (param.getCj().equals("1")) {
// 关/开闭一级指标,下面的二级指标也全关/开
insertData.put("uptodown", "1");
insertData.put("fcode", param.getCode());
dataQueryConfigMapper.updateSfqy(insertData);
} else {
Map<String, Object> query = new HashMap<>();
query.put("fcode", param.getFcode());
List<QUERY_CONFIG> list = dataQueryConfigMapper.list(query);
// 准备修改后 剩余的修改后的数量
List<QUERY_CONFIG> sfqyList = list.stream().filter(x -> x.getSfqy().equals(param.getSfqy())).collect(Collectors.toList());
switch (param.getSfqy()) {
case "0":
// 如果关闭的这个正好是最后一个,则同时修改上一级 list.size() - sfqyList.size() == 1
if (sfqyList.size() == list.size() - 1) {
// 修改统计和上级
insertData.put("downwtoup", "1");
insertData.put("fcode", param.getFcode());
dataQueryConfigMapper.updateSfqy(insertData);
} else {
// 只修改当前
param.setFcode(null);
dataQueryConfigMapper.updateSfqy(insertData);
}
break;
case "1":
// 如果同级有其他指标还是开的 就不修改上一级指标
// 如果同级指标 修改的这个是唯一开的,就修改上级 不适用关
if (sfqyList.size()==0) {
// 修改统计和上级
insertData.put("downwtoup", "1");
insertData.put("fcode", param.getFcode());
dataQueryConfigMapper.updateSfqy(insertData);
} else {
// 只修改当前
param.setFcode(null);
dataQueryConfigMapper.updateSfqy(insertData);
}
break;
}
}
}catch (Exception e) {
e.printStackTrace();
}
return "修改成功";
}
mapper
public interface QUERY_CONFIGMapper {
int updateSfqy(Map<String, Object> config);
List<QUERY_CONFIG> list(Map<String, Object> config);
}
sql xml语句
<select id="list" resultType="com.po.QUERY_CONFIG">
select * from QUERY_CONFIG
<where>
<if test="id">
and ID = #{id,jdbcType=VARCHAR}
</if>
<if test="fcode">
and fcode = #{fcode,jdbcType=VARCHAR}
</if>
</where>
order by to_number(PAIXU) asc
</select>
<update id="updateSfqy" parameterType="map">
update QUERY_CONFIG
set SFQY = #{sfqy,jdbcType=VARCHAR}
where code = #{code,jdbcType=VARCHAR}
/* 二级指标随着一级变 */
<if test="uptodown != null ">
or fcode = #{fcode,jdbcType=VARCHAR}
</if>
/* 二级指标随着一级变 */
<if test="downwtoup != null ">
or code = #{fcode,jdbcType=VARCHAR}
</if>
</update>