Commit 660b2dcb authored by danfuman's avatar danfuman

Merge branch 'V20231129-中建一局二公司' of http://192.168.60.201/root/dsk-operate-sys...

Merge branch 'V20231129-中建一局二公司' of http://192.168.60.201/root/dsk-operate-sys into V20231129-中建一局二公司
parents ee41d339 da5c1736
...@@ -64,7 +64,7 @@ public class CbDirectExpenseController extends BaseController { ...@@ -64,7 +64,7 @@ public class CbDirectExpenseController extends BaseController {
/*** /***
* 删除直接费费用项 * 删除直接费费用项
*/ */
@GetMapping("/deleteExpense/{id}") @DeleteMapping("/deleteExpense/{id}")
public R<Void> deleteExpense(@NotNull(message = "ID不能为空") @PathVariable Long id) { public R<Void> deleteExpense(@NotNull(message = "ID不能为空") @PathVariable Long id) {
return toAjax(baseService.deleteExpense(id)); return toAjax(baseService.deleteExpense(id));
} }
......
...@@ -54,6 +54,15 @@ public class CbQuantitySummaryController extends BaseController { ...@@ -54,6 +54,15 @@ public class CbQuantitySummaryController extends BaseController {
return R.ok(baseService.subjectList(bo)); return R.ok(baseService.subjectList(bo));
} }
/**
* 实体工程材料-单位换算提示
*/
@GetMapping(value = "/conversionNotice")
public R conversionNotice(CbQuantitySummaryListBo bo) {
baseService.conversionNotice(bo);
return R.ok();
}
/** /**
* 更新月成本信息 * 更新月成本信息
*/ */
......
...@@ -4,7 +4,13 @@ import com.baomidou.mybatisplus.annotation.IdType; ...@@ -4,7 +4,13 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.Range;
import javax.annotation.CheckForNull;
import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
...@@ -19,61 +25,53 @@ public class CbCostMeasureActualSaveBo { ...@@ -19,61 +25,53 @@ public class CbCostMeasureActualSaveBo {
/** /**
* 计划成本措施费id * 计划成本措施费id
*/ */
@TableField(value = "plan_measure_id")
private Long planMeasureId; private Long planMeasureId;
/** /**
* 本月发生成本比例 * 本月发生成本比例
*/ */
@TableField(value = "month_cost_rate") @DecimalMin(value = "-1",message = "数据格式不正确")
@DecimalMax(value = "1",message = "数据格式不正确")
private BigDecimal monthCostRate; private BigDecimal monthCostRate;
/** /**
* 成本合价 * 成本合价
*/ */
@TableField(value = "cost_effective")
private BigDecimal costEffective; private BigDecimal costEffective;
/** /**
* 截止本月工程量 * 截止本月工程量
*/ */
@TableField(value = "current_project_volume")
private BigDecimal currentProjectVolume; private BigDecimal currentProjectVolume;
/** /**
* 推送工程量 * 推送工程量
*/ */
@TableField(value = "submit_project_volume")
private BigDecimal submitProjectVolume; private BigDecimal submitProjectVolume;
/** /**
* 年月 * 年月
*/ */
@TableField(value = "`month`")
private String month; private String month;
/** /**
* 推送时间 * 推送时间
*/ */
@TableField(value = "push_time")
private Date pushTime; private Date pushTime;
/** /**
* 推送数据json * 推送数据json
*/ */
@TableField(value = "push_data_json")
private String pushDataJson; private String pushDataJson;
/** /**
* 修改人 * 修改人
*/ */
@TableField(value = "update_user")
private String updateUser; private String updateUser;
/** /**
* 修改人id * 修改人id
*/ */
@TableField(value = "update_id")
private String updateId; private String updateId;
......
...@@ -30,7 +30,12 @@ public interface CbQuantitySummaryMapper extends BaseMapperPlus<CbQuantitySummar ...@@ -30,7 +30,12 @@ public interface CbQuantitySummaryMapper extends BaseMapperPlus<CbQuantitySummar
List<CbQuantitySummaryListVo> selectListBySubject(CbQuantitySummaryListBo bo); List<CbQuantitySummaryListVo> selectListBySubject(CbQuantitySummaryListBo bo);
/**
* 未换算数据
* @param bo
* @return
*/
List<CbQuantitySummaryListVo> unconvertedList(CbQuantitySummaryListBo bo);
} }
...@@ -179,7 +179,7 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C ...@@ -179,7 +179,7 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C
TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
treeNodeConfig.setIdKey("id"); treeNodeConfig.setIdKey("id");
treeNodeConfig.setParentIdKey("parentId"); treeNodeConfig.setParentIdKey("parentId");
treeNodeConfig.setChildrenKey("childrens"); treeNodeConfig.setChildrenKey("children");
//构建树形 //构建树形
List<Tree<Long>> trees = TreeUtil.build(dataList, costMeasureActualBo.getId(), treeNodeConfig, ((object, treeNode) -> { List<Tree<Long>> trees = TreeUtil.build(dataList, costMeasureActualBo.getId(), treeNodeConfig, ((object, treeNode) -> {
treeNode.setId(object.getId());//id treeNode.setId(object.getId());//id
......
...@@ -278,7 +278,9 @@ public class CbDirectExpenseServiceImpl extends ServiceImpl<CbDirectExpenseMappe ...@@ -278,7 +278,9 @@ public class CbDirectExpenseServiceImpl extends ServiceImpl<CbDirectExpenseMappe
directExpense.setIsImport(false); directExpense.setIsImport(false);
//取编码前两位字母,ZY代表专,LW代表劳,FG代表材 //取编码前两位字母,ZY代表专,LW代表劳,FG代表材
String code = directExpense.getCode().substring(0, 2); String originCode = directExpense.getCode();
Assert.isFalse(originCode.length() < 2, "编码长度不足");
String code = originCode.substring(0, 2);
switch (code) { switch (code) {
case CbProjectConstants.DIRECT_EXPENSE_CODE_ZHUAN: case CbProjectConstants.DIRECT_EXPENSE_CODE_ZHUAN:
directExpense.setExpenseCategoryTag(CbProjectConstants.DIRECT_EXPENSE_CATEGORY_TAG_ZHUAN); directExpense.setExpenseCategoryTag(CbProjectConstants.DIRECT_EXPENSE_CATEGORY_TAG_ZHUAN);
......
...@@ -24,8 +24,10 @@ import com.dsk.cscec.mapper.CbProjectFileMapper; ...@@ -24,8 +24,10 @@ import com.dsk.cscec.mapper.CbProjectFileMapper;
import com.dsk.cscec.mapper.CbProjectRecordMapper; import com.dsk.cscec.mapper.CbProjectRecordMapper;
import com.dsk.cscec.service.*; import com.dsk.cscec.service.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.aop.framework.AopContext;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionTemplate;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -60,6 +62,8 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -60,6 +62,8 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
private ICbCostMeasureService costMeasureService; private ICbCostMeasureService costMeasureService;
@Resource @Resource
private CbDirectExpenseService directExpenseService; private CbDirectExpenseService directExpenseService;
@Resource
private TransactionTemplate transactionTemplate;
/** /**
* 新增项目 * 新增项目
...@@ -98,7 +102,6 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -98,7 +102,6 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
* @param projectId 项目ID * @param projectId 项目ID
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void importData(Long projectId) throws Exception { public void importData(Long projectId) throws Exception {
//校验项目是否存在 //校验项目是否存在
CbProjectRecord projectRecord = this.checkProjectExist(projectId); CbProjectRecord projectRecord = this.checkProjectExist(projectId);
...@@ -118,15 +121,8 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -118,15 +121,8 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
//成本汇总 //成本汇总
projectFileList.addAll(this.checkCbTypeExistFile(projectId, CbProjectConstants.CB_TYPE_SUMMARY, CbProjectConstants.CB_TYPE_SUMMARY_NAME)); projectFileList.addAll(this.checkCbTypeExistFile(projectId, CbProjectConstants.CB_TYPE_SUMMARY, CbProjectConstants.CB_TYPE_SUMMARY_NAME));
//修改项目状态:解析中 //修改文件和项目解析状态为解析中
projectRecord.setProjectFileStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSING); ((CbProjectRecordServiceImpl) AopContext.currentProxy()).editParseStatus(projectRecord, projectFileList);
baseMapper.updateById(projectRecord);
//修改所有该项目的项目文件状态:解析中
CbProjectFileServiceImpl projectFileService = new CbProjectFileServiceImpl();
projectFileService.updateBatchById(projectFileList.stream().peek(projectFile -> {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSING);
projectFile.setFailRemark(null);
}).collect(Collectors.toList()));
//调各个成本类型的解析文件方法 //调各个成本类型的解析文件方法
Integer cbStage = projectRecord.getCbStage(); Integer cbStage = projectRecord.getCbStage();
...@@ -149,6 +145,19 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -149,6 +145,19 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
cbSummaryService.importCbSummary(projectId); cbSummaryService.importCbSummary(projectId);
} }
@Transactional(rollbackFor = Exception.class)
public void editParseStatus(CbProjectRecord projectRecord, List<CbProjectFile> projectFileList) {
//修改项目状态:解析中
projectRecord.setProjectFileStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSING);
baseMapper.updateById(projectRecord);
//修改所有该项目的项目文件状态:解析中
CbProjectFileServiceImpl projectFileService = new CbProjectFileServiceImpl();
projectFileService.updateBatchById(projectFileList.stream().peek(projectFile -> {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSING);
projectFile.setFailRemark(null);
}).collect(Collectors.toList()));
}
/** /**
* 校验各个成本类型是否至少有1个文件 * 校验各个成本类型是否至少有1个文件
* *
......
package com.dsk.cscec.service.impl; package com.dsk.cscec.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.SecureUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.constant.GlobalConstants;
import com.dsk.common.exception.ServiceException; import com.dsk.common.exception.ServiceException;
import com.dsk.common.helper.LoginHelper; import com.dsk.common.helper.LoginHelper;
import com.dsk.common.utils.redis.RedisUtils;
import com.dsk.cscec.domain.CbQuantitySummary; import com.dsk.cscec.domain.CbQuantitySummary;
import com.dsk.cscec.domain.CbQuantitySummaryActual; import com.dsk.cscec.domain.CbQuantitySummaryActual;
import com.dsk.cscec.domain.CbSubject; import com.dsk.cscec.domain.CbSubject;
...@@ -17,6 +26,7 @@ import com.dsk.cscec.mapper.CbSubjectMapper; ...@@ -17,6 +26,7 @@ import com.dsk.cscec.mapper.CbSubjectMapper;
import com.dsk.cscec.service.ICbQuantitySummaryActualService; import com.dsk.cscec.service.ICbQuantitySummaryActualService;
import com.dsk.cscec.service.ICbQuantitySummaryService; import com.dsk.cscec.service.ICbQuantitySummaryService;
import jodd.bean.BeanException; import jodd.bean.BeanException;
import jodd.util.StringUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -24,10 +34,8 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -24,10 +34,8 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.time.Duration;
import java.util.HashMap; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -145,5 +153,35 @@ public class CbQuantitySummaryServiceImpl extends ServiceImpl<CbQuantitySummaryM ...@@ -145,5 +153,35 @@ public class CbQuantitySummaryServiceImpl extends ServiceImpl<CbQuantitySummaryM
int i = baseMapper.batchInsert(list); int i = baseMapper.batchInsert(list);
return i == list.size(); return i == list.size();
} }
@Override
public void conversionNotice(CbQuantitySummaryListBo bo) {
if (StringUtil.isBlank(bo.getRecordDate())) {
//默认当前月
bo.setRecordDate(DatePattern.SIMPLE_MONTH_FORMAT.format(new Date()));
}
//是否是实体工程材料
CbSubject cbSubject = cbSubjectMapper.selectOne(new LambdaQueryWrapper<CbSubject>().eq(CbSubject::getCbSubjectName, bo.getCbSubjectName()));
if (ObjectUtil.isNull(cbSubject)) {
return;
}
if (cbSubject.getCbSubjectNo().startsWith("FG") || cbSubject.getCbSubjectNo().startsWith("JD")) {
//是否存在未换算数据
List<CbQuantitySummaryListVo> unconvertedList = baseMapper.unconvertedList(bo);
if (CollectionUtil.isEmpty(unconvertedList)) {
return;
}
//是否提示
String key = GlobalConstants.UNIT_CONVERSION_NOTICE + LoginHelper.getUserId() + "_" + bo.getProjectId() + "_" + bo.getCbSubjectName() + "_" + bo.getRecordDate();
if (ObjectUtil.isNull(RedisUtils.getCacheObject(key))) {
Date now = new Date();
long expireTime = DateUtil.between(now, DateUtil.endOfDay(now), DateUnit.SECOND);
RedisUtils.setCacheObject(key, "noticed", Duration.ofSeconds(expireTime));
Assert.isTrue(false, "系统检测到您近期未进行物料单位换算,请立即进行换算。");
}
}
}
} }
...@@ -76,4 +76,21 @@ ...@@ -76,4 +76,21 @@
order by a.`number` asc order by a.`number` asc
</select> </select>
<select id="unconvertedList" resultType="com.dsk.cscec.domain.vo.CbQuantitySummaryListVo">
select
cqs.id, cqs.cb_subject_name, cqs.company_no, cqs.org_no, cqs.cb_name, cqs.job_content, cqs.calculation_rule,
cqs.unit, cqs.material_description, cqs.guide_price, cqs.bid_unit_price, cqs.unit_price_difference, cqs.quantity,
cqs.combined_price, cqs.combined_price_tax, cqs.brand_name, cqs.bid_source, cqs.remark, cqs.`number`, cqsa.quantities,
cqsa.quantities_unit, cqsa.conversion_quantities, cqsa.conversion_unit, cqsa.purchase_unit_price, cqsa.create_time,
cqsa.id actualId, cqsa.ipm_project_code, cqsa.ipm_contract_code, cqsa.ipm_biz_code, cqsa.push_quantities
from cb_quantity_summary cqs
left join cb_quantity_summary_actual cqsa on cqs.id = cqsa.cb_quantity_summary_id
where cqs.del_falg = 0
and cqsa.quantities is not null
and (cqsa.conversion_unit is null or cqsa.conversion_unit = '')
and cqs.project_id = #{projectId}
and cqs.cb_stage = #{cbStage}
and cqsa.record_date = #{recordDate}
and cqs.cb_subject_name = #{cbSubjectName}
</select>
</mapper> </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