From db86411bb09d9a3450d14a91125adb26a53cc191 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期三, 21 八月 2024 17:50:54 +0800 Subject: [PATCH] 合同在线率 打分 --- ycl-server/src/main/java/com/ycl/platform/mapper/ContractRuleRecordMapper.java | 8 +- ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml | 6 +- ycl-server/src/main/java/com/ycl/task/ContractTask.java | 88 +++++++++++++++++++++++++++-- ycl-server/src/main/resources/mapper/zgyw/ContractRuleRecordMapper.xml | 7 ++ ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractRuleRecord.java | 3 ycl-server/src/main/java/com/ycl/platform/mapper/ContractScoreMapper.java | 2 ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java | 3 + ycl-server/src/main/java/com/ycl/plus/CustomMetaObjectHandler.java | 17 +++++ 8 files changed, 118 insertions(+), 16 deletions(-) diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractRuleRecord.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractRuleRecord.java index 96d83e9..c0451dc 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractRuleRecord.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractRuleRecord.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; +import java.math.BigDecimal; import java.util.Date; /** @@ -27,7 +28,7 @@ /** 鐐逛綅鍦ㄧ嚎鐜� */ @Excel(name = "鐐逛綅鍦ㄧ嚎鐜�") - private Integer siteOnline; + private BigDecimal siteOnline; /** 鍒涘缓鏃堕棿 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/ContractRuleRecordMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/ContractRuleRecordMapper.java index 27a2ae8..e1e8ca8 100644 --- a/ycl-server/src/main/java/com/ycl/platform/mapper/ContractRuleRecordMapper.java +++ b/ycl-server/src/main/java/com/ycl/platform/mapper/ContractRuleRecordMapper.java @@ -11,8 +11,11 @@ * @author ruoyi * @date 2024-08-21 */ -public interface ContractRuleRecordMapper -{ +public interface ContractRuleRecordMapper { + public void insertBatch(@Param("list") List<ContractRuleRecord> list); + + public List<ContractRuleRecord> selectMonth(@Param("startTime") String startTime, @Param("endTime") String endTime); + /** * 鏌ヨ鍚堝悓瑙勫垯璁板綍 * @@ -37,7 +40,6 @@ */ public int insertContractRuleRecord(ContractRuleRecord contractRuleRecord); - public void insertBatch(@Param("list") List<ContractRuleRecord> list); /** * 淇敼鍚堝悓瑙勫垯璁板綍 diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/ContractScoreMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/ContractScoreMapper.java index df7532b..be18ea7 100644 --- a/ycl-server/src/main/java/com/ycl/platform/mapper/ContractScoreMapper.java +++ b/ycl-server/src/main/java/com/ycl/platform/mapper/ContractScoreMapper.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ycl.platform.domain.entity.ContractScore; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -13,6 +14,7 @@ */ public interface ContractScoreMapper extends BaseMapper<ContractScore> { + /** * 鏌ヨ鍚堝悓鎵撳垎 * diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java index 33d47fe..9972655 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java @@ -16,6 +16,7 @@ import java.io.Serializable; import java.util.Arrays; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -62,12 +63,14 @@ contractScore.setAuditingStatus(AuditingStatus.WAIT); contractScore.setRuleIds(Arrays.stream(contractScore.getRuleIdsArray()).map(String::valueOf).collect(Collectors.joining(","))); contractScore.setRuleIdsArray(Arrays.stream(contractScore.getRuleIds().split(",")).map(Long::parseLong).toArray(Long[]::new)); + contractScore.setUpdateTime(new Date()); return super.save(contractScore); } @Override public boolean updateById(ContractScore contractScore) { contractScore.setRuleIds(Arrays.stream(contractScore.getRuleIdsArray()).map(String::valueOf).collect(Collectors.joining(","))); + contractScore.setUpdateTime(new Date()); return super.updateById(contractScore); } diff --git a/ycl-server/src/main/java/com/ycl/plus/CustomMetaObjectHandler.java b/ycl-server/src/main/java/com/ycl/plus/CustomMetaObjectHandler.java index 263aabc..fa341e8 100644 --- a/ycl-server/src/main/java/com/ycl/plus/CustomMetaObjectHandler.java +++ b/ycl-server/src/main/java/com/ycl/plus/CustomMetaObjectHandler.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.ycl.utils.SecurityUtils; +import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; @@ -14,6 +15,7 @@ * @date 2024/3/4 */ @Component +@Slf4j public class CustomMetaObjectHandler implements MetaObjectHandler { /** @@ -23,7 +25,13 @@ */ @Override public void insertFill(MetaObject metaObject) { - String username = SecurityUtils.getLoginUser().getUsername(); + + String username = null; + try { + username = SecurityUtils.getLoginUser().getUsername(); + } catch (Exception e) { + log.error(e.getMessage()); + } this.setFieldValByName("updateTime", new Date(), metaObject); this.setFieldValByName("createTime", new Date(), metaObject); this.setFieldValByName("createUser", username, metaObject); @@ -38,7 +46,12 @@ */ @Override public void updateFill(MetaObject metaObject) { - String username = SecurityUtils.getLoginUser().getUsername(); + String username = null; + try { + username = SecurityUtils.getLoginUser().getUsername(); + } catch (Exception e) { + log.error(e.getMessage()); + } this.setFieldValByName("updateTime", new Date(), metaObject); this.setFieldValByName("updateBy",username,metaObject); this.setFieldValByName("updateUser",username,metaObject); diff --git a/ycl-server/src/main/java/com/ycl/task/ContractTask.java b/ycl-server/src/main/java/com/ycl/task/ContractTask.java index a07570c..4fc6abd 100644 --- a/ycl-server/src/main/java/com/ycl/task/ContractTask.java +++ b/ycl-server/src/main/java/com/ycl/task/ContractTask.java @@ -3,20 +3,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.mongodb.client.result.DeleteResult; -import com.ycl.platform.domain.entity.ContractRuleRecord; -import com.ycl.platform.domain.entity.Report; -import com.ycl.platform.domain.entity.TMonitor; -import com.ycl.platform.domain.entity.YwPoint; +import com.ycl.platform.domain.entity.*; import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult; import com.ycl.platform.domain.result.UY.VideoOnlineResult; import com.ycl.platform.domain.vo.CalculateRuleVO; import com.ycl.platform.domain.vo.ContractVO; import com.ycl.platform.domain.vo.ReportVO; import com.ycl.platform.mapper.*; +import com.ycl.platform.service.IContractScoreService; import com.ycl.utils.DateUtils; import constant.ApiConstants; import constant.RedisConstant; import enumeration.ContractRule; +import enumeration.general.AuditingStatus; +import enumeration.general.RuleDeductCategoryEnum; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; @@ -52,10 +52,13 @@ private ReportMapper reportMapper; @Autowired private ContractRuleRecordMapper recordMapper; + @Autowired + private IContractScoreService contractScoreService; private static final Integer Online = 1; private static final Integer Offline = -1; private static final String AuditStatus_Pass = "1"; + private static final String Remark = "绯荤粺鐢熸垚"; /** * 鍚堝悓鑰冩牳 鍦ㄧ嚎鐜囨瘡鏃ヤ换鍔℃娴� @@ -66,9 +69,10 @@ * 鏈堝簳璁$畻骞冲潎鍊硷紝鏍规嵁鍦ㄧ嚎鐜囧拰鍚堝悓鏍囧噯鎵e噺鍒嗘暟 */ public void onlineCheck() { + log.info("寮�濮嬭绠楀悎鍚岀偣浣嶅湪绾跨巼"); List<CalculateRuleVO> ruleVos = contractMapper.selectByRuleName(ContractRule.CONTRACT_RULE_Online.getName(), null, new Date()); List<Integer> unitIds = ruleVos.stream().map(CalculateRuleVO::getUnitId).collect(Collectors.toList()); - List<YwPoint> ywPoints = ywPointMapper.selectList(new QueryWrapper<YwPoint>().in("unitId", unitIds)); + List<YwPoint> ywPoints = ywPointMapper.selectList(new QueryWrapper<YwPoint>().in("unit_id", unitIds)); //key鏄痷nitId value鏄澶囩紪鐮侀泦鍚� Map<Long, List<String>> unitMap = ywPoints.stream() .collect(Collectors.groupingBy( @@ -116,13 +120,85 @@ onlineSite++; } } + BigDecimal online = new BigDecimal(onlineSite).divide(new BigDecimal(totalSite), 2, RoundingMode.DOWN); ContractRuleRecord contractRuleRecord = new ContractRuleRecord(); - contractRuleRecord.setSiteOnline( onlineSite / totalSite); + contractRuleRecord.setSiteOnline(online); contractRuleRecord.setCreateTime(new Date()); contractRuleRecord.setUnitId(unitId); ruleRecordList.add(contractRuleRecord); }); //瀛樺偍缁撴灉 recordMapper.insertBatch(ruleRecordList); + log.info("缁撴潫璁$畻鍚堝悓鐐逛綅鍦ㄧ嚎鐜�"); } + + //鏈堝簳璁$畻鍦ㄧ嚎鐜囧垎鏁� + public void calculateOnlineScore() { + log.info("寮�濮嬭绠楀悎鍚岀偣浣嶅湪绾跨巼鍒嗘暟"); + //濡傛灉鏄湀搴曪紝闇�瑕佺粺璁″钩鍧囧湪绾跨巼鐒跺悗杩涜绉垎鎵i櫎 +// String now = DateUtils.getDate(); + String mouthStart = DateUtils.getMouthStart(new Date()); + String mouthEnd = DateUtils.getMouthEnd(new Date()); +// if (now.equals(mouthEnd)) { + //鏌ヤ竴涓湀鐨勮褰� + List<ContractRuleRecord> ruleMonthRecords = recordMapper.selectMonth(mouthStart, mouthEnd); + //閫氳繃unitId鍒嗗崟浣� + Map<Long, List<ContractRuleRecord>> unitMap = ruleMonthRecords.stream().collect(Collectors.groupingBy(ContractRuleRecord::getUnitId)); + //鏌ュ湪绾跨巼瑙勫垯 + List<CalculateRuleVO> ruleVos = contractMapper.selectByRuleName(ContractRule.CONTRACT_RULE_Online.getName(), null, new Date()); + //鑾峰彇key涓哄悎鍚宨d锛寁alue涓哄湪绾跨巼瑙勫垯鐨刴ap + Map<Integer, List<CalculateRuleVO>> contractMap = ruleVos.stream().collect(Collectors.groupingBy(CalculateRuleVO::getContractId)); + //鍑嗗鎵归噺鎵撳垎鐨勯泦鍚� + List<ContractScore> contractScoreList = new ArrayList<>(); + contractMap.forEach((contractId, ruleList) -> { + //涓�涓悎鍚屽搴斾竴涓崟浣嶏紝鍥犳unitId閮界浉鍚� + CalculateRuleVO calculateRuleVO = ruleList.get(0); + Integer unitId = calculateRuleVO.getUnitId(); + List<ContractRuleRecord> ruleRecordList = unitMap.get(Long.parseLong(unitId + "")); + if (!CollectionUtils.isEmpty(ruleMonthRecords)) { + BigDecimal siteOnlineTotal = ruleRecordList.stream().map(ContractRuleRecord::getSiteOnline).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal siteOnline = siteOnlineTotal.divide(new BigDecimal(ruleRecordList.size()), 2, RoundingMode.DOWN); + for (CalculateRuleVO ruleVO : ruleList) { + Double max = ruleVO.getMax(); + Double min = ruleVO.getMin(); + //鍒ゆ柇鑼冨洿鍦ㄥ摢涓尯闂� + if (checkRange(min, max, siteOnline.multiply(new BigDecimal(100)))) { + //闇�瑕佹墸闄ょ殑鍒嗘暟 + Double deductScore = ruleVO.getCalcFraction(); + ContractScore contractScore = new ContractScore(); + contractScore.setContractId(Long.parseLong(contractId + "")); + contractScore.setAuditingStatus(AuditingStatus.WAIT); + contractScore.setUnitId(Long.parseLong(unitId + "")); + contractScore.setRuleId(Long.parseLong(ruleVO.getId() + "")); + contractScore.setRuleIds("0," + ruleVO.getId()); + contractScore.setNum(siteOnline + ""); + contractScore.setDeductCategory(ruleVO.getDeductCategory().getDesc()); + contractScore.setScore(new BigDecimal(deductScore)); + contractScore.setRuleName(ruleVO.getRuleName() + "/" + ruleVO.getRuleCondition()); + contractScore.setCreateTime(new Date()); + contractScore.setUpdateTime(new Date()); + contractScore.setRemark(Remark); + contractScoreList.add(contractScore); + } + } + } + }); +// } + contractScoreService.saveBatch(contractScoreList); + log.info("缁撴潫璁$畻鍚堝悓鐐逛綅鍦ㄧ嚎鐜囧垎鏁�"); + } + + private boolean checkRange(Double min, Double max, BigDecimal siteOnline) { + if (siteOnline == null) { + return false; + } + if (max != null && siteOnline.compareTo(new BigDecimal(max)) > 0) { + return false; + } + if (min != null && siteOnline.compareTo(new BigDecimal(min)) < 0) { + return false; + } + return true; + } + } diff --git a/ycl-server/src/main/resources/mapper/zgyw/ContractRuleRecordMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/ContractRuleRecordMapper.xml index 5ba17a2..ee4c49d 100644 --- a/ycl-server/src/main/resources/mapper/zgyw/ContractRuleRecordMapper.xml +++ b/ycl-server/src/main/resources/mapper/zgyw/ContractRuleRecordMapper.xml @@ -17,6 +17,11 @@ from t_contract_rule_record </sql> + <select id="selectMonth" resultMap="ContractRuleRecordResult"> + select id, unit_id, site_online, create_time, deleted + from t_contract_rule_record + where DATE(create_time) between #{startTime} and #{endTime} + </select> <select id="selectContractRuleRecordList" resultMap="ContractRuleRecordResult"> <include refid="selectContractRuleRecordVo"/> <where> @@ -48,7 +53,7 @@ </insert> <insert id="insertBatch"> - inner into t_contract_rule_record (unit_id,site_online,create_time) + insert into t_contract_rule_record (unit_id,site_online,create_time) values <foreach collection="list" item="item" separator=","> (#{item.unitId},#{item.siteOnline},#{item.createTime}) diff --git a/ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml index 7c796e6..b2ff105 100644 --- a/ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml +++ b/ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml @@ -41,12 +41,12 @@ from t_contract tc left join t_calculate_rule tcr on tc.id = tcr.contract_id <where> - tc.deleted =0 and #{time} between tc.start_time and tc.end_time + tc.deleted =0 and #{date} between tc.start_time and tc.end_time <if test="ruleName !=null and ruleName!=''"> - tcr.rule_name = #{ruleName} + and tcr.rule_name = #{ruleName} </if> <if test="ruleCondition !=null and ruleCondition!=''"> - tcr.rule_condition = #{ruleCondition} + and tcr.rule_condition = #{ruleCondition} </if> </where> -- Gitblit v1.8.0