包头bug修复

This commit is contained in:
guoshengxiong 2024-11-27 17:04:18 +08:00
parent 7abc221575
commit 7b1ed8a26a
11 changed files with 525 additions and 156 deletions

View File

@ -1,5 +1,6 @@
package com.zhgd.xmgl.modules.baotou.controller; package com.zhgd.xmgl.modules.baotou.controller;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -156,8 +157,15 @@ public class ContractorMonthlyTitleController {
@PostMapping(value = "/bindList") @PostMapping(value = "/bindList")
public Result<List<Long>> bindList(@ApiIgnore @RequestBody HashMap<String, Object> param) { public Result<List<Long>> bindList(@ApiIgnore @RequestBody HashMap<String, Object> param) {
String userId = MapUtils.getString(param, "userId"); String userId = MapUtils.getString(param, "userId");
contractorMonthlyConfigService.remove(new LambdaQueryWrapper<ContractorMonthlyConfig>() Integer type = MapUtils.getInteger(param, "type");
.eq(ContractorMonthlyConfig::getUserId, userId)); List<Long> titleIds = contractorMonthlyTitleService.list(new LambdaQueryWrapper<ContractorMonthlyTitle>()
.eq(ContractorMonthlyTitle::getType, type)).stream().map(ContractorMonthlyTitle::getId).collect(Collectors.toList());
if (CollUtil.isNotEmpty(titleIds)) {
contractorMonthlyConfigService.remove(new LambdaQueryWrapper<ContractorMonthlyConfig>()
.in(ContractorMonthlyConfig::getTitleId, titleIds)
.eq(ContractorMonthlyConfig::getUserId, userId)
);
}
JSONArray array = JSONArray.parseArray(JSON.toJSONString(param.get("titleIdList"))); JSONArray array = JSONArray.parseArray(JSON.toJSONString(param.get("titleIdList")));
for (int i = 0; i < array.size(); i++) { for (int i = 0; i < array.size(); i++) {
String s = array.getString(i); String s = array.getString(i);

View File

@ -30,8 +30,8 @@ public class ContractorMonthlyDetail implements Serializable {
/**承包商项自组月报周报计划(word和excel版)id*/ /**承包商项自组月报周报计划(word和excel版)id*/
@ApiModelProperty(value="承包商项自组月报周报计划(word和excel版)id") @ApiModelProperty(value="承包商项自组月报周报计划(word和excel版)id")
private java.lang.Long periodId ; private java.lang.Long periodId ;
/**1:三月人力滚动计划;2:三月机械滚动计划;3:人力汇总表;4:机械汇总表;5:工程量报表;6:计划工程量报表;7:月报;*/ /**1:三月人力滚动计划;2:三月机械滚动计划;3:人力汇总表;4:机械汇总表;5:工程量报表;6:计划工程量报表;7:月报;8:项目计划;*/
@ApiModelProperty(value="1:三月人力滚动计划;2:三月机械滚动计划;3:人力汇总表;4:机械汇总表;5:工程量报表;6:计划工程量报表;7:月报;") @ApiModelProperty(value="1:三月人力滚动计划;2:三月机械滚动计划;3:人力汇总表;4:机械汇总表;5:工程量报表;6:计划工程量报表;7:月报;8:项目计划;")
private java.lang.Integer contentType ; private java.lang.Integer contentType ;
/**内容*/ /**内容*/
@ApiModelProperty(value="内容") @ApiModelProperty(value="内容")

View File

@ -51,9 +51,6 @@ public class ContractorMonthlyQuantity implements Serializable {
/**更新时间*/ /**更新时间*/
@ApiModelProperty(value="更新时间") @ApiModelProperty(value="更新时间")
private java.util.Date updateTime ; private java.util.Date updateTime ;
/**1承包商2项目组**/
@ApiModelProperty(value="1承包商2项目组")
private java.lang.Integer type ;
/**1工程量2计划工程量*/ /**1工程量2计划工程量*/
@ApiModelProperty(value="1工程量2计划工程量") @ApiModelProperty(value="1工程量2计划工程量")
private java.lang.Integer designType; private java.lang.Integer designType;

View File

@ -33,9 +33,6 @@ public class ContractorMonthlyTitle implements Serializable {
/**word标题名称*/ /**word标题名称*/
@ApiModelProperty(value="word标题名称") @ApiModelProperty(value="word标题名称")
private java.lang.String wordName ; private java.lang.String wordName ;
/**所属项目SN*/
@ApiModelProperty(value="所属项目SN")
private java.lang.String projectSn ;
/**父级id*/ /**父级id*/
@ApiModelProperty(value="父级id") @ApiModelProperty(value="父级id")
private java.lang.Long parentId ; private java.lang.Long parentId ;

View File

@ -51,4 +51,5 @@ public class ProjectHomeManage implements Serializable {
/**更新时间*/ /**更新时间*/
@ApiModelProperty(value="更新时间") @ApiModelProperty(value="更新时间")
private java.util.Date updateTime ; private java.util.Date updateTime ;
private java.lang.Integer sort ;
} }

View File

@ -57,8 +57,10 @@ public class ProjectHomeWork implements Serializable {
/**更新时间*/ /**更新时间*/
@ApiModelProperty(value="更新时间") @ApiModelProperty(value="更新时间")
private java.util.Date updateTime ; private java.util.Date updateTime ;
private java.lang.Integer sort ;
@TableField(exist = false) @TableField(exist = false)
@ApiModelProperty(value="操作内容") @ApiModelProperty(value="操作内容")
private List<ProjectHomeWork> opList; private List<ProjectHomeWork> opList;
} }

View File

@ -2,6 +2,7 @@ package com.zhgd.xmgl.modules.baotou.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
@ -26,7 +27,10 @@ import com.zhgd.xmgl.modules.worker.entity.EnterpriseInfo;
import com.zhgd.xmgl.modules.worker.service.impl.EnterpriseInfoServiceImpl; import com.zhgd.xmgl.modules.worker.service.impl.EnterpriseInfoServiceImpl;
import com.zhgd.xmgl.security.util.SecurityUtils; import com.zhgd.xmgl.security.util.SecurityUtils;
import com.zhgd.xmgl.util.*; import com.zhgd.xmgl.util.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.tuple.ImmutableTriple;
import org.apache.commons.lang3.tuple.Triple;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
@ -46,6 +50,7 @@ import java.util.stream.Collectors;
*/ */
@Service @Service
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Slf4j
public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMonthlyDetailMapper, ContractorMonthlyDetail> implements IContractorMonthlyDetailService { public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMonthlyDetailMapper, ContractorMonthlyDetail> implements IContractorMonthlyDetailService {
@Autowired @Autowired
private IContractorMonthlyDetailService contractorMonthlyDetailService; private IContractorMonthlyDetailService contractorMonthlyDetailService;
@ -151,6 +156,27 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
throw new OpenAlertException("计划不存在"); throw new OpenAlertException("计划不存在");
} }
this.removeMonthWordEdit(detail, p); this.removeMonthWordEdit(detail, p);
if (contentType != 7) {
//把excel的p改成t存在v中
JSONObject rootJo = JSON.parseObject(detail.getContent());
JSONObject cellData = getCellData(rootJo);
for (int i = 0; i < cellData.size(); i++) {
JSONObject rowJo = cellData.getJSONObject(i + "");
if (rowJo != null) {
for (int col = 0; col < rowJo.size(); col++) {
JSONObject colJo = rowJo.getJSONObject(col + "");
if (colJo.containsKey("p")) {
String s = Optional.ofNullable(colJo.getJSONObject("p")).map(m -> m.getJSONObject("body")).map(m -> m.getString("dataStream")).orElse(null);
if (StrUtil.isNotBlank(s)) {
colJo.put("t", 1);
colJo.put("v", s);
}
}
}
}
}
detail.setContent(JSON.toJSONString(rootJo));
}
if (CollUtil.isEmpty(details)) { if (CollUtil.isEmpty(details)) {
this.add(detail); this.add(detail);
} else { } else {
@ -164,7 +190,6 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
int length = SheetUtils.getColDataLength(this.getCellData(rootJo), 3, "B"); int length = SheetUtils.getColDataLength(this.getCellData(rootJo), 3, "B");
ContractorMonthlyQuantity quantity = contractorMonthlyQuantityService.getOne(new LambdaQueryWrapper<ContractorMonthlyQuantity>() ContractorMonthlyQuantity quantity = contractorMonthlyQuantityService.getOne(new LambdaQueryWrapper<ContractorMonthlyQuantity>()
.eq(ContractorMonthlyQuantity::getPeriodId, p.getId()) .eq(ContractorMonthlyQuantity::getPeriodId, p.getId())
.eq(ContractorMonthlyQuantity::getType, p.getType())
.eq(ContractorMonthlyQuantity::getDesignType, designType) .eq(ContractorMonthlyQuantity::getDesignType, designType)
); );
ContractorMonthlyDesign design = contractorMonthlyDesignService.getOne(new LambdaQueryWrapper<ContractorMonthlyDesign>() ContractorMonthlyDesign design = contractorMonthlyDesignService.getOne(new LambdaQueryWrapper<ContractorMonthlyDesign>()
@ -209,7 +234,6 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
} }
quantity.setArriveGoods(JSON.toJSONString(arriveList)); quantity.setArriveGoods(JSON.toJSONString(arriveList));
quantity.setRemarks(JSON.toJSONString(remarkList)); quantity.setRemarks(JSON.toJSONString(remarkList));
quantity.setType(p.getType());
quantity.setDesignType(designType); quantity.setDesignType(designType);
contractorMonthlyQuantityService.save(quantity); contractorMonthlyQuantityService.save(quantity);
} else { } else {
@ -221,7 +245,6 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
} }
quantity.setArriveGoods(JSON.toJSONString(arriveList)); quantity.setArriveGoods(JSON.toJSONString(arriveList));
quantity.setRemarks(JSON.toJSONString(remarkList)); quantity.setRemarks(JSON.toJSONString(remarkList));
quantity.setType(p.getType());
quantity.setDesignType(designType); quantity.setDesignType(designType);
contractorMonthlyQuantityService.updateById(quantity); contractorMonthlyQuantityService.updateById(quantity);
} }
@ -293,10 +316,10 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
@Override @Override
public void agree(HashMap<String, Object> param) { public void agree(HashMap<String, Object> param) {
String periodId = MapUtils.getString(param, "periodId"); String periodId = MapUtils.getString(param, "periodId");
ContractorMonthlyPeriod p1 = contractorMonthlyPeriodService.getById(periodId); ContractorMonthlyPeriod ctPeriod = contractorMonthlyPeriodService.getById(periodId);
p1.setStatus(3); ctPeriod.setStatus(3);
contractorMonthlyPeriodService.updateById(p1); contractorMonthlyPeriodService.updateById(ctPeriod);
ProjectGroup group = projectGroupService.getById(p1.getGroupId()); ProjectGroup group = projectGroupService.getById(ctPeriod.getGroupId());
//这个供应商的detail //这个供应商的detail
List<ContractorMonthlyDetail> details1 = contractorMonthlyDetailMapper.selectList(new LambdaQueryWrapper<ContractorMonthlyDetail>() List<ContractorMonthlyDetail> details1 = contractorMonthlyDetailMapper.selectList(new LambdaQueryWrapper<ContractorMonthlyDetail>()
.eq(ContractorMonthlyDetail::getPeriodId, periodId)); .eq(ContractorMonthlyDetail::getPeriodId, periodId));
@ -306,17 +329,17 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
continue; continue;
} }
//复制给项目组 //复制给项目组
long gId = p1.getGroupId(); long gId = ctPeriod.getGroupId();
Long unitId = p1.getDeviceId(); Long unitId = ctPeriod.getDeviceId();
List<ContractorMonthlyPeriod> periods = contractorMonthlyPeriodService.list(new LambdaQueryWrapper<ContractorMonthlyPeriod>() List<ContractorMonthlyPeriod> periods = contractorMonthlyPeriodService.list(new LambdaQueryWrapper<ContractorMonthlyPeriod>()
.eq(ContractorMonthlyPeriod::getType, 2) .eq(ContractorMonthlyPeriod::getType, 2)
.eq(ContractorMonthlyPeriod::getGroupId, gId) .eq(ContractorMonthlyPeriod::getGroupId, gId)
.eq(ContractorMonthlyPeriod::getDeviceId, unitId) .eq(ContractorMonthlyPeriod::getDeviceId, unitId)
.eq(ContractorMonthlyPeriod::getYear, p1.getYear()) .eq(ContractorMonthlyPeriod::getYear, ctPeriod.getYear())
.eq(ContractorMonthlyPeriod::getMonth, p1.getMonth()) .eq(ContractorMonthlyPeriod::getMonth, ctPeriod.getMonth())
.eq(ContractorMonthlyPeriod::getWhichWeek, p1.getWhichWeek()) .eq(ContractorMonthlyPeriod::getWhichWeek, ctPeriod.getWhichWeek())
.eq(ContractorMonthlyPeriod::getLevelType, p1.getLevelType()) .eq(ContractorMonthlyPeriod::getLevelType, ctPeriod.getLevelType())
.eq(ContractorMonthlyPeriod::getProjectSn, p1.getProjectSn()) .eq(ContractorMonthlyPeriod::getProjectSn, ctPeriod.getProjectSn())
); );
ContractorMonthlyPeriod period; ContractorMonthlyPeriod period;
if (CollUtil.isEmpty(periods)) { if (CollUtil.isEmpty(periods)) {
@ -324,10 +347,10 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
period.setGroupId(gId); period.setGroupId(gId);
period.setDeviceId(unitId); period.setDeviceId(unitId);
period.setType(2); period.setType(2);
period.setYear(p1.getYear()); period.setYear(ctPeriod.getYear());
period.setMonth(p1.getMonth()); period.setMonth(ctPeriod.getMonth());
period.setWhichWeek(p1.getWhichWeek()); period.setWhichWeek(ctPeriod.getWhichWeek());
period.setLevelType(p1.getLevelType()); period.setLevelType(ctPeriod.getLevelType());
period.setProjectSn(detail.getProjectSn()); period.setProjectSn(detail.getProjectSn());
contractorMonthlyPeriodService.save(period); contractorMonthlyPeriodService.save(period);
} else { } else {
@ -381,12 +404,13 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
if (Objects.equals(contentType, 1) || Objects.equals(contentType, 2)) { if (Objects.equals(contentType, 1) || Objects.equals(contentType, 2)) {
JSONObject toCellDataJo = this.getCellData(rootJo); JSONObject toCellDataJo = this.getCellData(rootJo);
JSONObject fromCellDataJo = this.getCellData(JSON.parseObject(content)); JSONObject fromCellDataJo = this.getCellData(JSON.parseObject(content));
buildToCellDataForOne(toCellDataJo, fromCellDataJo); this.buildToCellDataForOne(toCellDataJo, fromCellDataJo);
} else if (Objects.equals(contentType, 3) || Objects.equals(contentType, 4)) { } else if (Objects.equals(contentType, 3) || Objects.equals(contentType, 4)) {
JSONObject toCellDataJo = this.getCellData(rootJo); JSONObject toCellDataJo = this.getCellData(rootJo);
JSONObject fromCellDataJo = this.getCellData(JSON.parseObject(content)); JSONObject fromCellDataJo = this.getCellData(JSON.parseObject(content));
buildToCellDataForThree(toCellDataJo, fromCellDataJo); this.buildToCellDataForThree(toCellDataJo, fromCellDataJo, rootJo);
} }
d2.setType(2);
d2.setContent(JSON.toJSONString(rootJo)); d2.setContent(JSON.toJSONString(rootJo));
baseMapper.updateById(d2); baseMapper.updateById(d2);
} }
@ -396,7 +420,7 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
//保存工程量 //保存工程量
int designType = contentType == 5 ? 1 : 2; int designType = contentType == 5 ? 1 : 2;
List<ContractorMonthlyDesign> designs = contractorMonthlyDesignService.list(new LambdaQueryWrapper<ContractorMonthlyDesign>() List<ContractorMonthlyDesign> designs = contractorMonthlyDesignService.list(new LambdaQueryWrapper<ContractorMonthlyDesign>()
.eq(ContractorMonthlyDesign::getDeviceId, p1.getDeviceId()) .eq(ContractorMonthlyDesign::getDeviceId, ctPeriod.getDeviceId())
.eq(ContractorMonthlyDesign::getDesignType, designType) .eq(ContractorMonthlyDesign::getDesignType, designType)
); );
if (CollUtil.isNotEmpty(designs)) { if (CollUtil.isNotEmpty(designs)) {
@ -418,24 +442,24 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
} }
} }
List<ContractorMonthlyQuantity> quantityList = contractorMonthlyQuantityService.list(new LambdaQueryWrapper<ContractorMonthlyQuantity>() ContractorMonthlyQuantity quantity = contractorMonthlyQuantityService.getOne(new LambdaQueryWrapper<ContractorMonthlyQuantity>()
.eq(ContractorMonthlyQuantity::getPeriodId, p1.getId()) .eq(ContractorMonthlyQuantity::getPeriodId, ctPeriod.getId())
.eq(ContractorMonthlyQuantity::getDesignType, designType) .eq(ContractorMonthlyQuantity::getDesignType, designType)
); );
if (CollUtil.isNotEmpty(quantityList)) { if (quantity != null) {
Optional<ContractorMonthlyQuantity> op = quantityList.stream().filter(o -> o.getType() == 1).findFirst(); ContractorMonthlyQuantity cd = this.getGroupQuantity(ctPeriod, designType);
if (op.isPresent()) { ContractorMonthlyQuantity groupQuantity = contractorMonthlyQuantityService.getOne(new LambdaQueryWrapper<ContractorMonthlyQuantity>()
ContractorMonthlyQuantity cd = this.getGroupQuantity(p1, designType); .eq(ContractorMonthlyQuantity::getPeriodId, period.getId())
Optional<ContractorMonthlyQuantity> op1 = quantityList.stream().filter(o -> o.getType() == 2).findFirst(); .eq(ContractorMonthlyQuantity::getDesignType, designType)
if (op1.isPresent()) { );
cd.setId(op1.get().getId()); if (groupQuantity != null) {
cd.setType(2); cd.setId(groupQuantity.getId());
contractorMonthlyQuantityService.updateById(cd); cd.setPeriodId(period.getId());
} else { contractorMonthlyQuantityService.updateById(cd);
cd.setId(null); } else {
cd.setType(2); cd.setId(null);
contractorMonthlyQuantityService.save(cd); cd.setPeriodId(period.getId());
} contractorMonthlyQuantityService.save(cd);
} }
} }
@ -451,9 +475,7 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
Integer levelType = period.getLevelType(); Integer levelType = period.getLevelType();
ContractorMonthlyQuantity monthlyQuantity = new ContractorMonthlyQuantity(); ContractorMonthlyQuantity monthlyQuantity = new ContractorMonthlyQuantity();
monthlyQuantity.setProjectSn(period.getProjectSn()); monthlyQuantity.setProjectSn(period.getProjectSn());
monthlyQuantity.setPeriodId(periodId);
Integer type = period.getType(); Integer type = period.getType();
monthlyQuantity.setType(type);
monthlyQuantity.setDesignType(designType); monthlyQuantity.setDesignType(designType);
//查询所有的period //查询所有的period
List<ContractorMonthlyPeriod> periodList = contractorMonthlyPeriodService.list(new LambdaQueryWrapper<ContractorMonthlyPeriod>() List<ContractorMonthlyPeriod> periodList = contractorMonthlyPeriodService.list(new LambdaQueryWrapper<ContractorMonthlyPeriod>()
@ -463,7 +485,6 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
if (CollUtil.isNotEmpty(periodList)) { if (CollUtil.isNotEmpty(periodList)) {
List<ContractorMonthlyQuantity> quantityList = contractorMonthlyQuantityService.list(new LambdaQueryWrapper<ContractorMonthlyQuantity>() List<ContractorMonthlyQuantity> quantityList = contractorMonthlyQuantityService.list(new LambdaQueryWrapper<ContractorMonthlyQuantity>()
.eq(ContractorMonthlyQuantity::getDesignType, designType) .eq(ContractorMonthlyQuantity::getDesignType, designType)
.eq(ContractorMonthlyQuantity::getType, type)
.in(ContractorMonthlyQuantity::getPeriodId, periodList.stream().map(ContractorMonthlyPeriod::getId).collect(Collectors.toList()))); .in(ContractorMonthlyQuantity::getPeriodId, periodList.stream().map(ContractorMonthlyPeriod::getId).collect(Collectors.toList())));
int month = DateUtil.month(new Date()); int month = DateUtil.month(new Date());
int year = DateUtil.year(new Date()); int year = DateUtil.year(new Date());
@ -490,81 +511,139 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
return monthlyQuantity; return monthlyQuantity;
} }
private void buildToCellDataForThree(JSONObject toCellDataJo, JSONObject fromCellDataJo) { private void buildToCellDataForThree(JSONObject toCellDataJo, JSONObject fromCellDataJo, JSONObject rootJo) {
//插入一列columnCount+1mergeData[].endColumn+1cellData挪动columnData哪行多宽 SheetUtils.setDefaultStyle(rootJo);
String addEnterprise = fromCellDataJo.getJSONObject("4").getJSONObject("3").getString("v"); List<String> addEnterprises = new ArrayList<>();
JSONObject enterpriseRow = toCellDataJo.getJSONObject("4"); JSONObject enterpriseRow = toCellDataJo.getJSONObject("4");
boolean add = true;
Integer addCol = enterpriseRow.size();
Integer replaceCol = null;
for (int col = 3; col < enterpriseRow.size(); col++) { for (int col = 3; col < enterpriseRow.size(); col++) {
JSONObject jo = enterpriseRow.getJSONObject(col + ""); JSONObject jo = enterpriseRow.getJSONObject(col + "");
if (Objects.equals(jo.getString("v"), addEnterprise)) { addEnterprises.add(jo.getString("v"));
add = false;
replaceCol = col;
}
} }
List<JSONObject> fromJoList = new ArrayList<>(); int colIndex = 0;
for (int row = 4; row < fromCellDataJo.size(); row++) { for (String addEnterprise : addEnterprises) {
JSONObject jo = fromCellDataJo.getJSONObject(row + ""); String fromCol = SheetUtils.getIndexOfCol(3 + colIndex++);
JSONObject jo1 = jo.getJSONObject("3"); //插入一列columnCount+1mergeData[].endColumn+1cellData挪动columnData哪行多宽
fromJoList.add(jo1); boolean add = true;
} Integer addCol = enterpriseRow.size();
if (add) { Integer replaceCol = null;
//添加到最后一列 for (int col = 3; col < enterpriseRow.size(); col++) {
for (int row = 4; row < toCellDataJo.size(); row++) { JSONObject jo = enterpriseRow.getJSONObject(col + "");
JSONObject jo = toCellDataJo.getJSONObject(row + ""); if (Objects.equals(jo.getString("v"), addEnterprise)) {
jo.put(addCol + "", fromJoList.get(row - 4)); add = false;
replaceCol = col;
}
} }
} else { List<JSONObject> fromJoList = new ArrayList<>();
for (int row = 4; row < toCellDataJo.size(); row++) { List<JSONObject> fromKeyJoList = new ArrayList<>();
JSONObject jo = toCellDataJo.getJSONObject(row + ""); for (int row = 6; row < fromCellDataJo.size(); row++) {
jo.put(replaceCol + "", fromJoList.get(row - 4)); fromJoList.add(SheetUtils.getColJsonObject(fromCellDataJo, row, fromCol + ""));
fromKeyJoList.add(SheetUtils.getColJsonObject(fromCellDataJo, row, "B"));
}
//清空这列
Integer col = null;
if (add) {
//添加到最后一列
col = addCol;
} else {
col = replaceCol;
}
for (int i = 6; i < toCellDataJo.size(); i++) {
SheetUtils.setCol(toCellDataJo, i, col, "", 3, 2);
}
SheetUtils.setCol(toCellDataJo, 4, col, addEnterprise, 2, 1);
SheetUtils.setColFunction(toCellDataJo, 5, col, "=SUM(" + SheetUtils.getIndexOfCol(col) + 7 + ":" + SheetUtils.getIndexOfCol(col) + "999)", 3);
for (int i = 0; i < fromKeyJoList.size(); i++) {
JSONObject keyJo = fromKeyJoList.get(i);
JSONObject fromJo = fromJoList.get(i);
boolean done = false;
for (int row = 6; row < toCellDataJo.size(); row++) {
String v = SheetUtils.getColVal(toCellDataJo, row, "B");
if (Objects.equals(v, keyJo.getString("v"))) {
if (fromJo != null) {
SheetUtils.setCol(toCellDataJo, row, col, fromJo.getString("v"), 3, 2);
}
done = true;
break;
}
}
if (!done) {
//添加到最后一行
SheetUtils.setCol(toCellDataJo, toCellDataJo.size(), "A", toCellDataJo.size() - 6 + "", 2, 2);
SheetUtils.setCol(toCellDataJo, toCellDataJo.size(), "B", keyJo.getString("v"), 1, 1);
SheetUtils.setColFunction(toCellDataJo, toCellDataJo.size(), "C", "=SUM(C" + (toCellDataJo.size() - 1) + ":XFD" + (toCellDataJo.size() - 1) + ")", 3);
if (fromJo != null) {
SheetUtils.setCol(toCellDataJo, toCellDataJo.size(), col, fromJo.getString("v"), 3, 2);
}
}
} }
} }
} }
private void buildToCellDataForOne(JSONObject toCellDataJo, JSONObject fromCellDataJo) { private void buildToCellDataForOne(JSONObject toCellDataJo, JSONObject fromCellDataJo) {
String addEnterprise = fromCellDataJo.getJSONObject("7").getJSONObject("1").getString("v"); List<Triple<String, Integer, Integer>> addEnterprises = new ArrayList<>();
//key=7开始 String lastName = null;
boolean add = true; Integer lastBegin = null;
int enterpriseNum = 0; for (int i = 7; i < fromCellDataJo.size(); i++) {
Integer from = null; //key=7开始
Integer to = null; String v = SheetUtils.getColVal(fromCellDataJo, i, "B");
for (int i = 7; i < toCellDataJo.size(); i++) { if (StrUtil.isNotBlank(v)) {
JSONObject jo = toCellDataJo.getJSONObject(i + ""); if (lastName != null) {
if (jo.getJSONObject("1") != null && StrUtil.isNotBlank(jo.getJSONObject("1").getString("v"))) { Triple<String, Integer, Integer> t = new ImmutableTriple<>(lastName, lastBegin, i - 1);
if (from != null && to == null) { addEnterprises.add(t);
}
lastName = v;
lastBegin = i;
}
if (i == fromCellDataJo.size() - 1) {
Triple<String, Integer, Integer> t = new ImmutableTriple<>(lastName, lastBegin, i);
addEnterprises.add(t);
}
}
for (Triple<String, Integer, Integer> triple : addEnterprises) {
String addEnterprise = triple.getLeft();
Integer begin = triple.getMiddle();
Integer end = triple.getRight();
boolean add = true;
int enterpriseNum = 0;
Integer from = null;
Integer to = null;
for (int i = 7; i < toCellDataJo.size(); i++) {
JSONObject jo = toCellDataJo.getJSONObject(i + "");
if (jo != null && jo.getJSONObject("1") != null && StrUtil.isNotBlank(jo.getJSONObject("1").getString("v"))) {
if (from != null && to == null) {
to = i - 1;
}
enterpriseNum++;
}
if (jo != null && jo.getJSONObject("1") != null && Objects.equals(addEnterprise, jo.getJSONObject("1").getString("v"))) {
//覆盖
from = i;
add = false;
}
if (toCellDataJo.size() - 1 == i && from != null && to == null) {
to = i - 1; to = i - 1;
} }
enterpriseNum++;
} }
if (jo.getJSONObject("1") != null && Objects.equals(addEnterprise, jo.getJSONObject("1").getString("v"))) { JSONObject fromJo = new JSONObject();
//覆盖 for (int i = begin; i <= end; i++) {
from = i; JSONObject jo = fromCellDataJo.getJSONObject(i + "");
add = false; if (add) {
String cn = NumberUtils.int2chineseNum(enterpriseNum + 1);
JSONObject jo1 = jo.getJSONObject("0");
jo1.put("v", cn);
break;
}
} }
if (toCellDataJo.size() - 1 == i && from != null && to == null) { int j = 0;
to = i - 1; for (int i = begin; i <= end; i++) {
JSONObject jo = fromCellDataJo.getJSONObject(i + "");
fromJo.put(j++ + "", jo);
} }
} if (add) {
JSONObject fromJo = new JSONObject(); SheetUtils.addRows(fromJo, toCellDataJo);
int j = 0; } else {
boolean run = false; SheetUtils.replaceRows(fromJo, toCellDataJo, from, to);
for (int i = 7; i < fromCellDataJo.size(); i++) {
JSONObject jo = fromCellDataJo.getJSONObject(i + "");
if (add && !run) {
String cn = NumberUtils.int2chineseNum(enterpriseNum + 1);
JSONObject jo1 = jo.getJSONObject("0");
jo1.put("v", cn);
run = true;
} }
fromJo.put(j++ + "", jo);
}
if (add) {
SheetUtils.addRows(fromJo, toCellDataJo);
} else {
SheetUtils.replaceRows(fromJo, toCellDataJo, from, to);
} }
} }
@ -608,6 +687,9 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
tempType = 7; tempType = 7;
} else if (contentType == 6 && levelType == 2) { } else if (contentType == 6 && levelType == 2) {
tempType = 8; tempType = 8;
} else if (contentType == 8){
//项目计划
tempType = 14;
} }
ContractorMonthlyTemplate template = contractorMonthlyTemplateService.getById(tempType); ContractorMonthlyTemplate template = contractorMonthlyTemplateService.getById(tempType);
content = template.getContent(); content = template.getContent();
@ -628,26 +710,28 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
Date date = new Date(); Date date = new Date();
DateTime s1 = DateUtil.offsetDay(date, -7); DateTime s1 = DateUtil.offsetDay(date, -7);
DateTime s2 = DateUtil.offsetDay(date, 7); DateTime s2 = DateUtil.offsetDay(date, 7);
content = content.replace("{{lastWeek}}", DateUtil.formatDateTime(DateUtil.beginOfWeek(s1)) + "~" + DateUtil.formatDateTime(DateUtil.endOfWeek(s1))); content = content.replace("{{lastWeek}}", DateUtil.formatDate(DateUtil.beginOfWeek(s1)) + "~" + DateUtil.formatDate(DateUtil.endOfWeek(s1)));
content = content.replace("{{thisWeek}}", DateUtil.formatDateTime(DateUtil.beginOfWeek(date)) + "~" + DateUtil.formatDateTime(DateUtil.endOfWeek(date))); content = content.replace("{{thisWeek}}", DateUtil.formatDate(DateUtil.beginOfWeek(date)) + "~" + DateUtil.formatDate(DateUtil.endOfWeek(date)));
content = content.replace("{{nextWeek}}", DateUtil.formatDateTime(DateUtil.beginOfWeek(s2)) + "~" + DateUtil.formatDateTime(DateUtil.endOfWeek(s2))); content = content.replace("{{nextWeek}}", DateUtil.formatDate(DateUtil.beginOfWeek(s2)) + "~" + DateUtil.formatDate(DateUtil.endOfWeek(s2)));
content = content.replace("{{enterpriseName}}", en); content = content.replace("{{enterpriseName}}", en);
//取上周的 //取上周的
ContractorMonthlyPeriod p1 = contractorMonthlyPeriodService.getBeforePeriod(period); if (contentType == 1 || contentType == 2) {
ContractorMonthlyPeriod beforeP = contractorMonthlyPeriodService.queryByEntity(p1); ContractorMonthlyPeriod p1 = contractorMonthlyPeriodService.getBeforePeriod(period);
if (beforeP != null) { ContractorMonthlyPeriod beforeP = contractorMonthlyPeriodService.queryByEntity(p1);
ContractorMonthlyDetail detail1 = contractorMonthlyDetailMapper.selectOne(new LambdaQueryWrapper<ContractorMonthlyDetail>() if (beforeP != null) {
.eq(ContractorMonthlyDetail::getContentType, contentType) ContractorMonthlyDetail detail1 = contractorMonthlyDetailMapper.selectOne(new LambdaQueryWrapper<ContractorMonthlyDetail>()
.eq(ContractorMonthlyDetail::getPeriodId, beforeP.getId())); .eq(ContractorMonthlyDetail::getContentType, contentType)
if (detail1 != null) { .eq(ContractorMonthlyDetail::getPeriodId, beforeP.getId()));
JSONObject toJo = JSON.parseObject(content); if (detail1 != null) {
JSONObject toCellDataJo = getCellData(toJo); JSONObject toJo = JSON.parseObject(content);
JSONObject fromCellDataJo = getCellData(JSON.parseObject(detail1.getContent())); JSONObject toCellDataJo = getCellData(toJo);
int fl = SheetUtils.getColDataLength(fromCellDataJo, 8, 5); JSONObject fromCellDataJo = getCellData(JSON.parseObject(detail1.getContent()));
int tl = SheetUtils.getColDataLength(toCellDataJo, 8, 5); int fl = SheetUtils.getColDataLength(fromCellDataJo, 8, 5);
SheetUtils.replaceArea(fromCellDataJo, toCellDataJo, 8, 5, fl + 7, 7, 8, 2, tl + 7, 4); int tl = SheetUtils.getColDataLength(toCellDataJo, 8, 5);
content = JSON.toJSONString(toJo); SheetUtils.replaceAreaForQuantity(fromCellDataJo, toCellDataJo, 8, 5, fl + 7, 7, 8, 2, tl + 7, 4);
content = JSON.toJSONString(toJo);
}
} }
} }
} }
@ -663,11 +747,12 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
List<Long> titleIds = contractorMonthlyConfigService.list(new LambdaQueryWrapper<ContractorMonthlyConfig>() List<Long> titleIds = contractorMonthlyConfigService.list(new LambdaQueryWrapper<ContractorMonthlyConfig>()
.eq(ContractorMonthlyConfig::getUserId, SecurityUtils.getUser().getUserId())).stream().map(ContractorMonthlyConfig::getTitleId).collect(Collectors.toList()); .eq(ContractorMonthlyConfig::getUserId, SecurityUtils.getUser().getUserId())).stream().map(ContractorMonthlyConfig::getTitleId).collect(Collectors.toList());
if (CollUtil.isNotEmpty(titleIds)) { if (CollUtil.isNotEmpty(titleIds)) {
Map<String, ContractorMonthlyTitle> titleMap = contractorMonthlyTitleService.list(new LambdaQueryWrapper<ContractorMonthlyTitle>() List<ContractorMonthlyTitle> titles = contractorMonthlyTitleService.list(new LambdaQueryWrapper<ContractorMonthlyTitle>()
.eq(ContractorMonthlyTitle::getType, levelType) .eq(ContractorMonthlyTitle::getType, levelType)
.in(ContractorMonthlyTitle::getId, titleIds) .in(ContractorMonthlyTitle::getId, titleIds)
).stream().map(o -> { );
o.setWordName(o.getWordName().replace(" ", "")); Map<String, ContractorMonthlyTitle> titleMap = titles.stream().map(o -> {
o.setWordName(o.getWordName().replace(" ", "").replaceAll("\\u00A0+", ""));
return o; return o;
}).collect(Collectors.toMap(ContractorMonthlyTitle::getWordName, Function.identity(), (o, o2) -> o)); }).collect(Collectors.toMap(ContractorMonthlyTitle::getWordName, Function.identity(), (o, o2) -> o));
JSONObject rootJo = JSON.parseObject(content); JSONObject rootJo = JSON.parseObject(content);
@ -704,6 +789,11 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
content = JSON.toJSONString(rootJo); content = JSON.toJSONString(rootJo);
} }
} }
JSONObject rootJo1 = JSONObject.parseObject(content);
if (rootJo1 != null && contentType != 7) {
SheetUtils.setDefaultStyle(rootJo1);
content = JSON.toJSONString(rootJo1);
}
return content; return content;
} }
@ -726,7 +816,14 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
designType = 2; designType = 2;
} }
JSONObject toJo = JSON.parseObject(content); JSONObject toJo = JSON.parseObject(content);
List<Integer> greens = new ArrayList<>();
JSONObject toCellDataJo = getCellData(toJo); JSONObject toCellDataJo = getCellData(toJo);
for (int i = 3; i < toCellDataJo.size(); i++) {
String v = Optional.ofNullable(toCellDataJo.getJSONObject(i + "")).map(m -> m.getJSONObject("0")).map(m -> m.getString("v")).orElse(null);
if (StrUtil.isNotBlank(v)) {
greens.add(i);
}
}
//设计总量 //设计总量
ContractorMonthlyDesign design = contractorMonthlyDesignService.getOne(new LambdaQueryWrapper<ContractorMonthlyDesign>() ContractorMonthlyDesign design = contractorMonthlyDesignService.getOne(new LambdaQueryWrapper<ContractorMonthlyDesign>()
.eq(ContractorMonthlyDesign::getDeviceId, deviceId) .eq(ContractorMonthlyDesign::getDeviceId, deviceId)
@ -736,17 +833,17 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
if (design != null) { if (design != null) {
List<String> list = JSON.parseObject(design.getQuantity(), new TypeReference<List<String>>() { List<String> list = JSON.parseObject(design.getQuantity(), new TypeReference<List<String>>() {
}); });
SheetUtils.setColDataList(toCellDataJo, 3, "C", list); SheetUtils.setColDataListForQuantity(toCellDataJo, 3, "C", list, greens);
} }
//查询所有的period //查询所有的period
List<ContractorMonthlyPeriod> periodList = contractorMonthlyPeriodService.list(new LambdaQueryWrapper<ContractorMonthlyPeriod>() List<ContractorMonthlyPeriod> periodList = contractorMonthlyPeriodService.list(new LambdaQueryWrapper<ContractorMonthlyPeriod>()
.eq(ContractorMonthlyPeriod::getDeviceId, deviceId) .eq(ContractorMonthlyPeriod::getDeviceId, deviceId)
.eq(ContractorMonthlyPeriod::getGroupId, groupId) .eq(ContractorMonthlyPeriod::getGroupId, groupId)
.eq(ContractorMonthlyPeriod::getType, type)
.eq(type == 1, ContractorMonthlyPeriod::getEnterpriseId, enterpriseId) .eq(type == 1, ContractorMonthlyPeriod::getEnterpriseId, enterpriseId)
); );
if (CollUtil.isNotEmpty(periodList)) { if (CollUtil.isNotEmpty(periodList)) {
List<ContractorMonthlyQuantity> quantityList = contractorMonthlyQuantityService.list(new LambdaQueryWrapper<ContractorMonthlyQuantity>() List<ContractorMonthlyQuantity> quantityList = contractorMonthlyQuantityService.list(new LambdaQueryWrapper<ContractorMonthlyQuantity>()
.eq(ContractorMonthlyQuantity::getType, type)
.eq(ContractorMonthlyQuantity::getDesignType, designType) .eq(ContractorMonthlyQuantity::getDesignType, designType)
.in(ContractorMonthlyQuantity::getPeriodId, periodList.stream().map(ContractorMonthlyPeriod::getId).collect(Collectors.toList()))); .in(ContractorMonthlyQuantity::getPeriodId, periodList.stream().map(ContractorMonthlyPeriod::getId).collect(Collectors.toList())));
Optional<ContractorMonthlyQuantity> op = quantityList.stream().filter(o -> Objects.equals(o.getPeriodId(), periodId)).collect(Collectors.toList()).stream().findAny(); Optional<ContractorMonthlyQuantity> op = quantityList.stream().filter(o -> Objects.equals(o.getPeriodId(), periodId)).collect(Collectors.toList()).stream().findAny();
@ -759,47 +856,47 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
if (levelType == 2) { if (levelType == 2) {
// //
String wmQuantity = quantity.getWeekQuantity(); String wmQuantity = quantity.getWeekQuantity();
SheetUtils.setColDataList(toCellDataJo, 3, "D", wmQuantity); SheetUtils.setColDataListForQuantity(toCellDataJo, 3, "D", wmQuantity, greens);
//本月完成量 //本月完成量
List<Long> pids1 = periodList.stream().filter(o -> isLessOrEqual(o, year, month, whichWeek)).map(ContractorMonthlyPeriod::getId).collect(Collectors.toList()); List<Long> pids1 = periodList.stream().filter(o -> isLessOrEqual(o, year, month, whichWeek)).map(ContractorMonthlyPeriod::getId).collect(Collectors.toList());
List<String> months = quantityList.stream().filter(o -> pids1.contains(o.getPeriodId())).map(ContractorMonthlyQuantity::getWeekQuantity).collect(Collectors.toList()); List<String> months = quantityList.stream().filter(o -> pids1.contains(o.getPeriodId())).map(ContractorMonthlyQuantity::getWeekQuantity).collect(Collectors.toList());
SheetUtils.setColDataList(toCellDataJo, 3, "E", this.sumListJson(months)); SheetUtils.setColDataListForQuantity(toCellDataJo, 3, "E", this.sumListJson(months), greens);
//本年累计完成量 //本年累计完成量
List<Long> pids2 = periodList.stream().filter(o -> isLessOrEqual(o, year, month, whichWeek)).map(ContractorMonthlyPeriod::getId).collect(Collectors.toList()); List<Long> pids2 = periodList.stream().filter(o -> isLessOrEqual(o, year, month, whichWeek)).map(ContractorMonthlyPeriod::getId).collect(Collectors.toList());
List<String> years = quantityList.stream().filter(o -> pids2.contains(o.getPeriodId())).map(ContractorMonthlyQuantity::getWeekQuantity).collect(Collectors.toList()); List<String> years = quantityList.stream().filter(o -> pids2.contains(o.getPeriodId())).map(ContractorMonthlyQuantity::getWeekQuantity).collect(Collectors.toList());
SheetUtils.setColDataList(toCellDataJo, 3, "F", this.sumListJson(years)); SheetUtils.setColDataListForQuantity(toCellDataJo, 3, "F", this.sumListJson(years), greens);
//开累完成量 //开累完成量
List<String> alls = quantityList.stream().map(ContractorMonthlyQuantity::getWeekQuantity).collect(Collectors.toList()); List<String> alls = quantityList.stream().map(ContractorMonthlyQuantity::getWeekQuantity).collect(Collectors.toList());
SheetUtils.setColDataList(toCellDataJo, 3, "G", this.sumListJson(alls)); SheetUtils.setColDataListForQuantity(toCellDataJo, 3, "G", this.sumListJson(alls), greens);
//本期到货 //本期到货
String arriveGoods = quantity.getArriveGoods(); String arriveGoods = quantity.getArriveGoods();
SheetUtils.setColDataList(toCellDataJo, 3, "H", arriveGoods); SheetUtils.setColDataListForQuantity(toCellDataJo, 3, "H", arriveGoods, greens);
//累计到货 //累计到货
List<String> arriveAlls = quantityList.stream().map(ContractorMonthlyQuantity::getArriveGoods).collect(Collectors.toList()); List<String> arriveAlls = quantityList.stream().map(ContractorMonthlyQuantity::getArriveGoods).collect(Collectors.toList());
SheetUtils.setColDataList(toCellDataJo, 3, "I", this.sumListJson(arriveAlls)); SheetUtils.setColDataListForQuantity(toCellDataJo, 3, "I", this.sumListJson(arriveAlls), greens);
//备注 //备注
String remarks = quantity.getRemarks(); String remarks = quantity.getRemarks();
SheetUtils.setColDataList(toCellDataJo, 3, "J", remarks); SheetUtils.setColDataListForQuantity(toCellDataJo, 3, "J", remarks, greens);
} else { } else {
// //
//本月完成量 //本月完成量
SheetUtils.setColDataList(toCellDataJo, 3, "D", quantity.getMonthQuantity()); SheetUtils.setColDataListForQuantity(toCellDataJo, 3, "D", quantity.getMonthQuantity(), greens);
//本年累计完成量 //本年累计完成量
List<Long> pids2 = periodList.stream().filter(o -> isLessOrEqual(o, year, month, whichWeek)).map(ContractorMonthlyPeriod::getId).collect(Collectors.toList()); List<Long> pids2 = periodList.stream().filter(o -> isLessOrEqual(o, year, month, whichWeek)).map(ContractorMonthlyPeriod::getId).collect(Collectors.toList());
List<String> years = quantityList.stream().filter(o -> pids2.contains(o.getPeriodId())).map(ContractorMonthlyQuantity::getMonthQuantity).collect(Collectors.toList()); List<String> years = quantityList.stream().filter(o -> pids2.contains(o.getPeriodId())).map(ContractorMonthlyQuantity::getMonthQuantity).collect(Collectors.toList());
SheetUtils.setColDataList(toCellDataJo, 3, "E", this.sumListJson(years)); SheetUtils.setColDataListForQuantity(toCellDataJo, 3, "E", this.sumListJson(years), greens);
//开累完成量 //开累完成量
List<String> alls = quantityList.stream().map(ContractorMonthlyQuantity::getMonthQuantity).collect(Collectors.toList()); List<String> alls = quantityList.stream().map(ContractorMonthlyQuantity::getMonthQuantity).collect(Collectors.toList());
SheetUtils.setColDataList(toCellDataJo, 3, "F", this.sumListJson(alls)); SheetUtils.setColDataListForQuantity(toCellDataJo, 3, "F", this.sumListJson(alls), greens);
//本期到货 //本期到货
String arriveGoods = quantity.getArriveGoods(); String arriveGoods = quantity.getArriveGoods();
SheetUtils.setColDataList(toCellDataJo, 3, "G", arriveGoods); SheetUtils.setColDataListForQuantity(toCellDataJo, 3, "G", arriveGoods, greens);
//累计到货 //累计到货
List<String> arriveAlls = quantityList.stream().map(ContractorMonthlyQuantity::getArriveGoods).collect(Collectors.toList()); List<String> arriveAlls = quantityList.stream().map(ContractorMonthlyQuantity::getArriveGoods).collect(Collectors.toList());
SheetUtils.setColDataList(toCellDataJo, 3, "H", this.sumListJson(arriveAlls)); SheetUtils.setColDataListForQuantity(toCellDataJo, 3, "H", this.sumListJson(arriveAlls), greens);
//备注 //备注
String remarks = quantity.getRemarks(); String remarks = quantity.getRemarks();
SheetUtils.setColDataList(toCellDataJo, 3, "I", remarks); SheetUtils.setColDataListForQuantity(toCellDataJo, 3, "I", remarks, greens);
} }
} }
} }
@ -882,7 +979,7 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
content = detail.getContent(); content = detail.getContent();
} }
ContractorMonthlyTitle title = contractorMonthlyTitleService.getById(titleId); ContractorMonthlyTitle title = contractorMonthlyTitleService.getById(titleId);
String wordName = title.getWordName().replace(" ", ""); String wordName = title.getWordName().replaceAll("\\u00A0+", "").replace(" ", "");
JSONObject rootJo = JSON.parseObject(content); JSONObject rootJo = JSON.parseObject(content);
JSONArray mainJa = rootJo.getJSONArray("main"); JSONArray mainJa = rootJo.getJSONArray("main");
JSONArray newMainJa = new JSONArray(); JSONArray newMainJa = new JSONArray();
@ -911,7 +1008,7 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
if (!levels.contains(level1)) { if (!levels.contains(level1)) {
newMainJa.add(jo); newMainJa.add(jo);
} else { } else {
if (levels.indexOf(level) <= levels.indexOf(level1)) { if (levels.contains(level) /*<= levels.indexOf(level1)*/) {
break; break;
} }
newMainJa.add(jo); newMainJa.add(jo);
@ -952,7 +1049,7 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
} }
String content = detail.getContent(); String content = detail.getContent();
ContractorMonthlyTitle title = contractorMonthlyTitleService.getById(titleId); ContractorMonthlyTitle title = contractorMonthlyTitleService.getById(titleId);
String wordName = title.getWordName().replace(" ", ""); String wordName = title.getWordName().replaceAll("\\u00A0+", "").replace(" ", "");
JSONObject rootJo = JSON.parseObject(content); JSONObject rootJo = JSON.parseObject(content);
JSONArray mainJa = rootJo.getJSONArray("main"); JSONArray mainJa = rootJo.getJSONArray("main");
JSONArray newMainJa = new JSONArray(); JSONArray newMainJa = new JSONArray();
@ -983,8 +1080,13 @@ public class ContractorMonthlyDetailServiceImpl extends ServiceImpl<ContractorMo
} else { } else {
String level1 = jo.getString("level"); String level1 = jo.getString("level");
if (needRead) { if (needRead) {
if (levels.contains(level1) && levels.indexOf(level) >= levels.indexOf(level1)) { if (levels.contains(level1) /*&& levels.indexOf(level) >= levels.indexOf(level1)*/) {
needRead = false; needRead = false;
//补充换行
String str = Convert.toStr(jo.get("value"));
if (!str.contains("\n") && !str.contains("\r\n")) {
newMainJa.add(new JoBuilder().put("value", "\n").build());
}
newMainJa.add(jo); newMainJa.add(jo);
} }
} else { } else {

View File

@ -48,7 +48,7 @@ public class ContractorMonthlyTitleServiceImpl extends ServiceImpl<ContractorMon
private QueryWrapper<ContractorMonthlyTitle> getQueryWrapper(HashMap<String, Object> param) { private QueryWrapper<ContractorMonthlyTitle> getQueryWrapper(HashMap<String, Object> param) {
QueryWrapper<ContractorMonthlyTitle> queryWrapper = QueryGenerator.initPageQueryWrapper(ContractorMonthlyTitle.class, param, true); QueryWrapper<ContractorMonthlyTitle> queryWrapper = QueryGenerator.initPageQueryWrapper(ContractorMonthlyTitle.class, param, true);
queryWrapper.orderByDesc(RefUtil.fieldNameUlc(ContractorMonthlyTitle::getId)); queryWrapper.orderByAsc(RefUtil.fieldNameUlc(ContractorMonthlyTitle::getSort));
return queryWrapper; return queryWrapper;
} }

View File

@ -2,6 +2,7 @@ package com.zhgd.xmgl.modules.baotou.service.impl;
import com.zhgd.jeecg.common.execption.OpenAlertException; import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.xmgl.modules.baotou.entity.ProjectHomeManage; import com.zhgd.xmgl.modules.baotou.entity.ProjectHomeManage;
import com.zhgd.xmgl.modules.baotou.entity.ProjectHomeWork;
import com.zhgd.xmgl.modules.baotou.mapper.ProjectHomeManageMapper; import com.zhgd.xmgl.modules.baotou.mapper.ProjectHomeManageMapper;
import com.zhgd.xmgl.modules.baotou.service.IProjectHomeManageService; import com.zhgd.xmgl.modules.baotou.service.IProjectHomeManageService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -44,7 +45,7 @@ public class ProjectHomeManageServiceImpl extends ServiceImpl<ProjectHomeManageM
private QueryWrapper<ProjectHomeManage> getQueryWrapper(HashMap<String, Object> param) { private QueryWrapper<ProjectHomeManage> getQueryWrapper(HashMap<String, Object> param) {
QueryWrapper<ProjectHomeManage> queryWrapper = QueryGenerator.initPageQueryWrapper(ProjectHomeManage.class, param, true); QueryWrapper<ProjectHomeManage> queryWrapper = QueryGenerator.initPageQueryWrapper(ProjectHomeManage.class, param, true);
queryWrapper.orderByDesc(RefUtil.fieldNameUlc(ProjectHomeManage::getId)); queryWrapper.orderByAsc(RefUtil.fieldNameUlc(ProjectHomeManage::getSort));
return queryWrapper; return queryWrapper;
} }

View File

@ -49,7 +49,7 @@ public class ProjectHomeWorkServiceImpl extends ServiceImpl<ProjectHomeWorkMappe
private QueryWrapper<ProjectHomeWork> getQueryWrapper(HashMap<String, Object> param) { private QueryWrapper<ProjectHomeWork> getQueryWrapper(HashMap<String, Object> param) {
QueryWrapper<ProjectHomeWork> queryWrapper = QueryGenerator.initPageQueryWrapper(ProjectHomeWork.class, param, true); QueryWrapper<ProjectHomeWork> queryWrapper = QueryGenerator.initPageQueryWrapper(ProjectHomeWork.class, param, true);
queryWrapper.orderByDesc(RefUtil.fieldNameUlc(ProjectHomeWork::getId)); queryWrapper.orderByAsc(RefUtil.fieldNameUlc(ProjectHomeWork::getSort));
return queryWrapper; return queryWrapper;
} }

View File

@ -9,8 +9,19 @@ import com.gexin.fastjson.TypeReference;
import java.util.*; import java.util.*;
public class SheetUtils { public class SheetUtils {
/**
static List<String> letterList = Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"); * 居中和加边框
*/
static String centerStyle = "cwv4pm";
/**
* 靠右对齐和加边框
*/
static String rightStyle = "cyqt7m";
static String leftStyle = "poyh2f";
/**
* 绿色工程量
*/
static String greenQuantityStyle = "uh17gs";
public static JSONObject addRows(JSONObject fromJo, JSONObject toJo) { public static JSONObject addRows(JSONObject fromJo, JSONObject toJo) {
for (int i = 0; i < fromJo.size(); i++) { for (int i = 0; i < fromJo.size(); i++) {
@ -100,6 +111,39 @@ public class SheetUtils {
return add; return add;
} }
public static JSONObject replaceAreaForQuantity(JSONObject fromCellDataJo, JSONObject toCellDataJo, int i1, int i2, int i3, int i4, int j1, int j2, int j3, int j4) {
JSONObject add = BeanUtil.toBean(toCellDataJo, JSONObject.class);
//是否扩容
int diffCol = i4 - i2 - (j4 - j2);
int diffRow = i3 - i1 - (j3 - j1);
for (int row = 0; row < toCellDataJo.size(); row++) {
JSONObject jo = toCellDataJo.getJSONObject(row + "");
JSONObject nr = new JSONObject();
for (int col = 0; col < jo.size(); col++) {
nr.put(col + "", jo.getJSONObject(col + ""));
}
if (diffRow > 0 && row > j3) {
add.put(row + diffRow + "", nr);
} else {
add.put(row + "", nr);
}
}
int fromRow = i1;
for (int row = j1; row <= j3; row++) {
int fromCol = i2;
JSONObject nr = add.getJSONObject(row + "");
for (int col = j2; col <= j4; col++) {
nr.put(col + "", fromCellDataJo.getJSONObject(fromRow + "").getJSONObject(fromCol + ""));
fromCol++;
}
fromRow++;
add.put(row + "", nr);
}
toCellDataJo.clear();
toCellDataJo.putAll(add);
return add;
}
/** /**
* 获取col连续不为空的数量 * 获取col连续不为空的数量
* *
@ -125,7 +169,33 @@ public class SheetUtils {
} }
public static String getColNum(String col) { public static String getColNum(String col) {
return letterList.indexOf(col) + ""; char[] chars = col.toCharArray();
int res = 0;
for (char c : chars) {
res = res * 26 + (c - 'A' + 1);
}
return res - 1 + "";
}
/**
* description: 列号从1开始0 对应 A列26对应AA列
*
* @param value Excel列号
*/
public static String getIndexOfCol(int value) {
// 转26进制 0-25
int calculateValue = value;
// 取高位
int high = calculateValue / 26;
// 取低位
int low = calculateValue % 26;
// 低位可直接取出对应的字母
String transStr = String.valueOf((char) (low + 65));
if (high > 0) {
// 高位递归取出字母
transStr = getIndexOfCol(high) + transStr;
}
return transStr;
} }
/** /**
@ -151,13 +221,34 @@ public class SheetUtils {
*/ */
public static List<String> getColDataList(JSONObject cellData, int row, String col, int length) { public static List<String> getColDataList(JSONObject cellData, int row, String col, int length) {
List<String> list = new ArrayList<>(); List<String> list = new ArrayList<>();
for (int r = row; r < length; r++) { for (int r = row; r < length + row; r++) {
JSONObject jo = cellData.getJSONObject(r + ""); JSONObject jo = cellData.getJSONObject(r + "");
list.add(Optional.ofNullable(jo.getJSONObject(getColNum(col))).map(m -> m.getString("v")).orElse(null)); list.add(Optional.ofNullable(jo.getJSONObject(getColNum(col))).map(m -> m.getString("v")).orElse(null));
} }
return list; return list;
} }
public static void setColDataListForQuantity(JSONObject toCellDataJo, int row, String col, List<String> addList, List<Integer> greens) {
for (int r = row; r < row + addList.size(); r++) {
JSONObject jo = toCellDataJo.getJSONObject(r + "");
Map<String, Object> map = new MapBuilder<String, Object>().put("v", addList.get(r - row)).put("t", 2).build();
if (greens.contains(r)) {
map.put("s", greenQuantityStyle);
} else {
map.put("s", centerStyle);
}
if (jo != null) {
jo.put(getColNum(col), map);
}
}
}
public static void setColDataListForQuantity(JSONObject toCellDataJo, int row, String col, String jsonStr, List<Integer> greens) {
List<String> addList = JSON.parseObject(jsonStr, new TypeReference<List<String>>() {
});
setColDataListForQuantity(toCellDataJo, row, col, addList, greens);
}
public static void setColDataList(JSONObject toCellDataJo, int row, String col, List<String> addList) { public static void setColDataList(JSONObject toCellDataJo, int row, String col, List<String> addList) {
for (int r = row; r < row + addList.size(); r++) { for (int r = row; r < row + addList.size(); r++) {
JSONObject jo = toCellDataJo.getJSONObject(r + ""); JSONObject jo = toCellDataJo.getJSONObject(r + "");
@ -167,9 +258,179 @@ public class SheetUtils {
} }
public static void setColDataList(JSONObject toCellDataJo, int row, String col, String jsonStr) { public static void setColDataList(JSONObject toCellDataJo, int row, String col, String jsonStr) {
List<String> addList = JSON.parseObject(jsonStr,new TypeReference<List<String>>(){}); List<String> addList = JSON.parseObject(jsonStr, new TypeReference<List<String>>() {
});
setColDataList(toCellDataJo, row, col, addList); setColDataList(toCellDataJo, row, col, addList);
} }
/**
* 获取val
*/
public static String getColVal(JSONObject cellData, int row, String d) {
return Optional.ofNullable(cellData.getJSONObject(row + "")).map(m -> m.getJSONObject(getColNum(d))).map(m -> m.getString("v")).orElse(null);
}
public static JSONObject getColJsonObject(JSONObject cellData, int row, String col) {
return Optional.ofNullable(cellData.getJSONObject(row + "")).map(m -> m.getJSONObject(getColNum(col))).orElse(null);
}
public static void setCol(JSONObject cellData, int row, String col, String v, int center, int t) {
setCol(cellData, row, Integer.parseInt(getColNum(col)), v, center, t);
}
/**
* @param cellData
* @param row
* @param col
* @param v
* @param center
* @param t 1 表示字符串2 表示数字3 表示布尔值4 表示强制文本
*/
public static void setCol(JSONObject cellData, int row, int col, String v, int center, int t) {
cellData.putIfAbsent(row + "", new JoBuilder().build());
String s;
if (Objects.equals(center, 1)) {
s = leftStyle;
} else if (Objects.equals(center, 3)) {
s = rightStyle;
} else {
s = centerStyle;
}
cellData.getJSONObject(row + "").put(col + "", new JoBuilder().put("s", s).put("t", t).put("v", v).build());
}
/**
* @param cellData
* @param row
* @param col
* @param v
* @param center 1左 2中 3右
*/
public static void setColFunction(JSONObject cellData, int row, int col, String v, int center) {
cellData.putIfAbsent(row + "", new JoBuilder().build());
String s;
if (Objects.equals(center, 1)) {
s = leftStyle;
} else if (Objects.equals(center, 3)) {
s = rightStyle;
} else {
s = centerStyle;
}
cellData.getJSONObject(row + "").put(col + "", new JoBuilder().put("s", s).put("t", 2).put("f", v).build());
}
public static void setColFunction(JSONObject cellData, int row, String col, String v, int center) {
setColFunction(cellData, row, Integer.parseInt(getColNum(col)), v, center);
}
/**
* 设置默认样式
*
* @param rootJo
*/
public static void setDefaultStyle(JSONObject rootJo) {
JSONObject styles = rootJo.getJSONObject("styles");
styles.put(leftStyle, JSON.parseObject(getStyle(1)));
styles.put(centerStyle, JSON.parseObject(getStyle(2)));
styles.put(rightStyle, JSON.parseObject(getStyle(3)));
String gs = "{\n" +
" \"ff\": \"Arial\",\n" +
" \"fs\": 11,\n" +
" \"it\": 0,\n" +
" \"bl\": 0,\n" +
" \"ul\": {\n" +
" \"s\": 0,\n" +
" \"cl\": {\n" +
" \"rgb\": \"rgb(0,0,0)\"\n" +
" }\n" +
" },\n" +
" \"st\": {\n" +
" \"s\": 0,\n" +
" \"cl\": {\n" +
" \"rgb\": \"rgb(0,0,0)\"\n" +
" }\n" +
" },\n" +
" \"ol\": {\n" +
" \"s\": 0,\n" +
" \"cl\": {\n" +
" \"rgb\": \"rgb(0,0,0)\"\n" +
" }\n" +
" },\n" +
" \"tr\": {\n" +
" \"a\": 0,\n" +
" \"v\": 0\n" +
" },\n" +
" \"td\": 0,\n" +
" \"cl\": {\n" +
" \"rgb\": \"rgb(0,0,0)\"\n" +
" },\n" +
" \"bg\": {\n" +
" \"rgb\": \"rgb(204,255,204)\"\n" +
" },\n" +
" \"ht\": 2,\n" +
" \"vt\": 2,\n" +
" \"tb\": 3,\n" +
" \"pd\": {\n" +
" \"t\": 0,\n" +
" \"b\": 2,\n" +
" \"l\": 2,\n" +
" \"r\": 2\n" +
" },\n" +
" \"bd\": {\n" +
" \"r\": {\n" +
" \"cl\": {\n" +
" \"rgb\": \"rgb(0,0,0)\"\n" +
" },\n" +
" \"s\": 1\n" +
" },\n" +
" \"b\": {\n" +
" \"cl\": {\n" +
" \"rgb\": \"rgb(0,0,0)\"\n" +
" },\n" +
" \"s\": 1\n" +
" }\n" +
" }\n" +
"}";
styles.put(greenQuantityStyle, JSON.parseObject(gs));
}
/**
* 有边框和居中靠右对齐等
*
* @param ht
* @return
*/
private static String getStyle(int ht) {
String s = "{\n" +
" \"bd\": {\n" +
" \"t\": {\n" +
" \"s\": 1,\n" +
" \"cl\": {\n" +
" \"rgb\": \"#000000\"\n" +
" }\n" +
" },\n" +
" \"b\": {\n" +
" \"s\": 1,\n" +
" \"cl\": {\n" +
" \"rgb\": \"#000000\"\n" +
" }\n" +
" },\n" +
" \"l\": {\n" +
" \"s\": 1,\n" +
" \"cl\": {\n" +
" \"rgb\": \"#000000\"\n" +
" }\n" +
" },\n" +
" \"r\": {\n" +
" \"s\": 1,\n" +
" \"cl\": {\n" +
" \"rgb\": \"#000000\"\n" +
" }\n" +
" }\n" +
" },\n" +
" \"ht\": " + ht + ",\n" +
"\"vt\": 2" +
"}";
return s;
}
} }