Browse Source

订单最大公出值开发

anderx 1 year ago
parent
commit
b6d11dd609

+ 8 - 10
src/main/java/com/goafanti/order/service/impl/OrderNewServiceImpl.java

@@ -766,7 +766,7 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 			}else {
 				orderYearMaxDuration.setMaxDuration(maxDuration);
 				orderYearMaxDuration.setStatus(0);
-				out.setMaxDuration(BigDecimal.ZERO.doubleValue());
+				out.setMaxDuration(maxDuration.doubleValue());
 				out.setMaxType(1);
 			}
 			orderYearMaxDuration.setOrderNo(orderNew.getOrderNo());
@@ -779,15 +779,13 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 				}
 			}
 			List<String> strings = JSON.parseArray(serviceLife, String.class);
-			List<Integer> collect = null;
+			List<Integer> collect;
 			if (strings != null) {
 				collect = strings.stream().map(this::extractYear).collect(Collectors.toList());
 				int size = collect.size();
 				BigDecimal divide = orderNew.getTotalAmount().divide(new BigDecimal(size), RoundingMode.HALF_EVEN);
 				maxDuration = pushMaxDuration(divide);
-				List<OrderYearMaxDuration> maxLists = new ArrayList<>();
-				int i = 1;
-				for (Integer year : collect) {
+                for (Integer year : collect) {
 					OrderYearMaxDuration orderYearMaxDuration = new OrderYearMaxDuration();
 					orderYearMaxDuration.setYear(year);
 					//需修改成判定
@@ -805,12 +803,11 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 					}else {
 						orderYearMaxDuration.setMaxDuration(maxDuration);
 						orderYearMaxDuration.setStatus(0);
-						out.setMaxDuration(BigDecimal.ZERO.doubleValue());
+						out.setMaxDuration(maxDuration.doubleValue());
 						out.setMaxType(1);
 					}
 					orderYearMaxDuration.setOrderNo(orderNew.getOrderNo());
-					i++;
-					int x = orderYearMaxDurationMapper.queryAllByCount(new OrderYearMaxDuration(orderNew.getOrderNo(), year));
+                    int x = orderYearMaxDurationMapper.queryAllByCount(new OrderYearMaxDuration(orderNew.getOrderNo(), year));
 					if (x>0){
 						orderYearMaxDurationMapper.updateByOrderNoAndYear(orderYearMaxDuration);
 					}else {
@@ -838,7 +835,7 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 				}else {
 					orderYearMaxDuration.setMaxDuration(maxDuration);
 					orderYearMaxDuration.setStatus(0);
-					out.setMaxDuration(BigDecimal.ZERO.doubleValue());
+					out.setMaxDuration(maxDuration.doubleValue());
 					out.setMaxType(1);
 				}
 				int x = orderYearMaxDurationMapper.queryAllByCount(new OrderYearMaxDuration(orderNew.getOrderNo(), 0));
@@ -2600,7 +2597,8 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 	public void pushOrderMaxDuration() {
 		List<TOrderNew> tOrderNews = tOrderNewMapper.selectgetAll();
 		for (TOrderNew e : tOrderNews) {
-			pushOrderPublicReleaseCount(e);
+//		TOrderNew e = tOrderNewMapper.selectByPrimaryKey("759707486285873152");
+		pushOrderPublicReleaseCount(e);
 		}
 	}
 

+ 75 - 51
src/main/java/com/goafanti/weChat/service/impl/PublicReleaseServiceImpl.java

@@ -2512,25 +2512,23 @@ public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper
 	 * @return
 	 */
 	public Map checkOrderNoDuration( InputPublicRelease in,AdminListBo a,int type) {
-		CheckOrderNoOut data= new CheckOrderNoOut();
+		List<PublicRelease> list = publicReleaseMapper.selectByOrderNo(in.getOrderNo());
 		TOrderNewBo t = tOrderNewMapper.getOrderNewDetail(in.getOrderNo());
-		Map map=new HashMap();
+		OutPublicRelease outPublicRelease=null;
+		//实际公出
 		BigDecimal actualDuration = BigDecimal.ZERO;
-		if (type==1||type==2){
-			List<PublicRelease> list = publicReleaseMapper.selectByOrderNo(in.getOrderNo());
-			OutPublicRelease outPublicRelease=null;
-			//公出次数
-			int frequency=0;
-			List<String> peopleList = new ArrayList<>();
-			//判定是不是新增获取原数据,是新增数量加1
-			if (in.getId()!=null){
-				outPublicRelease= publicReleaseMapper.selectDtails(in.getId());
-			}else {
-				peopleList.add(TokenManager.getAdminId());
-				actualDuration=actualDuration.add(BigDecimal.valueOf(in.getDuration()));
-				frequency++;
-			}
-			for (PublicRelease e : list) {
+		//公出次数
+		int frequency=0;
+		List<String> peopleList = new ArrayList<>();
+		//判定是不是新增获取原数据,是新增数量加1
+		if (in.getId()!=null){
+			outPublicRelease= publicReleaseMapper.selectDtails(in.getId());
+		}else {
+			peopleList.add(TokenManager.getAdminId());
+			actualDuration=actualDuration.add(BigDecimal.valueOf(in.getDuration()));
+			frequency++;
+		}
+		for (PublicRelease e : list) {
 				//新增直接计算
 				if (in.getId()==null){
 					if (e.getDuration()!=null){
@@ -2560,60 +2558,86 @@ public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper
 						}
 					}
 				}
-			}
-			if (outPublicRelease!=null){
-				data.setPublicReleaseName(outPublicRelease.getAname());
-			}
-			//新增与修改,需要重新获取实际公出与人数与次数
+		}
+		Map map=new HashMap();
+		CheckOrderNoOut data= new CheckOrderNoOut();
+		if (outPublicRelease!=null){
+			data.setPublicReleaseName(outPublicRelease.getAname());
+		}
+		//新增与修改,需要重新获取实际公出与人数与次数
+		if (type==1||type==2){
 			TOrderPublicReleaseCount update=new TOrderPublicReleaseCount();
 			update.setOrderNo(in.getOrderNo());
 			update.setFrequency(frequency);
 			update.setActualDuration(actualDuration.doubleValue());
 			update.setPeopleCount(peopleList.size());
 			tOrderPublicReleaseCountMapper.updateByOrderNo(update);
-			data.setTimesCount(frequency);
-			data.setPeopleCount(peopleList.size());
-			data.setDurationCount(actualDuration);
 		}
+		data.setTimesCount(frequency);
+		data.setPeopleCount(peopleList.size());
 		data.setUserName(t.getUserName());
 		data.setContractNo(t.getContractNo());
 		data.setAdminName(t.getSalesmanName());
+		data.setDurationCount(actualDuration);
 		TOrderPublicReleaseCount releaseCount = tOrderPublicReleaseCountMapper.selectByOrderNo(in.getOrderNo());
 		data.setDurationMax(BigDecimal.valueOf(releaseCount.getMaxDuration()));
 		TOrderNew tOrderNew = tOrderNewMapper.selectByPrimaryKey(in.getOrderNo());
+		List<TTaskMember> tTaskMembers = tTaskMemberMapper.selectByOrderNo(tOrderNew.getOrderNo());
 		String amountName=null;
 		String amountType=null;
-		if (tOrderNew.getTotalAmount().compareTo(BigDecimal.valueOf(1))<0){
-			amountName="本合同低于1万";
-			amountType="原则上技术人员不可下户";
-		}else if (tOrderNew.getTotalAmount().compareTo(BigDecimal.valueOf(3))<0){
-			amountName="本合同在1~3万";
-			amountType="已超出合同可公出标准"+data.getDurationMax()+"小时";
-		}else if (tOrderNew.getTotalAmount().compareTo(BigDecimal.valueOf(5))<0){
-			amountName="本合同在3~5万";
-			amountType="已超出合同可公出标准"+data.getDurationMax()+"小时";
-		}else if (tOrderNew.getTotalAmount().compareTo(BigDecimal.valueOf(10))<0){
-			amountName="本合同在5~10万";
-			amountType="已超出合同可公出标准"+data.getDurationMax()+"小时";
+		if (tTaskMembers.size()<1){
+			if (tOrderNew.getTotalAmount().compareTo(BigDecimal.valueOf(1))<0){
+				amountName="本合同低于1万";
+				amountType="原则上技术人员不可下户";
+			}else if (tOrderNew.getTotalAmount().compareTo(BigDecimal.valueOf(3))<0){
+				amountName="本合同在1~3万";
+				amountType="已超出合同可公出标准"+data.getDurationMax()+"小时";
+			}else if (tOrderNew.getTotalAmount().compareTo(BigDecimal.valueOf(5))<0){
+				amountName="本合同在3~5万";
+				amountType="已超出合同可公出标准"+data.getDurationMax()+"小时";
+			}else if (tOrderNew.getTotalAmount().compareTo(BigDecimal.valueOf(10))<0){
+				amountName="本合同在5~10万";
+				amountType="已超出合同可公出标准"+data.getDurationMax()+"小时";
+			}
+		}else {
+			int yearSum=1;
+			for (TTaskMember tTaskMember : tTaskMembers) {
+				if (tTaskMember.getYearSum()!=null&&tTaskMember.getYearSum()>yearSum){
+					yearSum=tTaskMember.getYearSum();
+				}
+			}
+			BigDecimal divide =BigDecimal.ZERO;
+			if (tOrderNew.getTotalAmount().compareTo(BigDecimal.valueOf(0))>0&&yearSum>0){
+				divide=tOrderNew.getTotalAmount().divide(BigDecimal.valueOf(yearSum),  BigDecimal.ROUND_HALF_UP);
+			}else {
+				divide=tOrderNew.getTotalAmount();
+			}
+			if (divide.compareTo(BigDecimal.valueOf(1))<0){
+				amountName="此会员订单,本年度金额低于1万";
+				amountType="原则上技术人员不可下户";
+			}else if (divide.compareTo(BigDecimal.valueOf(3))<0){
+				amountName="此会员订单,本年度金额1~3万";
+				amountType="已超出合同可公出标准"+data.getDurationMax()+"小时";
+			}else if (divide.compareTo(BigDecimal.valueOf(5))<0){
+				amountName="此会员订单,本年度金额3~5万";
+				amountType="已超出合同可公出标准"+data.getDurationMax()+"小时";
+			}else if (divide.compareTo(BigDecimal.valueOf(10))<0){
+				amountName="此会员订单,本年度金额5~10万";
+				amountType="已超出合同可公出标准"+data.getDurationMax()+"小时";
+			}
 		}
 		data.setAmountName(amountName);
 		data.setAmountType(amountType);
-		//未设置公出
-		if(releaseCount.getMaxType()==2||releaseCount.getMaxType()==0){
-			map.put("code",releaseCount.getMaxType());
-			map.put("flag",false);
+		map.put("releaseCount",releaseCount);
+		//如果小于或者等于并且是未发起或者审核完成状态
+		if (actualDuration.compareTo(data.getDurationMax())<1&&
+				(releaseCount.getMaxProcess()==0||releaseCount.getMaxProcess()==4)
+		){
+			map.put("code",true);
 			map.put("data",null);
 		}else {
-			//需要限制判定小时
-			if (actualDuration.compareTo(data.getDurationMax())<1){
-				map.put("code",releaseCount.getMaxType());
-				map.put("flag",true);
-				map.put("data",null);
-			}else {
-				map.put("code",releaseCount.getMaxType());
-				map.put("flag",false);
-				map.put("data",data);
-			}
+			map.put("code",false);
+			map.put("data",data);
 		}
 		return map;
 	}