Commit 5a473f67 authored by Lambertliu's avatar Lambertliu

Merge branch 'develop_tzs_register' of…

Merge branch 'develop_tzs_register' of http://36.40.66.175:5000/moa/amos-boot-biz into develop_tzs_register
parents 584e1f56 1807b075
package com.yeejoin.amos.boot.module.cylinder.api.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.typroject.tyboot.core.rdbms.model.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
/**
* 气瓶充装统计表-企业-以天为维度
*
* @author system_generator
* @date 2024-06-05
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="CylinderFillingRecordStatisticsUnitDayModel", description="气瓶充装统计表-企业-以天为维度")
public class CylinderFillingRecordStatisticsUnitDayDto extends BaseModel {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "充装次数")
private Integer totalSum;
@ApiModelProperty(value = "充装前检查数量")
private Integer fillingBeforeSum;
@ApiModelProperty(value = "充装后检查数量")
private Integer fillingAfterSum;
@ApiModelProperty(value = "企业编码")
private String appId;
@ApiModelProperty(value = "区域编码")
private String regionCode;
@ApiModelProperty(value = "充装日期")
private Date fillingDate;
@ApiModelProperty(value = "充装检查不合格数")
private int fillingNotPassedCount;
@ApiModelProperty(value = "累计充装量")
private BigDecimal fillingQuantity;
}
package com.yeejoin.amos.boot.module.cylinder.api.dto;
import lombok.Data;
/**
* @author Administrator
*/
@Data
public class KeyValueDto {
private String strKey;
private Integer iValue;
private String strValue;
}
package com.yeejoin.amos.boot.module.cylinder.api.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.Date;
/**
* 气瓶充装统计表-企业-以天为维度
*
* @author system_generator
* @date 2024-06-05
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("tz_cylinder_filling_record_statistics_unit_day")
public class CylinderFillingRecordStatisticsUnitDay extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 充装次数
*/
@TableField("total_sum")
private Integer totalSum;
/**
* 充装前检查数量
*/
@TableField("filling_before_sum")
private Integer fillingBeforeSum;
/**
* 充装后检查数量
*/
@TableField("filling_after_sum")
private Integer fillingAfterSum;
/**
* 企业编码
*/
@TableField("app_id")
private String appId;
/**
* 区域编码
*/
@TableField("region_code")
private String regionCode;
/**
* 充装日期
*/
@TableField("filling_date")
private Date fillingDate;
/**
* 充装检查不合格数
*/
@TableField("filling_not_passed_count")
private int fillingNotPassedCount;
/**
* 累计充装量
*/
@TableField("filling_quantity")
private BigDecimal fillingQuantity;
}
package com.yeejoin.amos.boot.module.cylinder.api.mapper;
import com.yeejoin.amos.boot.module.cylinder.api.entity.CylinderFillingRecordStatisticsUnitDay;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* 气瓶充装统计表-企业-以天为维度 Mapper 接口
*
* @author system_generator
* @date 2024-06-05
*/
public interface CylinderFillingRecordStatisticsUnitDayMapper extends BaseMapper<CylinderFillingRecordStatisticsUnitDay> {
}
package com.yeejoin.amos.boot.module.cylinder.api.service;
/**
* 气瓶充装统计表-企业-以天为维度接口类
*
* @author system_generator
* @date 2024-06-05
*/
public interface ICylinderFillingRecordStatisticsUnitDayService {}
......@@ -21,9 +21,12 @@ public class CylinderTagsDataUnitDto extends BaseDto {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "气瓶标签比")
@ApiModelProperty(value = "气瓶标签比(气瓶数量/标签数量)")
private String tagPercent;
@ApiModelProperty(value = "标签气瓶比(标签数量/气瓶数量,当一个气瓶含有电子标签,二维码标签等多个标签时,标签/气瓶最大比为100%)")
private String cylinderPercent;
@ApiModelProperty(value = "气瓶数量")
private Long cylinderSum;
......
......@@ -23,12 +23,18 @@ public class CylinderTagsDataUnit extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 气瓶标签比
* 气瓶标签比(气瓶数量/标签数量)
*/
@TableField("tag_percent")
private String tagPercent;
/**
* 标签气瓶比(标签数量/气瓶数量,当一个气瓶含有电子标签,二维码标签等多个标签时,标签/气瓶最大比为100%)
*/
@TableField("cylinder_percent")
private String cylinderPercent;
/**
* 气瓶数量
*/
@TableField("cylinder_sum")
......
package com.yeejoin.amos.boot.module.cylinder.flc.api.mapper;
import com.yeejoin.amos.boot.module.cylinder.flc.api.entity.CylinderAreaData;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.cylinder.api.dto.KeyValueDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.entity.CylinderAreaData;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
......@@ -14,9 +16,26 @@ import java.util.Map;
*/
public interface CylinderAreaDataMapper extends BaseMapper<CylinderAreaData> {
Map<String, Object> getLicenseEfficiency(@Param(value = "regionCode")String regionCode, @Param(value = "appId")String appId);
Map<String, Object> getInspectionExpiredRate(@Param(value = "regionCode")String regionCode, @Param(value = "appId")String appId);
Map<String, Object> getInspectionExpiredRate(@Param(value = "regionCode") String regionCode, @Param(value = "appId") String appId);
Map<String, Object> getInspectionResultRate(@Param(value = "regionCode") String regionCode, @Param(value = "appId") String appId);
/**
* 查询单个单位的有效期信息
*
* @param appId 公司唯一标识
* @return KeyValueDto
*/
KeyValueDto queryLicenseEfficiencyOneCompany(@Param(value = "appId") String appId);
/**
* 单位按照资质状态分组下的统计数量
*
* @param regionCode 区域
* @return List<KeyValueDto>
*/
List<KeyValueDto> queryLicenseEfficiencyOfRegion(@Param(value = "regionCode") String regionCode);
Map<String, Object> getInspectionResultRate(@Param(value = "regionCode")String regionCode, @Param(value = "appId")String appId);
}
......@@ -19,6 +19,8 @@ public interface CylinderFillingCheckMapper extends BaseMapper<CylinderFillingCh
Integer getFillingCountByMonth(@Param("appId") String appId, @Param("time") Date time);
Integer getFillingCountByDay(@Param("appId") String appId, @Param("time") Date time);
Integer getFillingPassedCountByMonth(@Param("appId") String appId, @Param("time") Date time);
void saveOrUpdateByCondition(List<CylinderFillingCheck> fillingChecks);
......
......@@ -18,5 +18,7 @@ public interface CylinderFillingMapper extends BaseMapper<CylinderFilling> {
Integer getFillingCountByMonth(@Param("appId") String appId, @Param("time") Date time);
Integer getFillingCountByDay(@Param("appId") String appId, @Param("time") Date time);
Integer getFillingPassedCountByMonth(@Param("appId") String appId, @Param("time") Date time);
}
......@@ -53,6 +53,10 @@ public interface CylinderFillingRecordMapper extends BaseMapper<CylinderFillingR
Integer getFillingCountByMonth(@Param("appId") String appId, @Param("time") Date time);
Integer getFillingCountByDay(@Param("appId") String appId, @Param("time") Date time);
Integer getFillingUnqualifiedCountByDay(@Param("appId") String appId, @Param("time") Date time);
Double getFillingSumByDate(@Param("appId") String appId, @Param("time") Date time);
List<ESCylinderFillingRecordDto> getCylinderFillingRecordInfo(@Param("appIds") List<String> appIds,@Param("sequenceCodeS") List<String> sequenceCodeS);
......
......@@ -112,9 +112,6 @@ public interface CylinderInfoMapper extends BaseMapper<CylinderInfo> {
int countNumber(@Param("status") String status, @Param("companyId") String companyId, @Param("regionCode") String regionCode);
Map<String, Object> countFillingTimesAndQuantityByCompany(@Param("companyId") String companyId, @Param("startTime") String startTime, @Param("endTime") String endTime);
List<CylinderInfoDto> queryCylinderOfInspectionOverdue(@Param("questionType") String questionType);
List<CylinderInfoDto> queryCylinderOfUnqualifiedQuestion(@Param("questionType") String questionType);
......
......@@ -44,8 +44,10 @@ public interface ICylinderInfoService {
void synUnitFillingCheckDataJob();
void fillingCheckDataSynHandler();
void synFillingUnloadUnitData();
void fillingRecordDataSynHandler();
void synFillingUnloadUnitData();
Page<CylinderInfoDto> getCyinderInfoList(Page<CylinderInfoDto> page);
......
......@@ -2,35 +2,53 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeejoin.amos.boot.module.cylinder.flc.api.mapper.CylinderAreaDataMapper">
<select id="getLicenseEfficiency" resultType="java.util.Map">
<select id="queryLicenseEfficiencyOneCompany" resultType="com.yeejoin.amos.boot.module.cylinder.api.dto.KeyValueDto">
SELECT
CASE WHEN COUNT ( CASE WHEN ul.expiry_date >= now( ) THEN 1 END ) = 1 THEN '正常' ELSE '已超期' END AS licenseOk,
CASE WHEN COUNT(*) = 0 THEN 0 ELSE ROUND( ( COUNT ( CASE WHEN ul.expiry_date >= now( ) THEN 1 END ) * 100.0 / COUNT ( * ) ), 2 ) END AS licenseRate
cu.sequence_nbr as strKey,
(select
case
when min(ul.expiry_date) >= now()
THEN '正常'
when min(ul.expiry_date) is null then '--'
ELSE '已超期'
END AS licenseOk from tz_base_unit_licence ul where cu.credit_code = ul.unit_code) as strValue
FROM
tz_cylinder_unit cu
LEFT JOIN tz_base_unit_licence ul ON cu.credit_code = ul.unit_code
<where>
<if test="regionCode != null and regionCode != ''">
cu.region_code like concat('%', #{regionCode}, '%')
</if>
<if test="appId != null and appId != ''">
cu.app_id = #{appId}
</if>
</where>
where
cu.unit_status = '1210'
and cu.app_id = #{appId}
</select>
<select id="queryLicenseEfficiencyOfRegion" resultType="com.yeejoin.amos.boot.module.cylinder.api.dto.KeyValueDto">
SELECT
count(1) as iValue,
(select
case
when min(ul.expiry_date) >= now()
THEN '正常'
when min(ul.expiry_date) is null then '未提供'
ELSE '已超期'
END AS licenseOk from tz_base_unit_licence ul where cu.credit_code = ul.unit_code) as strKey
FROM
tz_cylinder_unit cu
where
cu.unit_status = '1210'
and cu.region_code like concat('%', #{regionCode}, '%')
GROUP BY strKey
</select>
<select id="getInspectionExpiredRate" resultType="java.util.Map">
SELECT
CASE WHEN COUNT(*) = 0 THEN 0 ELSE ROUND((COUNT(CASE WHEN ci.next_inspection_date <![CDATA[<]]> now() THEN 1 END) * 100.0 / COUNT(*)), 2) END AS expiredRate
CASE WHEN COUNT(*) = 0 THEN 0 ELSE ROUND((COUNT(CASE WHEN ci.next_inspection_date <![CDATA[<=]]> now() THEN 1 END) * 100.0 / COUNT(*)), 2) END AS expiredRate
FROM
"tz_cylinder_inspection" ci
LEFT JOIN tz_cylinder_unit cu on ci.app_id = cu.app_id
<where>
cu.unit_status = '1210'
<if test="regionCode != null and regionCode != ''">
cu.region_code like concat('%', #{regionCode}, '%')
and cu.region_code like concat('%', #{regionCode}, '%')
</if>
<if test="appId != null and appId != ''">
cu.app_id = #{appId}
and cu.app_id = #{appId}
</if>
</where>
</select>
......@@ -42,11 +60,12 @@
"tz_cylinder_inspection" ci
LEFT JOIN tz_cylinder_unit cu on ci.app_id = cu.app_id
<where>
cu.unit_status = '1210'
<if test="regionCode != null and regionCode != ''">
cu.region_code like concat('%', #{regionCode}, '%')
and cu.region_code like concat('%', #{regionCode}, '%')
</if>
<if test="appId != null and appId != ''">
cu.app_id = #{appId}
and cu.app_id = #{appId}
</if>
</where>
</select>
......
......@@ -76,6 +76,10 @@
select count(1) from tz_cylinder_filling_check r where date_format(r.inspection_date,'%Y-%m') = date_format(#{time},'%Y-%m') and app_id = #{appId}
</select>
<select id="getFillingCountByDay" resultType="java.lang.Integer">
select count(1) from tz_cylinder_filling_check r where date_format(r.inspection_date,'%Y-%m-%d') = date_format(#{time},'%Y-%m-%d') and app_id = #{appId}
</select>
<select id="getFillingPassedCountByMonth" resultType="java.lang.Integer">
select
IFNULL(
......
......@@ -10,6 +10,11 @@
<select id="getFillingCountByMonth" resultType="java.lang.Integer">
select count(1) from tz_cylinder_filling r where date_format(r.inspection_date,'%Y-%m') = date_format(#{time},'%Y-%m') and app_id = #{appId}
</select>
<select id="getFillingCountByDay" resultType="java.lang.Integer">
select count(1) from tz_cylinder_filling r where date_format(r.inspection_date,'%Y-%m-%d') = date_format(#{time},'%Y-%m-%d') and app_id = #{appId}
</select>
<select id="getFillingPassedCountByMonth" resultType="java.lang.Integer">
select
IFNULL(
......
......@@ -146,6 +146,20 @@
select count(1) from tz_cylinder_filling_record r where date_format(r.filling_endTime,'%Y-%m') = date_format(#{time},'%Y-%m') and app_id = #{appId}
</select>
<select id="getFillingCountByDay" resultType="java.lang.Integer">
select count(1) from tz_cylinder_filling_record r where date_format(r.filling_endTime,'%Y-%m-%d') = date_format(#{time},'%Y-%m-%d') and app_id = #{appId}
</select>
<select id="getFillingUnqualifiedCountByDay" resultType="java.lang.Integer">
SELECT COUNT(1) AS unqualified_count
FROM tz_cylinder_filling_record AS record
LEFT JOIN tz_cylinder_filling AS before ON record.filling_before_id = before.filling_before_id
LEFT JOIN tz_cylinder_filling_check AS after ON record.filling_check_id = after.filling_check_id
WHERE DATE_FORMAT(record.filling_endTime, '%Y-%m-%d') = DATE_FORMAT(#{time}, '%Y-%m-%d')
AND record.app_id = #{appId}
AND (before.check_results = '不合格' OR after.check_results = '不合格')
</select>
<select id="getCylinderFillingRecord" resultType="com.yeejoin.amos.boot.module.cylinder.api.entity.ESCylinderFillingRecordDto">
SELECT DISTINCT(r.filling_record_id),
r.sequence_nbr AS sequenceNbr,
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeejoin.amos.boot.module.cylinder.api.mapper.CylinderFillingRecordStatisticsUnitDayMapper">
</mapper>
......@@ -392,22 +392,6 @@
</where>
</select>
<select id="countFillingTimesAndQuantityByCompany" resultType="java.util.Map">
SELECT COUNT(1) AS fillingTimes, ifnull(SUM(filling_quantity),0) AS fillingQuantity
FROM tz_cylinder_filling_record AS tcfr
<where>
tcfr."filling_endtime" <![CDATA[>=]]> (CURRENT_DATE - INTERVAL '31 days')
<if test="companyId != null and companyId != ''">
AND tcfr."app_id" = #{companyId}
</if>
<if test="startTime != null">
AND DATE_FORMAT(tcfr."filling_starttime",'%Y-%m-%d') <![CDATA[>=]]> #{startTime}
</if>
<if test="endTime != null">
AND DATE_FORMAT(tcfr."filling_endtime",'%Y-%m-%d') <![CDATA[<=]]> #{endTime}
</if>
</where>
</select>
<select id="countFillingTimesAndQuantityByCity" resultType="java.util.Map">
SELECT regionCode AS regionCode,
......
package com.yeejoin.amos.boot.module.cylinder.biz.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RestController;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import java.util.List;
import com.yeejoin.amos.boot.module.cylinder.biz.service.impl.CylinderFillingRecordStatisticsUnitDayServiceImpl;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.cylinder.api.dto.CylinderFillingRecordStatisticsUnitDayDto;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
/**
*
* @author system_generator
* @date 2024-06-05
*/
@RestController
@Api(tags = "Api")
@RequestMapping(value = "/cylinder-filling-record-statistics-unit-day")
public class CylinderFillingRecordStatisticsUnitDayController extends BaseController {
@Autowired
CylinderFillingRecordStatisticsUnitDayServiceImpl cylinderFillingRecordStatisticsUnitDayServiceImpl;
/**
* 新增
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/save")
@ApiOperation(httpMethod = "POST", value = "新增", notes = "新增")
public ResponseModel<CylinderFillingRecordStatisticsUnitDayDto> save(@RequestBody CylinderFillingRecordStatisticsUnitDayDto model) {
model = cylinderFillingRecordStatisticsUnitDayServiceImpl.createWithModel(model);
return ResponseHelper.buildResponse(model);
}
/**
* 根据sequenceNbr更新
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PutMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "PUT", value = "根据sequenceNbr更新", notes = "根据sequenceNbr更新")
public ResponseModel<CylinderFillingRecordStatisticsUnitDayDto> updateBySequenceNbrCylinderFillingRecordStatisticsUnitDay(@RequestBody CylinderFillingRecordStatisticsUnitDayDto model, @PathVariable(value = "sequenceNbr") Long sequenceNbr) {
model.setSequenceNbr(sequenceNbr);
return ResponseHelper.buildResponse(cylinderFillingRecordStatisticsUnitDayServiceImpl.updateWithModel(model));
}
/**
* 根据sequenceNbr删除
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@DeleteMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除", notes = "根据sequenceNbr删除")
public ResponseModel<Boolean> deleteBySequenceNbr(HttpServletRequest request, @PathVariable(value = "sequenceNbr") Long sequenceNbr){
return ResponseHelper.buildResponse(cylinderFillingRecordStatisticsUnitDayServiceImpl.removeById(sequenceNbr));
}
/**
* 根据sequenceNbr查询
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "GET",value = "根据sequenceNbr查询单个", notes = "根据sequenceNbr查询单个")
public ResponseModel<CylinderFillingRecordStatisticsUnitDayDto> selectOne(@PathVariable Long sequenceNbr) {
return ResponseHelper.buildResponse(cylinderFillingRecordStatisticsUnitDayServiceImpl.queryBySeq(sequenceNbr));
}
/**
* 列表分页查询
*
* @param current 当前页
* @param current 每页大小
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/page")
@ApiOperation(httpMethod = "GET",value = "分页查询", notes = "分页查询")
public ResponseModel<Page<CylinderFillingRecordStatisticsUnitDayDto>> queryForPage(@RequestParam(value = "current") int current, @RequestParam
(value = "size") int size) {
Page<CylinderFillingRecordStatisticsUnitDayDto> page = new Page<CylinderFillingRecordStatisticsUnitDayDto>();
page.setCurrent(current);
page.setSize(size);
return ResponseHelper.buildResponse(cylinderFillingRecordStatisticsUnitDayServiceImpl.queryForCylinderFillingRecordStatisticsUnitDayPage(page));
}
/**
* 列表全部数据查询
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET",value = "列表全部数据查询", notes = "列表全部数据查询")
@GetMapping(value = "/list")
public ResponseModel<List<CylinderFillingRecordStatisticsUnitDayDto>> selectForList() {
return ResponseHelper.buildResponse(cylinderFillingRecordStatisticsUnitDayServiceImpl.queryForCylinderFillingRecordStatisticsUnitDayList());
}
}
......@@ -108,11 +108,9 @@ public class CylinderQuestionInfoController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PutMapping(value = "/init")
@ApiOperation(httpMethod = "问题数据初始化", value = "问题数据初始化", notes = "问题数据初始化,运维专用")
@ApiOperation(httpMethod = "PUT", value = "问题数据初始化", notes = "问题数据初始化,运维专用")
public ResponseModel<String> initData() {
cylinderQuestionInfoServiceImpl.initData();
return ResponseHelper.buildResponse("succese");
return ResponseHelper.buildResponse("success");
}
}
package com.yeejoin.amos.boot.module.cylinder.biz.event;
import com.yeejoin.amos.boot.module.cylinder.api.dto.CylinderFillingRecordStatisticsUnitDayDto;
import lombok.Getter;
import org.springframework.context.ApplicationEvent;
/**
* @author Administrator
*/
@Getter
public class CylinderStatisticsUnitDayInsertOrUpdateEvent extends ApplicationEvent {
private CylinderFillingRecordStatisticsUnitDayDto cylinderFillingRecordStatisticsUnitDayDto;
/**
* Create a new {@code ApplicationEvent}.
*
* @param source the object on which the event initially occurred or with
* which the event is associated (never {@code null})
*/
public CylinderStatisticsUnitDayInsertOrUpdateEvent(Object source, CylinderFillingRecordStatisticsUnitDayDto cylinderFillingRecordStatisticsUnitDayDto) {
super(source);
this.cylinderFillingRecordStatisticsUnitDayDto = cylinderFillingRecordStatisticsUnitDayDto;
}
}
......@@ -86,7 +86,7 @@ public class CylinderQuestionCreateEventListener implements ApplicationListener<
waitSaveData.add(questionInfoDto);
try {
reentrantLock.lock();
if (queue.size() > batchSize) {
if (queue.size() >= batchSize) {
queue.drainTo(waitSaveData, batchSize);
}
} finally {
......
package com.yeejoin.amos.boot.module.cylinder.biz.event.listener;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Sequence;
import com.yeejoin.amos.boot.module.cylinder.api.dto.CylinderFillingRecordStatisticsUnitDayDto;
import com.yeejoin.amos.boot.module.cylinder.api.entity.CylinderFillingRecordStatisticsUnitDay;
import com.yeejoin.amos.boot.module.cylinder.biz.event.CylinderStatisticsUnitDayInsertOrUpdateEvent;
import com.yeejoin.amos.boot.module.cylinder.biz.service.impl.CylinderFillingRecordStatisticsUnitDayServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.locks.ReentrantLock;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author Administrator
*/
@Component
@Slf4j
public class CylinderStatisticsUnitDayInsertOrUpdateEventListener implements ApplicationListener<CylinderStatisticsUnitDayInsertOrUpdateEvent> {
@Value("${cylinder.day.statistics.insertOrUpdate.thread.number:3}")
private int threadNumber;
/**
* 批量入库大小
*/
private int batchSize = 10;
private List<BlockingQueue<CylinderFillingRecordStatisticsUnitDayDto>> hashCodeBlockingQueues = new ArrayList<>();
private ReentrantLock reentrantLock = new ReentrantLock();
private Sequence sequence;
private CylinderFillingRecordStatisticsUnitDayServiceImpl statisticsUnitDayService;
public CylinderStatisticsUnitDayInsertOrUpdateEventListener(CylinderFillingRecordStatisticsUnitDayServiceImpl statisticsUnitDayService,
Sequence sequence) {
this.statisticsUnitDayService = statisticsUnitDayService;
this.sequence = sequence;
}
@Override
public void onApplicationEvent(CylinderStatisticsUnitDayInsertOrUpdateEvent event) {
CylinderFillingRecordStatisticsUnitDayDto fillingRecordStatisticsUnitDayDto = event.getCylinderFillingRecordStatisticsUnitDayDto();
log.info("2.收到气瓶单位日统计事件消息:{}", JSON.toJSONString(fillingRecordStatisticsUnitDayDto));
// 按照一定的规则将统计维度不同的数据放到不同的队列里,保证多线程不会同时操作相同行数据,减少了线程的冲突,提高执行效率
int queueIndex = Math.abs(fillingRecordStatisticsUnitDayDto.getAppId().hashCode()) % threadNumber;
hashCodeBlockingQueues.get(queueIndex).add(fillingRecordStatisticsUnitDayDto);
}
@PostConstruct
public void init() {
// 初始化队列,按照线程数动态创建队列
initQueue();
// 初始化多线程消费线程
ExecutorService executorService = Executors.newFixedThreadPool(threadNumber);
for (int i = 0; i < threadNumber; i++) {
BlockingQueue<CylinderFillingRecordStatisticsUnitDayDto> queue = hashCodeBlockingQueues.get(i);
executorService.execute(() -> {
while (true) {
try {
CylinderFillingRecordStatisticsUnitDayDto fillingRecordStatisticsUnitDayDto = queue.take();
List<CylinderFillingRecordStatisticsUnitDayDto> unitDayDtos = new ArrayList<>();
unitDayDtos.add(fillingRecordStatisticsUnitDayDto);
try {
reentrantLock.lock();
if (queue.size() >= batchSize) {
queue.drainTo(unitDayDtos, batchSize);
}
} finally {
reentrantLock.unlock();
}
this.buildAndSaveData(unitDayDtos);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
});
}
}
private void buildAndSaveData(List<CylinderFillingRecordStatisticsUnitDayDto> unitDayDtos) {
List<CylinderFillingRecordStatisticsUnitDay> existStatisticsData = queryStatisticsDayOfToday(unitDayDtos);
List<CylinderFillingRecordStatisticsUnitDayDto> insertStatisticsData = this.buildStatisticsDataOfInsert(unitDayDtos, existStatisticsData);
List<CylinderFillingRecordStatisticsUnitDayDto> updateStatisticsData = this.buildStatisticsDataOfUpdate(unitDayDtos, existStatisticsData);
this.sumUpdateStatisticsData(existStatisticsData, updateStatisticsData);
this.saveOrUpdateBatch(insertStatisticsData, updateStatisticsData);
}
private void saveOrUpdateBatch(List<CylinderFillingRecordStatisticsUnitDayDto> insertStatisticsData, List<CylinderFillingRecordStatisticsUnitDayDto> updateStatisticsData) {
// appId + 日期 存在则累计更新(update),不存在则插入(insert)
List<CylinderFillingRecordStatisticsUnitDay> entitys = this.mergeDataAnCastDto2Entity(insertStatisticsData, updateStatisticsData);
statisticsUnitDayService.saveOrUpdateBatch(entitys);
log.info("3.气瓶日统计表入库成功");
}
private List<CylinderFillingRecordStatisticsUnitDay> mergeDataAnCastDto2Entity(List<CylinderFillingRecordStatisticsUnitDayDto> insertStatisticsData, List<CylinderFillingRecordStatisticsUnitDayDto> updateStatisticsData) {
insertStatisticsData.addAll(updateStatisticsData);
return BeanUtil.copyToList(insertStatisticsData, CylinderFillingRecordStatisticsUnitDay.class);
}
private void sumUpdateStatisticsData(List<CylinderFillingRecordStatisticsUnitDay> existStatisticsData, List<CylinderFillingRecordStatisticsUnitDayDto> updateStatisticsData) {
Map<String, CylinderFillingRecordStatisticsUnitDay> existStatisticsDataMap = existStatisticsData.stream().collect(Collectors.toMap(CylinderFillingRecordStatisticsUnitDay::getAppId, Function.identity()));
updateStatisticsData.forEach(up -> {
up.setFillingNotPassedCount(existStatisticsDataMap.get(up.getAppId()).getFillingNotPassedCount() + up.getFillingNotPassedCount());
up.setFillingQuantity(this.sumFillingQuantity(existStatisticsDataMap.get(up.getAppId()).getFillingQuantity(), up.getFillingQuantity()));
up.setFillingBeforeSum(existStatisticsDataMap.get(up.getAppId()).getFillingBeforeSum() + up.getFillingBeforeSum());
up.setFillingAfterSum(existStatisticsDataMap.get(up.getAppId()).getFillingAfterSum() + up.getFillingAfterSum());
up.setTotalSum(existStatisticsDataMap.get(up.getAppId()).getTotalSum() + 1);
up.setSequenceNbr(existStatisticsDataMap.get(up.getAppId()).getSequenceNbr());
up.setFillingDate(new Date());
});
}
/**
* 累计充装量计算
*
* @param fillingQuantity 数据库已有充装量
* @param newFillingQuantity 新增加充装量
* @return 求和
*/
private BigDecimal sumFillingQuantity(BigDecimal fillingQuantity, BigDecimal newFillingQuantity) {
return fillingQuantity.add(newFillingQuantity).setScale(2, RoundingMode.HALF_UP);
}
private List<CylinderFillingRecordStatisticsUnitDayDto> buildStatisticsDataOfInsert(List<CylinderFillingRecordStatisticsUnitDayDto> unitDayDtos, List<CylinderFillingRecordStatisticsUnitDay> existStatisticsData) {
return unitDayDtos.stream().filter(s -> existStatisticsData.stream().noneMatch(e -> e.getAppId().equals(s.getAppId()))).peek(u -> u.setSequenceNbr(sequence.nextId())).collect(Collectors.toList());
}
private List<CylinderFillingRecordStatisticsUnitDayDto> buildStatisticsDataOfUpdate(List<CylinderFillingRecordStatisticsUnitDayDto> unitDayDtos, List<CylinderFillingRecordStatisticsUnitDay> existStatisticsData) {
return unitDayDtos.stream().filter(s -> existStatisticsData.stream().anyMatch(e -> e.getAppId().equals(s.getAppId()))).collect(Collectors.toList());
}
private List<CylinderFillingRecordStatisticsUnitDay> queryStatisticsDayOfToday(List<CylinderFillingRecordStatisticsUnitDayDto> unitDayDtos) {
Set<String> appIds = unitDayDtos.stream().map(CylinderFillingRecordStatisticsUnitDayDto::getAppId).collect(Collectors.toSet());
return statisticsUnitDayService.list(new LambdaQueryWrapper<CylinderFillingRecordStatisticsUnitDay>().in(CylinderFillingRecordStatisticsUnitDay::getAppId, appIds).eq(CylinderFillingRecordStatisticsUnitDay::getFillingDate, DateUtil.format(new Date(), DatePattern.NORM_DATE_PATTERN)));
}
private void initQueue() {
for (int i = 0; i < threadNumber; i++) {
hashCodeBlockingQueues.add(new LinkedBlockingQueue<>());
}
}
}
package com.yeejoin.amos.boot.module.cylinder.biz.listener;
import com.alibaba.fastjson.JSONArray;
import com.yeejoin.amos.boot.module.cylinder.api.dto.CylinderQuestionInfoDto;
import com.yeejoin.amos.boot.module.cylinder.api.enums.QuestionTypeEnum;
import com.yeejoin.amos.boot.module.cylinder.biz.event.CylinderQuestionCreateEvent;
import com.yeejoin.amos.boot.module.cylinder.biz.event.publisher.EventPublisher;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderFillingRecordDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.enums.CyclinderStatus;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.springframework.beans.factory.annotation.Value;
......@@ -32,22 +27,22 @@ public class CylinderFillingInsertEventListener extends EmqxListener {
@Value("${cylinder.filling.insert.msg.custom.thread.number:3}")
private int threadNumber;
@Value("${cylinder.filling.insert.topic:cylinder/filling/insert/topic}")
@Value("${cylinder.filling.insert.topic:cylinder/filling/insert/topic2}")
private String insertTopic;
@Value("${spring.application.name:TZS-CYLINDER}")
private String applicationName;
private EventPublisher eventPublisher;
private EmqKeeper emqKeeper;
private List<ICylinderFillingInsertListener> cylinderFillingInsertListeners;
private BlockingQueue<CylinderFillingRecordDto> blockingQueue = new LinkedBlockingQueue<>();
public CylinderFillingInsertEventListener(EventPublisher eventPublisher,
EmqKeeper emqKeeper) {
this.eventPublisher = eventPublisher;
public CylinderFillingInsertEventListener(EmqKeeper emqKeeper,
List<ICylinderFillingInsertListener> cylinderFillingInsertListeners) {
this.emqKeeper = emqKeeper;
this.cylinderFillingInsertListeners = cylinderFillingInsertListeners;
}
......@@ -79,19 +74,9 @@ public class CylinderFillingInsertEventListener extends EmqxListener {
}
private void createCylinderFillingQuestion(CylinderFillingRecordDto cylinderFillingRecordDto) {
if (CyclinderStatus.HEGE.getName().equals(cylinderFillingRecordDto.getFillingResult()) && CyclinderStatus.HEGE.getName().equals(cylinderFillingRecordDto.getCheckResult())) {
log.info("气瓶充装信息前后全部合格,不创建问题!");
} else {
CylinderQuestionInfoDto questionInfo = new CylinderQuestionInfoDto();
questionInfo.setQuestionType(QuestionTypeEnum.CZJCBHG.getCode());
questionInfo.setQuestionTypeName(QuestionTypeEnum.CZJCBHG.getName());
questionInfo.setQuestionAttributionId(cylinderFillingRecordDto.getAppId());
questionInfo.setQuestionAttributionName(cylinderFillingRecordDto.getFillingUnitName());
questionInfo.setRegionCode(cylinderFillingRecordDto.getRegionCode());
questionInfo.setQuestionObjectId(cylinderFillingRecordDto.getSequenceCode());
questionInfo.setHappenDate(cylinderFillingRecordDto.getSyncDate());
eventPublisher.publish(new CylinderQuestionCreateEvent(this, questionInfo));
}
cylinderFillingInsertListeners.forEach(listener -> {
listener.handle(cylinderFillingRecordDto);
});
}
@Override
......
package com.yeejoin.amos.boot.module.cylinder.biz.listener;
import com.yeejoin.amos.boot.module.cylinder.api.dto.CylinderQuestionInfoDto;
import com.yeejoin.amos.boot.module.cylinder.api.enums.QuestionTypeEnum;
import com.yeejoin.amos.boot.module.cylinder.biz.event.CylinderQuestionCreateEvent;
import com.yeejoin.amos.boot.module.cylinder.biz.event.publisher.EventPublisher;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderFillingRecordDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.enums.CyclinderStatus;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @author Administrator
*/
@Component
@Slf4j
public class CylinderFillingInsertListenerForQuestion implements ICylinderFillingInsertListener {
private EventPublisher eventPublisher;
public CylinderFillingInsertListenerForQuestion(EventPublisher eventPublisher) {
this.eventPublisher = eventPublisher;
}
@Override
public void handle(CylinderFillingRecordDto cylinderFillingRecordDto) {
if (CyclinderStatus.HEGE.getName().equals(cylinderFillingRecordDto.getFillingResult()) && CyclinderStatus.HEGE.getName().equals(cylinderFillingRecordDto.getCheckResult())) {
log.info("气瓶充装信息前后全部合格,不创建问题!");
} else {
CylinderQuestionInfoDto questionInfo = new CylinderQuestionInfoDto();
questionInfo.setQuestionType(QuestionTypeEnum.CZJCBHG.getCode());
questionInfo.setQuestionTypeName(QuestionTypeEnum.CZJCBHG.getName());
questionInfo.setQuestionAttributionId(cylinderFillingRecordDto.getAppId());
questionInfo.setQuestionAttributionName(cylinderFillingRecordDto.getFillingUnitName());
questionInfo.setRegionCode(cylinderFillingRecordDto.getRegionCode());
questionInfo.setQuestionObjectId(cylinderFillingRecordDto.getSequenceCode());
questionInfo.setHappenDate(cylinderFillingRecordDto.getSyncDate());
eventPublisher.publish(new CylinderQuestionCreateEvent(this, questionInfo));
}
}
}
package com.yeejoin.amos.boot.module.cylinder.biz.listener;
import com.yeejoin.amos.boot.module.cylinder.api.dto.CylinderFillingRecordStatisticsUnitDayDto;
import com.yeejoin.amos.boot.module.cylinder.biz.event.CylinderStatisticsUnitDayInsertOrUpdateEvent;
import com.yeejoin.amos.boot.module.cylinder.biz.event.publisher.EventPublisher;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderFillingRecordDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.enums.CyclinderStatus;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author Administrator
*/
@Component
public class CylinderFillingInsertListenerForStatistics implements ICylinderFillingInsertListener {
private EventPublisher eventPublisher;
public CylinderFillingInsertListenerForStatistics(EventPublisher eventPublisher) {
this.eventPublisher = eventPublisher;
}
@Override
public void handle(CylinderFillingRecordDto cylinderFillingRecordDto) {
CylinderFillingRecordStatisticsUnitDayDto statisticsUnitDay = new CylinderFillingRecordStatisticsUnitDayDto();
statisticsUnitDay.setAppId(cylinderFillingRecordDto.getAppId());
statisticsUnitDay.setRegionCode(cylinderFillingRecordDto.getRegionCode());
statisticsUnitDay.setFillingDate(cylinderFillingRecordDto.getSyncDate());
statisticsUnitDay.setFillingAfterSum(StringUtils.isEmpty(cylinderFillingRecordDto.getFillingEndtime()) ? 0 : 1);
statisticsUnitDay.setFillingBeforeSum(StringUtils.isEmpty(cylinderFillingRecordDto.getFillingStarttime()) ? 0 : 1);
statisticsUnitDay.setFillingQuantity(new BigDecimal(cylinderFillingRecordDto.getFillingQuantity()));
statisticsUnitDay.setFillingNotPassedCount(this.justIsOk(cylinderFillingRecordDto));
statisticsUnitDay.setFillingDate(new Date());
statisticsUnitDay.setRecDate(new Date());
statisticsUnitDay.setTotalSum(1);
eventPublisher.publish(new CylinderStatisticsUnitDayInsertOrUpdateEvent(this, statisticsUnitDay));
}
private int justIsOk(CylinderFillingRecordDto cylinderFillingRecordDto) {
if (CyclinderStatus.HEGE.getName().equals(cylinderFillingRecordDto.getFillingResult()) && CyclinderStatus.HEGE.getName().equals(cylinderFillingRecordDto.getCheckResult())) {
return 0;
} else {
return 1;
}
}
}
package com.yeejoin.amos.boot.module.cylinder.biz.listener;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderFillingRecordDto;
/**
* @author Administrator
*/
public interface ICylinderFillingInsertListener {
/**
* 事件处理
* @param cylinderFillingRecordDto 充装对象
*/
void handle(CylinderFillingRecordDto cylinderFillingRecordDto);
}
package com.yeejoin.amos.boot.module.cylinder.biz.service.impl;
import com.yeejoin.amos.boot.module.cylinder.api.entity.CylinderFillingRecordStatisticsUnitDay;
import com.yeejoin.amos.boot.module.cylinder.api.mapper.CylinderFillingRecordStatisticsUnitDayMapper;
import com.yeejoin.amos.boot.module.cylinder.api.service.ICylinderFillingRecordStatisticsUnitDayService;
import com.yeejoin.amos.boot.module.cylinder.api.dto.CylinderFillingRecordStatisticsUnitDayDto;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
/**
* 气瓶充装统计表-企业-以天为维度服务实现类
*
* @author system_generator
* @date 2024-06-05
*/
@Service
public class CylinderFillingRecordStatisticsUnitDayServiceImpl extends BaseService<CylinderFillingRecordStatisticsUnitDayDto,CylinderFillingRecordStatisticsUnitDay,CylinderFillingRecordStatisticsUnitDayMapper> implements ICylinderFillingRecordStatisticsUnitDayService {
/**
* 分页查询
*/
public Page<CylinderFillingRecordStatisticsUnitDayDto> queryForCylinderFillingRecordStatisticsUnitDayPage(Page<CylinderFillingRecordStatisticsUnitDayDto> page) {
return this.queryForPage(page, null, false);
}
/**
* 列表查询 示例
*/
public List<CylinderFillingRecordStatisticsUnitDayDto> queryForCylinderFillingRecordStatisticsUnitDayList() {
return this.queryForList("" , false);
}
}
\ No newline at end of file
......@@ -1336,6 +1336,14 @@ public class CylinderInfoController extends BaseController {
return ResponseHelper.buildResponse(map);
}
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@ApiOperation(httpMethod = "GET", value = "主动向以天为维度的企业气瓶统计表中刷入当前时间前30天的数据")
@GetMapping(value = "/thirtyDayEnterpriseCylinderDataRefreshTask")
public ResponseModel<Object> thirtyDayEnterpriseCylinderDataRefreshTask() {
cylinderInfoServiceImpl.fillingRecordDataSynHandler();
return ResponseHelper.buildResponse("ok");
}
/**
* 地市气瓶,气站信息统计
*
......@@ -1350,16 +1358,6 @@ public class CylinderInfoController extends BaseController {
return ResponseHelper.buildResponse(result);
}
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@ApiOperation(httpMethod = "GET", value = "某个企业充装次数及累计充装量统计")
@GetMapping(value = "/countFillingTimesAndQuantityByCompany")
public ResponseModel<JSONObject> countFillingTimesAndQuantityByCompany(@RequestParam(value = "companyId") String companyId,
@RequestParam(value = "startTime", required = false) String startTime,
@RequestParam(value = "endTime", required = false) String endTime) {
return ResponseHelper.buildResponse(cylinderInfoServiceImpl.countFillingTimesAndQuantityByCompany(companyId, startTime, endTime));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "市级为维度,各市的充装次数和累计充装量,当前日期向前推31天的数据总和")
@GetMapping(value = "/countFillingTimesAndQuantityByCity")
......
......@@ -41,6 +41,10 @@ public class CylinderFillingCheckServiceImpl extends BaseService<CylinderFilling
return this.baseMapper.getFillingCountByMonth(appId,time);
}
public Integer getFillingCountByDay(String appId, Date time) {
return this.baseMapper.getFillingCountByDay(appId,time);
}
public Integer getFillingPassedCountByMonth(String appId, Date time) {
return this.baseMapper.getFillingPassedCountByMonth(appId,time);
}
......
......@@ -112,6 +112,13 @@ public class CylinderFillingRecordServiceImpl extends BaseService<CylinderFillin
public Integer getFillingCountByMonth(String appId, Date time) {
return baseMapper.getFillingCountByMonth(appId, time);
}
public Integer getFillingCountByDay(String appId, Date time) {
return baseMapper.getFillingCountByDay(appId, time);
}
public Integer getFillingUnqualifiedCountByDay(String appId, Date time) {
return baseMapper.getFillingUnqualifiedCountByDay(appId, time);
}
public Double getFillingSumByDate(String appId, Date time) {
return baseMapper.getFillingSumByDate(appId, time);
......
......@@ -41,6 +41,10 @@ public class CylinderFillingServiceImpl extends BaseService<CylinderFillingDto,
return this.baseMapper.getFillingCountByMonth(appId,time);
}
public Integer getFillingCountByDay(String appId, Date time) {
return this.baseMapper.getFillingCountByDay(appId,time);
}
public Integer getFillingPassedCountByMonth(String appId, Date time) {
return this.baseMapper.getFillingPassedCountByMonth(appId,time);
}
......
......@@ -8,12 +8,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.yeejoin.amos.boot.biz.common.utils.DateUtils;
import com.yeejoin.amos.boot.module.cylinder.api.dto.CylinderFillingRecordStatisticsUnitDayDto;
import com.yeejoin.amos.boot.module.cylinder.api.dto.WarningMsgDto;
import com.yeejoin.amos.boot.module.cylinder.api.entity.ESCylinderInfoDto;
import com.yeejoin.amos.boot.module.cylinder.api.entity.MsgLog;
import com.yeejoin.amos.boot.module.cylinder.api.enums.EarlyWarningLevelEnum;
import com.yeejoin.amos.boot.module.cylinder.api.mapper.ScheduleMapper;
import com.yeejoin.amos.boot.module.cylinder.biz.dao.ESCylinderInfoRepository;
import com.yeejoin.amos.boot.module.cylinder.biz.service.impl.CylinderFillingRecordStatisticsUnitDayServiceImpl;
import com.yeejoin.amos.boot.module.cylinder.biz.service.impl.MsgLogServiceImpl;
import com.yeejoin.amos.boot.module.cylinder.biz.service.impl.StartPlatformTokenService;
import com.yeejoin.amos.boot.module.cylinder.biz.service.impl.TzsAuthServiceImpl;
......@@ -36,6 +38,7 @@ import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.metrics.ParsedCardinality;
......@@ -134,6 +137,9 @@ public class CylinderInfoServiceImpl extends BaseService<CylinderInfoDto, Cylind
CylinderFillingUnloadDataUnitServiceImpl cylinderFillingUnloadDataUnitServiceImpl;
@Autowired
CylinderFillingRecordStatisticsUnitDayServiceImpl cylinderFillingRecordStatisticsUnitDayServiceImpl;
@Autowired
MsgLogServiceImpl msgLogService;
@Autowired
TzsAuthServiceImpl tzsAuthService;
......@@ -603,19 +609,27 @@ public class CylinderInfoServiceImpl extends BaseService<CylinderInfoDto, Cylind
.count(new LambdaQueryWrapper<CylinderInfo>().eq(CylinderInfo::getAppId, cylinderUnit.getAppId()));
int tags = cylinderTagsServiceImpl
.count(new LambdaQueryWrapper<CylinderTags>().eq(CylinderTags::getAppId, cylinderUnit.getAppId()));
String percent = "";
String tagPercent = "";
String cylinderPercent = "";
if (tags != 0) {
double zz = (double) cylinder / (double) tags;
double tagPercentDouble = (double) cylinder / (double) tags;
DecimalFormat df = new DecimalFormat("##.00%");
if (Math.abs(zz) < 0.0000000000001) {
percent = "0.00%";
if (Math.abs(tagPercentDouble) < 0.0000000000001) {
tagPercent = "0.00%";
} else {
percent = df.format(zz);
tagPercent = df.format(tagPercentDouble);
}
double cylinderPercentDouble = (double) tags / (double) cylinder;
if (Math.abs(cylinderPercentDouble) < 0.0000000000001) {
cylinderPercent = "0.00%";
} else {
cylinderPercent =Math.abs(cylinderPercentDouble) > 1 ? "100%" : df.format(cylinderPercentDouble);
}
}
temp.setCylinderSum((long) cylinder);
temp.setTagsSum((long) tags);
temp.setTagPercent(percent);
temp.setTagPercent(tagPercent);
temp.setCylinderPercent(cylinderPercent);
cylinderTagsDataUnitServiceImpl.createWithModel(temp);
});
}
......@@ -792,6 +806,63 @@ public class CylinderInfoServiceImpl extends BaseService<CylinderInfoDto, Cylind
cylinderFillingCheckDataUnitDto.setAppId(cylinderUnit.getAppId());
}
@Override
public void fillingRecordDataSynHandler() {
// 清空数据
cylinderFillingRecordStatisticsUnitDayServiceImpl.remove(new LambdaQueryWrapper<>());
countByUnit(cylinderUnit -> {
// 当前企业前31天数据填充
Calendar calendar = Calendar.getInstance();
for (int i = 0; i <= 30; i++) {
CylinderFillingRecordStatisticsUnitDayDto unitDay = new CylinderFillingRecordStatisticsUnitDayDto();
calendar.add(Calendar.DAY_OF_MONTH, -1);
calcCylinderFillingCheckDataUnitDataWithDay(cylinderUnit,calendar,unitDay);
cylinderFillingRecordStatisticsUnitDayServiceImpl.createWithModel(unitDay);
}
});
}
/**
* 计算当前单位的充装检查数据统计-以日为单位
*
* @param cylinderUnit
* @param calender
* @param unitDay
*/
public void calcCylinderFillingCheckDataUnitDataWithDay(CylinderUnit cylinderUnit, Calendar calender, CylinderFillingRecordStatisticsUnitDayDto unitDay) {
unitDay.setFillingDate(calender.getTime());
unitDay.setAppId(cylinderUnit.getAppId());
unitDay.setRegionCode(cylinderUnit.getRegionCode());
// 当天充装次数
Integer countThisDay = cylinderFillingRecordServiceImpl
.getFillingCountByDay(cylinderUnit.getAppId(), calender.getTime());
unitDay.setTotalSum(countThisDay);
// 当前充装前检查数
Integer fillingBeforeCount = cylinderFillingServiceImpl.getFillingCountByDay(cylinderUnit.getAppId(),
calender.getTime());
unitDay.setFillingBeforeSum(fillingBeforeCount);
// 当天充装后检查数
Integer fillingAfterCount = cylinderFillingCheckServiceImpl
.getFillingCountByDay(cylinderUnit.getAppId(), calender.getTime());
unitDay.setFillingAfterSum(fillingAfterCount);
// 当天充装量
Double fillingSumByDate= cylinderFillingRecordServiceImpl
.getFillingSumByDate(cylinderUnit.getAppId(), calender.getTime());
unitDay.setFillingQuantity(BigDecimal.valueOf(fillingSumByDate));
// 充装检查不合格数
Integer uniqueFillingBeforeSum = cylinderFillingRecordServiceImpl
.getFillingUnqualifiedCountByDay(cylinderUnit.getAppId(), calender.getTime());
unitDay.setFillingNotPassedCount(uniqueFillingBeforeSum);
}
/**
* 充装量、卸液量按单位统计
*/
......@@ -1091,7 +1162,7 @@ public class CylinderInfoServiceImpl extends BaseService<CylinderInfoDto, Cylind
long totle = 0;
try {
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
for (org.elasticsearch.search.SearchHit hit : response.getHits()) {
for (SearchHit hit : response.getHits()) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(hit);
ESCylinderInfoDto esCylinderInfoDto = JSONObject.toJavaObject(jsonObject.getJSONObject("sourceAsMap"), ESCylinderInfoDto.class);
list.add(esCylinderInfoDto);
......@@ -1283,35 +1354,6 @@ public class CylinderInfoServiceImpl extends BaseService<CylinderInfoDto, Cylind
return cylinderInfoMapper.cyinderOutInfoList(page, cylinderInfoDto, sort, appids);
}
public JSONObject countFillingTimesAndQuantityByCompany(String companyId, String startTime, String endTime) {
Map<String, Object> stringObjectMap = cylinderInfoMapper.countFillingTimesAndQuantityByCompany(companyId, startTime, endTime);
// 组装成柱状图能渲染的格式
//{
// "seriesData": [
// {
// "data": [
// 3
// ],
// "name": "充装次数(次)"
// },
// {
// "data": [
// 1
// ],
// "name": "累计充装量(kg)"
// }
// ],
// "axisData": [
// "总数"
// ]
// }
String template = "{\"seriesData\": [{\"data\": [%s],\"name\": \"充装次数(次)\"},{\"data\": [%s],\"name\": \"累计充装量(kg)\"}],\"axisData\": [\"总数\"]}";
String format = String.format(template,
ObjectUtils.isEmpty(stringObjectMap.get("fillingTimes")) ? 0 : stringObjectMap.get("fillingTimes"),
ObjectUtils.isEmpty(stringObjectMap.get(FILLING_QUANTITY)) ? 0 : stringObjectMap.get(FILLING_QUANTITY));
return JSON.parseObject(format);
}
public Map<String, Object> countFillingTimesAndQuantityByCity() {
// 查询所有的市级城市
List<RegionModel> regionModelList = Systemctl.regionClient.queryByLevel("2").getResult();
......
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