|
@@ -4,11 +4,22 @@
|
|
|
package com.jeeplus.modules.sg.balancedlibrary.onPassageMaterials.service;
|
|
|
|
|
|
import com.jeeplus.core.service.CrudService;
|
|
|
+import com.jeeplus.modules.sg.balancedlibrary.onPassageMaterials.entity.MaterialInformation;
|
|
|
import com.jeeplus.modules.sg.balancedlibrary.onPassageMaterials.entity.OnPassageMaterials;
|
|
|
import com.jeeplus.modules.sg.balancedlibrary.onPassageMaterials.mapper.OnPassageMaterialsMapper;
|
|
|
+import com.jeeplus.modules.sg.balancedlibrary.reportPerson.entity.ReportPerson;
|
|
|
+import com.jeeplus.modules.sg.balancedlibrary.reportPerson.mapper.ReportPersonMapper;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.concurrent.atomic.AtomicReference;
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 在途物资Service
|
|
@@ -19,5 +30,168 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
@Transactional(readOnly = true)
|
|
|
public class OnPassageMaterialsService extends CrudService<OnPassageMaterialsMapper, OnPassageMaterials> {
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ReportPersonMapper reportPersonMapper;
|
|
|
+
|
|
|
+ public void comparativeData(List<OnPassageMaterials> onPassageMaterialsList, List<MaterialInformation> materialInformationList){
|
|
|
+ List<String> goHeavy = new ArrayList<>();
|
|
|
+ //物料编码 计划编制人相同
|
|
|
+ List<OnPassageMaterials> sameList = new ArrayList<>();
|
|
|
+ //计划编制人为空
|
|
|
+ List<OnPassageMaterials> isEmptyList = new ArrayList<>();
|
|
|
+ //统计物料编码 部门
|
|
|
+ Map<String, String> materialCountMap = new HashMap<>();
|
|
|
+ //统计物料编码 计划编制人相同合同数量
|
|
|
+ Map<String, BigDecimal> sameMap = new HashMap<>();
|
|
|
+ //统计计划编制人为空合同数量
|
|
|
+ Map<String, BigDecimal> isEmptyMap = new HashMap<>();
|
|
|
+ //在途物资表J列
|
|
|
+ Map<String, BigDecimal> JMap = new HashMap<>();
|
|
|
+ //项目物资需求表H列
|
|
|
+ Map<String, BigDecimal> HMap = new HashMap<>();
|
|
|
+
|
|
|
+ //从数据库中索取所有部门及提报人
|
|
|
+ Map<String, List<ReportPerson>> reportPersonMap = getReportPerson();
|
|
|
+ /**************************************************************************/
|
|
|
+ //循环比较找出 计划编制人为空添加isEmptyMap 根据计划编制人找出所在部门 物料编码-部门为去重条件
|
|
|
+ onPassageMaterialsList.forEach(opm -> {
|
|
|
+ String key = "";
|
|
|
+ if (!opm.getPlanner().isEmpty()) {
|
|
|
+ //计划编制人不为空存放
|
|
|
+ String temp = opm.getMaterialCode() + "-" + opm.getPlanner();
|
|
|
+ //去重 物料编码-计划编制人
|
|
|
+ if(!goHeavy.contains(temp)){
|
|
|
+ goHeavy.add(temp);
|
|
|
+ sameList.add(opm);
|
|
|
+ }
|
|
|
+ String reportPersonOfDepartment = getReportPersonOfDepartment(reportPersonMap, opm.getPlanner());
|
|
|
+ if (reportPersonOfDepartment!=null) {
|
|
|
+ key = opm.getMaterialCode() + "-" + reportPersonOfDepartment;
|
|
|
+ } else {
|
|
|
+ key = opm.getMaterialCode()/* + "-"*/;
|
|
|
+ }
|
|
|
+
|
|
|
+ dataCount(sameMap, sameList, key);
|
|
|
+ } else {
|
|
|
+ //提报人为空
|
|
|
+ /*key = opm.getMaterialCode();
|
|
|
+ isEmptyList.add(opm);
|
|
|
+ dataCount(isEmptyMap, isEmptyList, key);*/
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ materialInformationList.forEach(m -> {
|
|
|
+ String key = "";
|
|
|
+ if(!m.getReportingDepartment().isEmpty()){
|
|
|
+ key = m.getMaterialCode() + "-" + m.getReportingDepartment();
|
|
|
+ }else{
|
|
|
+ key = m.getMaterialCode();
|
|
|
+ }
|
|
|
+ //如果有相同的去重不加
|
|
|
+ if (materialCountMap.containsKey(key)) {
|
|
|
+ /*BigDecimal temp = new BigDecimal(String.valueOf(materialCountMap.get(key)));
|
|
|
+ temp = new BigDecimal(m.getTotal()).add(temp);
|
|
|
+ materialCountMap.put(key, temp);*/
|
|
|
+ } else {
|
|
|
+ materialCountMap.put(key, m.getTotal());
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ materialCountMap.forEach((k, v) -> {
|
|
|
+ String[] split = k.split("-");
|
|
|
+ //如果有该部门则增加
|
|
|
+ if(split.length==2){
|
|
|
+ if (HMap.containsKey(split[1])) {
|
|
|
+ BigDecimal temp = new BigDecimal(v).add(HMap.get(split[1]));
|
|
|
+ HMap.put(split[1], temp);
|
|
|
+ } else {
|
|
|
+ HMap.put(split[1], new BigDecimal(v));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+
|
|
|
+ sameMap.forEach((k, v) -> {
|
|
|
+ String[] split = k.split("-");
|
|
|
+ //如果有该部门则增加
|
|
|
+ if(split.length==2){
|
|
|
+ if (JMap.containsKey(split[1])) {
|
|
|
+ BigDecimal temp = v.add(JMap.get(split[1]));
|
|
|
+ JMap.put(split[1], temp);
|
|
|
+ } else {
|
|
|
+ JMap.put(split[1], v);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /******************两表比较*******************/
|
|
|
+
|
|
|
+ HMap.forEach((k, v) -> {
|
|
|
+ if (JMap.containsKey(k)) {
|
|
|
+ if (JMap.get(k).compareTo(v) >= 0) {
|
|
|
+ materialInformationList.forEach(m -> {
|
|
|
+ if (m.getReportingDepartment().equals(k)) {
|
|
|
+ m.setRemarkText("在途已有" + JMap.get(k) + "单位,请核实本次需求");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ private void dataCount(Map<String, BigDecimal> map, List<OnPassageMaterials> list, String key) {
|
|
|
+ list.forEach(l -> {
|
|
|
+ //如果有相同就不加去重
|
|
|
+ if (map.containsKey(key)) {
|
|
|
+ BigDecimal temp = new BigDecimal(String.valueOf(map.get(key)));
|
|
|
+ temp = new BigDecimal(l.getContractCount()).add(temp);
|
|
|
+ map.put(key, temp);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ map.put(key, new BigDecimal(l.getContractCount()));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询数据库获取对应的部门及部门下的人
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private Map<String,List<ReportPerson>> getReportPerson(){
|
|
|
+ Map<String,List<ReportPerson>> map = new HashMap<>();
|
|
|
+ /*List<String> department = reportPersonMapper.findDepartment();
|
|
|
+ department.forEach(l->{
|
|
|
+ map.put(l,reportPersonMapper.findDepartmentOfPerson(l));
|
|
|
+ });*/
|
|
|
+ List<ReportPerson> departmentGroupByPerson = reportPersonMapper.findDepartmentGroupByPerson();
|
|
|
+ departmentGroupByPerson.forEach(l->{
|
|
|
+ if(map.containsKey(l.getReportDepartment())){
|
|
|
+ map.get(l.getReportDepartment()).add(l);
|
|
|
+ }else{
|
|
|
+ List<ReportPerson> reportPeople = new ArrayList<>();
|
|
|
+ reportPeople.add(l);
|
|
|
+ map.put(l.getReportDepartment(),reportPeople);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取提报人部门
|
|
|
+ */
|
|
|
+ private String getReportPersonOfDepartment(Map<String, List<ReportPerson>> reportPerson,String name){
|
|
|
+ AtomicReference<String> departmentName = new AtomicReference<>();
|
|
|
+ reportPerson.forEach((k,v)->{
|
|
|
+ v.forEach(l->{
|
|
|
+ if(l.getReportPerson().equals(name)){
|
|
|
+ departmentName.set(k);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ return departmentName.get();
|
|
|
+ }
|
|
|
|
|
|
}
|