|
@@ -0,0 +1,174 @@
|
|
|
+package com.rongwei.bscommon.sys.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.rongwei.bscommon.sys.dao.QcsMainCostDao;
|
|
|
+import com.rongwei.bscommon.sys.service.QcsMainCostService;
|
|
|
+import com.rongwei.bscommon.sys.service.QcsMainDetailService;
|
|
|
+import com.rongwei.bsentity.domain.QcsMainCostDo;
|
|
|
+import com.rongwei.bsentity.domain.QcsMainDetailDo;
|
|
|
+import com.rongwei.bsentity.domain.QcsSubjectConfigDo;
|
|
|
+import com.rongwei.rwcommon.base.R;
|
|
|
+import com.rongwei.rwcommon.utils.SecurityUtil;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class QcsMainCostServiceImpl extends ServiceImpl<QcsMainCostDao, QcsMainCostDo> implements QcsMainCostService {
|
|
|
+ private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ QcsMainCostService qcsMainCostService;
|
|
|
+ @Autowired
|
|
|
+ QcsMainDetailService qcsMainDetailService;
|
|
|
+ @Autowired
|
|
|
+ QcsMainCostDao qcsMainCostDao;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public R setOtherCost(Map<String, String> params) {
|
|
|
+ String costId = params.get("formId");
|
|
|
+ BigDecimal qualitycosttotal = BigDecimal.ZERO;
|
|
|
+
|
|
|
+ //要创建的实例
|
|
|
+ List<QcsMainCostDo> qcsMainCostDoList = new ArrayList<>();
|
|
|
+ List<QcsMainDetailDo> qcsMainDetailDoList = new ArrayList<>();
|
|
|
+
|
|
|
+ QcsMainCostDo qcsMainCostDo = qcsMainCostService.getById(costId);
|
|
|
+ Map<String, Object> detailMap = qcsMainCostDao.getAmountSum(costId);
|
|
|
+ qcsMainCostDo.setCosttotal((BigDecimal) detailMap.get("AMOUNTSUM"));
|
|
|
+ if (qcsMainCostDo.getStatus().equals("已提交")) {
|
|
|
+ qualitycosttotal = qualitycosttotal.add(qcsMainCostDo.getCosttotal());
|
|
|
+ }
|
|
|
+
|
|
|
+ //科目配置
|
|
|
+ List<QcsSubjectConfigDo> qcsSubjectConfigDos = qcsMainCostDao.getSubjectConfig();
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
|
|
|
+ List<QcsMainCostDo> qcsMainCostDos = qcsMainCostDao.getMainCosts(qcsMainCostDo.getBaseid(), sdf.format(qcsMainCostDo.getYearmonth()));
|
|
|
+ //COSTTYPE 成本类型(预防成本1鉴定成本2内部损失3外部损失4)
|
|
|
+
|
|
|
+ //预防成本1
|
|
|
+ QcsMainCostDo qcsMainCostDo1 = qcsMainCostDos.stream().filter(m -> m.getCosttype().equals("1")).findAny().orElse(null);
|
|
|
+ if (qcsMainCostDo1 != null) {
|
|
|
+ if (!qcsMainCostDo1.getId().equals(costId) && qcsMainCostDo1.getStatus().equals("已提交")) {
|
|
|
+ qualitycosttotal = qualitycosttotal.add(qcsMainCostDo1.getCosttotal());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //创建同一单位相同年月的预防成本数据
|
|
|
+ String mainId1 = SecurityUtil.getUUID();
|
|
|
+ qcsMainCostDo1 = new QcsMainCostDo();
|
|
|
+ qcsMainCostDo1.setId(mainId1);
|
|
|
+ qcsMainCostDo1.setBaseid(qcsMainCostDo.getBaseid());
|
|
|
+ qcsMainCostDo1.setBasename(qcsMainCostDo.getBasename());
|
|
|
+ qcsMainCostDo1.setYearmonth(qcsMainCostDo.getYearmonth());
|
|
|
+ qcsMainCostDo1.setCosttype("1");
|
|
|
+
|
|
|
+ //明细数据
|
|
|
+ List<QcsSubjectConfigDo> qcsSubjectConfigDos1 = qcsSubjectConfigDos.stream().filter(s -> s.getSecsubject().equals("预防成本")).collect(Collectors.toList());
|
|
|
+ for (QcsSubjectConfigDo qcsSubjectConfigDo : qcsSubjectConfigDos1) {
|
|
|
+ QcsMainDetailDo qcsMainDetailDo = new QcsMainDetailDo();
|
|
|
+ qcsMainDetailDo.setId(SecurityUtil.getUUID());
|
|
|
+ qcsMainDetailDo.setMainid(mainId1);
|
|
|
+ qcsMainDetailDo.setThrsubject(qcsSubjectConfigDo.getThrsubject());
|
|
|
+ qcsMainDetailDo.setFousubject(qcsSubjectConfigDo.getFousubject());
|
|
|
+ qcsMainDetailDo.setSort(qcsSubjectConfigDo.getSort());
|
|
|
+ qcsMainDetailDoList.add(qcsMainDetailDo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //鉴定成本2
|
|
|
+ QcsMainCostDo qcsMainCostDo2 = qcsMainCostDos.stream().filter(m -> m.getCosttype().equals("2")).findAny().orElse(null);
|
|
|
+ if (qcsMainCostDo2 != null) {
|
|
|
+ if (!qcsMainCostDo2.getId().equals(costId) && qcsMainCostDo2.getStatus().equals("已提交")) {
|
|
|
+ qualitycosttotal = qualitycosttotal.add(qcsMainCostDo2.getCosttotal());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //创建同一单位相同年月的预防成本数据
|
|
|
+ String mainId2 = SecurityUtil.getUUID();
|
|
|
+ qcsMainCostDo2 = new QcsMainCostDo();
|
|
|
+ qcsMainCostDo2.setId(mainId2);
|
|
|
+ qcsMainCostDo2.setBaseid(qcsMainCostDo.getBaseid());
|
|
|
+ qcsMainCostDo2.setBasename(qcsMainCostDo.getBasename());
|
|
|
+ qcsMainCostDo2.setYearmonth(qcsMainCostDo.getYearmonth());
|
|
|
+ qcsMainCostDo2.setCosttype("2");
|
|
|
+
|
|
|
+ //明细数据
|
|
|
+ List<QcsSubjectConfigDo> qcsSubjectConfigDos2 = qcsSubjectConfigDos.stream().filter(s -> s.getSecsubject().equals("鉴定成本")).collect(Collectors.toList());
|
|
|
+ for (QcsSubjectConfigDo qcsSubjectConfigDo : qcsSubjectConfigDos2) {
|
|
|
+ QcsMainDetailDo qcsMainDetailDo = new QcsMainDetailDo();
|
|
|
+ qcsMainDetailDo.setId(SecurityUtil.getUUID());
|
|
|
+ qcsMainDetailDo.setMainid(mainId2);
|
|
|
+ qcsMainDetailDo.setThrsubject(qcsSubjectConfigDo.getThrsubject());
|
|
|
+ qcsMainDetailDo.setFousubject(qcsSubjectConfigDo.getFousubject());
|
|
|
+ qcsMainDetailDo.setSort(qcsSubjectConfigDo.getSort());
|
|
|
+ qcsMainDetailDoList.add(qcsMainDetailDo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //内部损失3
|
|
|
+ QcsMainCostDo qcsMainCostDo3 = qcsMainCostDos.stream().filter(m -> m.getCosttype().equals("3")).findAny().orElse(null);
|
|
|
+ if (qcsMainCostDo3 != null) {
|
|
|
+ if (!qcsMainCostDo3.getId().equals(costId) && qcsMainCostDo3.getStatus().equals("已提交")) {
|
|
|
+ qualitycosttotal = qualitycosttotal.add(qcsMainCostDo3.getCosttotal());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //创建同一单位相同年月的预防成本数据
|
|
|
+ String mainId1 = SecurityUtil.getUUID();
|
|
|
+ qcsMainCostDo3 = new QcsMainCostDo();
|
|
|
+ qcsMainCostDo3.setId(mainId1);
|
|
|
+ qcsMainCostDo3.setBaseid(qcsMainCostDo.getBaseid());
|
|
|
+ qcsMainCostDo3.setBasename(qcsMainCostDo.getBasename());
|
|
|
+ qcsMainCostDo3.setYearmonth(qcsMainCostDo.getYearmonth());
|
|
|
+ qcsMainCostDo3.setCosttype("3");
|
|
|
+ }
|
|
|
+
|
|
|
+ //外部损失4
|
|
|
+ QcsMainCostDo qcsMainCostDo4 = qcsMainCostDos.stream().filter(m -> m.getCosttype().equals("4")).findAny().orElse(null);
|
|
|
+ if (qcsMainCostDo4 != null) {
|
|
|
+ if (!qcsMainCostDo4.getId().equals(costId) && qcsMainCostDo4.getStatus().equals("已提交")) {
|
|
|
+ qualitycosttotal = qualitycosttotal.add(qcsMainCostDo4.getCosttotal());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //创建同一单位相同年月的预防成本数据
|
|
|
+ String mainId1 = SecurityUtil.getUUID();
|
|
|
+ qcsMainCostDo4 = new QcsMainCostDo();
|
|
|
+ qcsMainCostDo4.setId(mainId1);
|
|
|
+ qcsMainCostDo4.setBaseid(qcsMainCostDo.getBaseid());
|
|
|
+ qcsMainCostDo4.setBasename(qcsMainCostDo.getBasename());
|
|
|
+ qcsMainCostDo4.setYearmonth(qcsMainCostDo.getYearmonth());
|
|
|
+ qcsMainCostDo4.setCosttype("4");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (qualitycosttotal.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ qcsMainCostDo1.setQualitycosttotal(qualitycosttotal);
|
|
|
+ qcsMainCostDo2.setQualitycosttotal(qualitycosttotal);
|
|
|
+ qcsMainCostDo3.setQualitycosttotal(qualitycosttotal);
|
|
|
+ qcsMainCostDo4.setQualitycosttotal(qualitycosttotal);
|
|
|
+ }
|
|
|
+ qcsMainCostDoList.add(qcsMainCostDo1);
|
|
|
+ qcsMainCostDoList.add(qcsMainCostDo2);
|
|
|
+ qcsMainCostDoList.add(qcsMainCostDo3);
|
|
|
+ qcsMainCostDoList.add(qcsMainCostDo4);
|
|
|
+
|
|
|
+ boolean bool1 = qcsMainCostService.updateById(qcsMainCostDo);
|
|
|
+ boolean bool2 = qcsMainCostService.saveOrUpdateBatch(qcsMainCostDoList);
|
|
|
+ boolean bool3 = true;
|
|
|
+ if (qcsMainDetailDoList.size() > 0) {
|
|
|
+ bool3 = qcsMainDetailService.saveBatch(qcsMainDetailDoList);
|
|
|
+ }
|
|
|
+ if (bool1 && bool2 && bool3) {
|
|
|
+ return R.ok();
|
|
|
+ } else {
|
|
|
+ return R.error();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|