server/src/main/java/doumeemes/api/ext/StatisticsController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,49 @@ package doumeemes.api.ext; import doumeemes.api.BaseController; import doumeemes.core.model.ApiResponse; import doumeemes.dao.business.dto.statistics.StatisticsPlanDataModel; import doumeemes.dao.business.dto.statistics.Unqualified7DayModel; import doumeemes.dao.business.dto.statistics.UserProduceTopModel; import doumeemes.service.ext.StatisticsService; import doumeemes.service.ext.WorkorderExtService; import doumeemes.service.ext.WorkorderRecordExtService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; /** * 大å±ç»è®¡æ°æ®æ¥å£ * @author æ±è¹è¹ * @date 2022/04/20 10:56 */ @RestController @RequestMapping("/ext/statistic") @Api(tags = "大屿°æ®çæ¿-ç»è®¡æ°æ®æ¥å£") public class StatisticsController extends BaseController { @Autowired private StatisticsService statisticsService; @ApiOperation("æ°æ®ç»è®¡ï¼æ§è¡ä¸ãå»¶æè®¡åæ°ã仿¥ç产人æ°ã仿¥çäº§è®¾å¤æ°ã仿¥ä¸è¯å") @GetMapping("/getPlanData/{companyId}/{departId}") public ApiResponse<StatisticsPlanDataModel> getPlansData(@PathVariable Integer companyId, @PathVariable Integer departId) { return ApiResponse.success(statisticsService.getPlansData(companyId,departId)); } @ApiOperation("å工产åç»è®¡TOP10") @GetMapping("/userProduceTop/{companyId}/{departId}") public ApiResponse<List<UserProduceTopModel>> getUserProducceTop(@PathVariable Integer companyId, @PathVariable Integer departId) { return ApiResponse.success(statisticsService.getUserProduceTopData(companyId,departId)); } @ApiOperation("è¿7天ä¸è¯ååå¸-ä¸è¯åæ°éç»è®¡") @GetMapping("/getUnqualified7DayData/{companyId}/{departId}") public ApiResponse<List<Unqualified7DayModel>> getUnqualified7DayData(@PathVariable Integer companyId, @PathVariable Integer departId) { return ApiResponse.success(statisticsService.getUnqualified7DayData(companyId,departId)); } } server/src/main/java/doumeemes/dao/business/dto/statistics/StatisticsPlanDataModel.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,33 @@ package doumeemes.dao.business.dto.statistics; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data @ApiModel("大屿°æ®çæ¿-产å计åç»è®¡è¿åæ°æ®") /** * æ§è¡ä¸è®¡åæ°ï¼ç»è®¡èå´ä¸ºï¼æå计åï¼ç¶æä¸ºãæ§è¡ä¸ãï¼ * å»¶æè®¡åæ°ï¼ç»è®¡èå´ä¸ºï¼æå计åï¼ç¶æä¸ºãæ§è¡ä¸ãä¸å½åæ¶é´å¤§äºè®¡åç»ææ¶é´ï¼ * 仿¥ç产人æ°ï¼æ ¹æ®ä»æ¥ææ/产åºè®°å½è¡¨æ°æ®ï¼ç»è®¡ä»æ¥çç产人æ°ï¼å»éï¼ï¼ç»è®¡èå´ä¸ºå·¥åç¶æä¸ºãå·²å建ã已夿ãç产ä¸ãå·²æ£éªãå·²å®å·¥æ£ãå·²æ¥å·¥ãï¼ * 仿¥ç产设å¤ï¼æ ¹æ®ä»æ¥ææ/产åºè®°å½è¡¨å ³èç工忰æ®ï¼ç»è®¡ä»æ¥ççäº§è®¾å¤æ°ï¼å»éï¼ï¼ç»è®¡èå´ä¸ºå·¥åç¶æä¸ºãå·²å建ã已夿ãç产ä¸ãå·²æ£éªãå·²å®å·¥æ£ãå·²æ¥å·¥ãï¼ * 仿¥ä¸è¯åçï¼æ ¹æ®ä»æ¥äº§åºè®°å½è¡¨æ°æ®ï¼ç»è®¡ä»æ¥äº§åºä¸è¯æ°/仿¥äº§åºæ»æ°é*100%ï¼ç»è®¡èå´ä¸ºå·¥åç¶æä¸ºãå·²æ¥å·¥ãï¼ */ public class StatisticsPlanDataModel { @ApiModelProperty(value = "æ§è¡ä¸è®¡åæ°", example = "1") private Integer ingNum; @ApiModelProperty(value = "å»¶æè®¡åæ°", example = "1") private Integer delayNum; @ApiModelProperty(value = "仿¥ç产人æ°", example = "1") private Integer prouserNum; @ApiModelProperty(value = "仿¥çäº§è®¾å¤æ°", example = "1") private Integer deviceNum; @ApiModelProperty(value = "仿¥ä¸è¯åç", example = "1") private BigDecimal unqualifiedRate; @ApiModelProperty(value = "仿¥ä¸è¯åæ°", example = "1",hidden = true) private BigDecimal unqualifiedNum; @ApiModelProperty(value = "仿¥æ¥å·¥æ°", example = "1",hidden = true) private BigDecimal doneNUm; } server/src/main/java/doumeemes/dao/business/dto/statistics/Unqualified7DayModel.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package doumeemes.dao.business.dto.statistics; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.Date; @Data @ApiModel("大屿°æ®çæ¿-å工产åç»è®¡TOP10") /** * ç»è®¡èå´ä¸ºå½æ¥ï¼å·¥åç¶æä¸ºãå·²æ¥å·¥ãï¼ * æ ¹æ®åå·¥æ¥å·¥è¯åæ°ç»è®¡æåºï¼ */ public class Unqualified7DayModel { @ApiModelProperty(value = "ä¸è¯åæ°", example = "1") private BigDecimal unqualifiedNum; @ApiModelProperty(value = "æ¥æ") private Date createTime; } server/src/main/java/doumeemes/dao/business/dto/statistics/UserProduceTopModel.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package doumeemes.dao.business.dto.statistics; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data @ApiModel("大屿°æ®çæ¿-å工产åç»è®¡TOP10") /** * ç»è®¡èå´ä¸ºå½æ¥ï¼å·¥åç¶æä¸ºãå·²æ¥å·¥ãï¼ * æ ¹æ®åå·¥æ¥å·¥è¯åæ°ç»è®¡æåºï¼ */ public class UserProduceTopModel { @ApiModelProperty(value = "åå·¥ç¼ç ", example = "1") private Integer userId; @ApiModelProperty(value = "æ¥å·¥æ°", example = "1") private BigDecimal doneNum; @ApiModelProperty(value = "åå·¥å§å", example = "1") private String userName; @ApiModelProperty(value = "åå·¥çµè¯", example = "1") private String phone; } server/src/main/java/doumeemes/dao/ext/WorkPlansExtMapper.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; import doumeemes.dao.business.dto.statistics.StatisticsPlanDataModel; import doumeemes.dao.business.model.WorkPlans; import doumeemes.dao.business.vo.WorkPlansVO; import doumeemes.dao.ext.dto.QueryWorkPlansDTO; @@ -29,6 +30,8 @@ WorkPlansVO getWorkPlansVODetail(QueryWorkPlansDTO dto); StatisticsPlanDataModel getPlansStaticticsData(QueryWorkPlansDTO workPlans); // @Select(" SELECT" + // " `a`.*, mmodel.CODE as materialCode, mmodel.NAME as materialName , fmodel.NAME as factoryName,usermodel.REALNAME as userName , usermodel.mobile as userMobile " + // " FROM `work_plans` `a`" + server/src/main/java/doumeemes/dao/ext/WorkorderRecordExtMapper.java
@@ -1,5 +1,7 @@ package doumeemes.dao.ext; import doumeemes.dao.business.dto.statistics.Unqualified7DayModel; import doumeemes.dao.business.dto.statistics.UserProduceTopModel; import doumeemes.dao.business.model.WorkorderRecord; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import doumeemes.dao.ext.dto.QuerySalaryStatisticDTO; @@ -37,4 +39,7 @@ List<UserSalaryListVO> userSalaryPage(QueryUserSalaryListDTO model); List<UserProduceTopModel> getUserProduceTopData(QueryWorkorderRecordExtDTO param); List<Unqualified7DayModel> getUnqualified7DayData(QueryWorkorderRecordExtDTO param); } server/src/main/java/doumeemes/dao/ext/dto/QueryWorkPlansDTO.java
@@ -29,7 +29,7 @@ @ApiModelProperty(value = "è®¡åæ¥æ ç»æ", example = "1") private String planDateEnd; @ApiModelProperty(value = "计åç¶æ 0å·²çæã1å·²åå¸ã2å·²æ¤åã3已忶ã4å·²åé ã5å·²æåã6å·²å®å·¥ã7å·²å ¥åºã8å·²å ³é", example = "1") @ApiModelProperty(value = "计åç¶æ 0å·²çæã1å·²åå¸(æ§è¡ä¸ï¼ã2å·²æ¤åã3已忶ã4å·²åé ã5å·²æåã6å·²å®å·¥ã7å·²å ¥åºã8å·²å ³é", example = "1") private Integer planStatus; @ApiModelProperty(value = "å·¥å主é®", example = "1") server/src/main/java/doumeemes/service/ext/StatisticsService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,35 @@ package doumeemes.service.ext; import doumeemes.core.model.ApiResponse; import doumeemes.core.model.LoginUserInfo; import doumeemes.core.model.PageData; import doumeemes.core.model.PageWrap; import doumeemes.dao.business.dto.statistics.StatisticsPlanDataModel; import doumeemes.dao.business.dto.statistics.Unqualified7DayModel; import doumeemes.dao.business.dto.statistics.UserProduceTopModel; import doumeemes.dao.business.model.Workorder; import doumeemes.dao.ext.bean.FinishedInBean; import doumeemes.dao.ext.bean.FinishedInNewBean; import doumeemes.dao.ext.dto.QueryWorkorderExtDTO; import doumeemes.dao.ext.vo.PlansExtListH5VO; import doumeemes.dao.ext.vo.WorkorderExtListCountVO; import doumeemes.dao.ext.vo.WorkorderExtListVO; import doumeemes.dao.ext.vo.WorkorderListModelVO; import org.springframework.stereotype.Service; import java.util.List; /** * 大å±ç»è®¡ä¿¡æ¯Serviceå®ä¹ * @author æ±è¹è¹ * @date 2022/04/20 10:56 */ @Service public interface StatisticsService { StatisticsPlanDataModel getPlansData(Integer companyId, Integer departId); List<UserProduceTopModel> getUserProduceTopData(Integer companyId, Integer departId); List<Unqualified7DayModel> getUnqualified7DayData(Integer companyId, Integer departId); } server/src/main/java/doumeemes/service/ext/impl/StatisticsServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,131 @@ package doumeemes.service.ext.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import doumeemes.core.constants.ResponseStatus; import doumeemes.core.exception.BusinessException; import doumeemes.core.model.LoginUserInfo; import doumeemes.core.model.PageData; import doumeemes.core.model.PageWrap; import doumeemes.core.utils.Constants; import doumeemes.core.utils.DateUtil; import doumeemes.core.utils.redis.RedisUtil; import doumeemes.dao.business.WOutboundMapper; import doumeemes.dao.business.WTransferMapper; import doumeemes.dao.business.WorkorderMapper; import doumeemes.dao.business.dto.statistics.StatisticsPlanDataModel; import doumeemes.dao.business.dto.statistics.Unqualified7DayModel; import doumeemes.dao.business.dto.statistics.UserProduceTopModel; import doumeemes.dao.business.model.*; import doumeemes.dao.ext.*; import doumeemes.dao.ext.dto.QueryBarcodeParamExtDTO; import doumeemes.dao.ext.dto.QueryCompanyExtDTO; import doumeemes.dao.ext.dto.QueryWorkPlansDTO; import doumeemes.dao.ext.dto.QueryWorkorderRecordExtDTO; import doumeemes.dao.ext.vo.BarcodeParamContent; import doumeemes.dao.ext.vo.BarcodeParamExtListVO; import doumeemes.dao.ext.vo.CompanyExtListVO; import doumeemes.dao.ext.vo.DepartmentExtListVO; import doumeemes.service.ext.BarcodeParamExtService; import doumeemes.service.ext.DepartmentExtService; import doumeemes.service.ext.StatisticsService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; /** * äºç»´ç 设置Serviceå®ç° * @author æ±è¹è¹ * @date 2022/04/20 11:01 */ @Service public class StatisticsServiceImpl implements StatisticsService { @Autowired private RedisTemplate<String, Object> redisTemplate; @Autowired private WorkPlansExtMapper workPlansExtMapper; @Autowired private WorkorderRecordExtMapper workorderRecordExtMapper; @Autowired private DepartmentExtService departmentExtService; @Override public StatisticsPlanDataModel getPlansData(Integer companyId, Integer departId) { DepartmentExtListVO department = departmentExtService.getModelById(companyId,departId); if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对ä¸èµ·ï¼ä¼ä¸æè é¨é¨ä¿¡æ¯ä¸åæ³ï¼å¦æçé®ï¼è¯·è系系ç»ç®¡çå"); } QueryWorkPlansDTO workPlans = new QueryWorkPlansDTO(); workPlans.setRootDepartId(department.getRootId()); workPlans.setDepartId(departId); //æ¥è¯¢ç»è®¡ç»æ StatisticsPlanDataModel model = workPlansExtMapper.getPlansStaticticsData(workPlans); model.setUnqualifiedNum(new BigDecimal(0)); if(model.getDoneNUm() !=null && model.getDoneNUm().compareTo(new BigDecimal(0)) != 0){ //ä¸è¯åç model.setUnqualifiedRate(model.getUnqualifiedNum().divide(model.getDoneNUm(),4).multiply(new BigDecimal(100))); } return model; } @Override public List<UserProduceTopModel> getUserProduceTopData(Integer companyId, Integer departId) { DepartmentExtListVO department = departmentExtService.getModelById(companyId,departId); if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对ä¸èµ·ï¼ä¼ä¸æè é¨é¨ä¿¡æ¯ä¸åæ³ï¼å¦æçé®ï¼è¯·è系系ç»ç®¡çå"); } QueryWorkorderRecordExtDTO param = new QueryWorkorderRecordExtDTO(); param.setRootDepartId(department.getRootId()); param.setDepartId(departId); //æ¥è¯¢ç»è®¡ç»æ List<UserProduceTopModel> model = workorderRecordExtMapper.getUserProduceTopData(param); return model; } @Override public List<Unqualified7DayModel> getUnqualified7DayData(Integer companyId, Integer departId) { DepartmentExtListVO department = departmentExtService.getModelById(companyId,departId); if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对ä¸èµ·ï¼ä¼ä¸æè é¨é¨ä¿¡æ¯ä¸åæ³ï¼å¦æçé®ï¼è¯·è系系ç»ç®¡çå"); } QueryWorkorderRecordExtDTO param = new QueryWorkorderRecordExtDTO(); param.setRootDepartId(department.getRootId()); param.setDepartId(departId); //æ¥è¯¢ç»è®¡ç»æ List<Unqualified7DayModel> model = workorderRecordExtMapper.getUnqualified7DayData(param); List<Unqualified7DayModel> result = new ArrayList<>(); Date date = DateUtil.getCurrentDate(); for (int i = 0; i < 7; i++) { Date td = DateUtil.addDaysToDate(date, 7-i); Unqualified7DayModel m = getReusltModelByDate(td,model); if(m == null){ m = new Unqualified7DayModel(); m.setCreateTime(td); m.setUnqualifiedNum(new BigDecimal(0)); } result.add(m); } return model; } private Unqualified7DayModel getReusltModelByDate(Date td, List<Unqualified7DayModel> model ) { if(model !=null){ for(Unqualified7DayModel m : model){ if(StringUtils.equals(DateUtil.getShortTime(td),DateUtil.getShortTime(m.getCreateTime()))){ return m; } } } return null; } } server/src/main/resources/mappers/WorkPlansExtMapper.xml
@@ -170,6 +170,17 @@ </where> order by a.START_DATE desc, a.CREATE_TIME desc </select> <select id="getPlansStaticticsData" parameterType="doumeemes.dao.ext.dto.QueryWorkPlansDTO" resultType="doumeemes.dao.business.dto.statistics.StatisticsPlanDataModel"> SELECT count(a.id) as ingNum, (select count(b.id) FROM `work_plans` b where b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId} AND (b.`STATUS` = 1 and now() > b.plan_Date )) as delayNum, (select count(distinct(b.CREATE_USER)) FROM `workorder_record` b left join workorder c on b.workorder_id =c.id where b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId} AND c.status in (0,1,2,3,4,7)) as prouserNum, (select count(distinct(b.PRO_DEVICE_ID)) FROM `workorder_record` b left join workorder c on b.workorder_id =c.id where b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId} AND c.status in (0,1,2,3,4,7)) as deviceNum, (select sum(ifnull(b.UNQUALIFIED_NUM,0)) FROM `workorder_record` b left join workorder c on b.workorder_id =c.id where b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId} AND c.status=4) as unqualifiedRate, (select sum(ifnull(b.NUM,0)) FROM `workorder_record` b left join workorder c on b.workorder_id =c.id where b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId} AND c.status=4) as doneNum FROM `work_plans` `a` where a.DELETED = 0 AND a.ROOT_DEPART_ID = #{rootDepartId} AND a.DEPART_ID = #{departId} AND a.`STATUS` = 1 </select> <select id="getWorkPlansVODetail" parameterType="doumeemes.dao.ext.dto.QueryWorkPlansDTO" resultMap="WorkPlansVO"> server/src/main/resources/mappers/WorkorderRecordExtMapper.xml
@@ -488,6 +488,27 @@ group by `CREATE_USER` <!-- order by `CREATE_TIME` desc--> </select> <select id="getUserProduceTopData" parameterType="doumeemes.dao.ext.dto.QueryWorkorderRecordExtDTO" resultType="doumeemes.dao.business.dto.statistics.UserProduceTopModel"> SELECT sum(a.num) as doneNum,b.user_id as userId,b.`NAME` as userName,b.PHONE from workorder_record a left join company_user b on b.DELETED=0 and b.user_id=a.CREATE_USER left join workorder c on a.WORKORDER_ID=c.id where a.deleted=0 and a.ROOT_DEPART_ID=#{rootDepartId} and a.DEPART_ID=#{departId} and s.status=4 GROUP BY a.CREATE_USER ORDER By doneNum desc limit 10 </select> <select id="getUnqualified7DayData" parameterType="doumeemes.dao.ext.dto.QueryWorkorderRecordExtDTO" resultType="doumeemes.dao.business.dto.statistics.Unqualified7DayModel"> SELECT sum(a.UNQUALIFIED_NUM) as unqualifiedNum,a.CREATE_TIME from workorder_record a left join workorder c on a.WORKORDER_ID=c.id where a.ROOT_DEPART_ID=#{rootDepartId} and a.DEPART_ID=#{departId} and c.`STATUS`=4 and 7 > (TO_DAYS(now()) - TO_DAYS(a.CREATE_TIME) ) GROUP BY TO_DAYS(a.CREATE_TIME ) </select> <select id="selectListNew" parameterType="doumeemes.dao.ext.dto.QueryWorkorderRecordExtDTO" resultMap="WorkorderRecordExtListVO"> SELECT `a`.`ID`,