jiangping
2023-08-18 5dfbc4af25ab4f5e8d75f99c6e889b5004a49ef0
大屏统计
已添加7个文件
已修改17个文件
657 ■■■■■ 文件已修改
server/src/main/java/doumeemes/api/ext/StatisticsController.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/business/dto/statistics/CheckRecordModel.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/business/dto/statistics/ProcedurePlansPageModel.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/business/dto/statistics/ProcedureProcessModel.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/business/dto/statistics/RecordLogModel.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/business/dto/statistics/Unqualified7DayModel.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/business/dto/statistics/UnqualifiedCateModel.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/business/dto/statistics/WorkPlansPageModel.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/business/dto/statistics/WorkPlansProcedureModel.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/business/model/Plans.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/business/model/Workorder.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/ext/PlansExtMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/ext/RouteProcedureExtMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/ext/WorkPlansExtMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/ext/WorkorderRecordExtMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/ext/dto/QueryPlansExtDTO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/ext/dto/QueryRouteProcedureExtDTO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/ext/vo/RouteProcedureExtListVO.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/service/ext/StatisticsService.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/service/ext/impl/StatisticsServiceImpl.java 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/resources/mappers/PlansExtMapper.xml 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/resources/mappers/RouteProcedureExtMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/resources/mappers/WorkPlansExtMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/resources/mappers/WorkorderRecordExtMapper.xml 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/api/ext/StatisticsController.java
@@ -2,14 +2,18 @@
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.core.model.PageData;
import doumeemes.core.model.PageWrap;
import doumeemes.dao.business.dto.statistics.*;
import doumeemes.dao.ext.dto.*;
import doumeemes.dao.ext.vo.DeviceCheckExtListVO;
import doumeemes.dao.ext.vo.PlansExtListVO;
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.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -28,21 +32,60 @@
    @Autowired
    private StatisticsService statisticsService;
    @ApiOperation("数据统计,执行中、延期计划数、今日生产人数、今日生产设备数、今日不良品")
    @ApiOperation("数据统计-成品计划,执行中、延期计划数、今日生产人数、今日生产设备数、今日不良品")
    @GetMapping("/getPlanData/{companyId}/{departId}")
    public ApiResponse<StatisticsPlanDataModel> getPlansData(@PathVariable Integer companyId, @PathVariable Integer departId) {
        return ApiResponse.success(statisticsService.getPlansData(companyId,departId));
    }
    @ApiOperation("数据统计-工序计划,执行中、延期计划数、今日生产人数、今日生产设备数、今日不良品")
    @GetMapping("/getProcedurePlanData/{companyId}/{departId}")
    public ApiResponse<StatisticsPlanDataModel> getProcedurePlanData(@PathVariable Integer companyId, @PathVariable Integer departId,@RequestParam Integer procedureId) {
        return ApiResponse.success(statisticsService.getProcedurePlanData(companyId,departId,procedureId));
    }
    @ApiOperation("员工产品统计TOP10")
    @GetMapping("/userProduceTop/{companyId}/{departId}")
    public ApiResponse<List<UserProduceTopModel>> getUserProducceTop(@PathVariable Integer companyId, @PathVariable Integer departId) {
        return ApiResponse.success(statisticsService.getUserProduceTopData(companyId,departId));
    public ApiResponse<List<UserProduceTopModel>> getUserProducceTop(@PathVariable Integer companyId, @PathVariable Integer departId,@RequestParam Integer procedureId) {
        return ApiResponse.success(statisticsService.getUserProduceTopData(companyId,departId,procedureId));
    }
    @ApiOperation("近7天不良品分布-不良品数量统计")
    @GetMapping("/getUnqualified7DayData/{companyId}/{departId}")
    public ApiResponse<List<Unqualified7DayModel>> getUnqualified7DayData(@PathVariable Integer companyId, @PathVariable Integer departId) {
        return ApiResponse.success(statisticsService.getUnqualified7DayData(companyId,departId));
    public ApiResponse<List<Unqualified7DayModel>> getUnqualified7DayData(@PathVariable Integer companyId, @PathVariable Integer departId,@RequestParam Integer procedureId) {
        return ApiResponse.success(statisticsService.getUnqualified7DayData(companyId,departId,procedureId));
    }
    @ApiOperation("近7天不良品分布-不良品数量-按不良项统计")
    @GetMapping("/getUnqualifiedCateData/{companyId}/{departId}")
    public ApiResponse<List<UnqualifiedCateModel>> getUnqualifiedCateData(@PathVariable Integer companyId, @PathVariable Integer departId,@RequestParam Integer procedureId) {
        return ApiResponse.success(statisticsService.getUnqualifiedCateData(companyId,departId,procedureId));
    }
    @ApiOperation("报工日志分页查询")
    @PostMapping("/getRecordLogPage/{companyId}/{departId}")
    public ApiResponse<PageData<RecordLogModel>> getRecordLogPage(@PathVariable Integer companyId, @PathVariable Integer departId
            , @RequestBody PageWrap<QueryWorkorderRecordExtDTO> pageWrap) {
        return ApiResponse.success(statisticsService.getRecordLogPage(companyId,departId,pageWrap));
    }
    @ApiOperation("巡检记录分页查询")
    @PostMapping("/getDeviceCheckPage/{companyId}/{departId}")
    public ApiResponse<PageData<DeviceCheckExtListVO>> getDeviceCheckPage (@PathVariable Integer companyId, @PathVariable Integer departId
            ,@RequestBody PageWrap<QueryDeviceCheckExtDTO> pageWrap) {
        return ApiResponse.success(statisticsService.getDeviceCheckPage(companyId,departId,pageWrap));
    }
    @ApiOperation("工序计划进度查询")
    @GetMapping("/getProcedurePlansList/{companyId}/{departId}")
    public ApiResponse<List<ProcedurePlansPageModel>> getProcedurePlansList (@PathVariable Integer companyId, @PathVariable Integer departId,@RequestParam Integer procedureId) {
        return ApiResponse.success(statisticsService.getProcedurePlansPage(companyId,departId,procedureId));
    }
    @ApiOperation("成品计划进度查询")
    @GetMapping("/getWorkPlansList/{companyId}/{departId}")
    public ApiResponse<List<WorkPlansPageModel>> getWorkPlansList (@PathVariable Integer companyId, @PathVariable Integer departId   ) {
        return ApiResponse.success(statisticsService.getWorkPlansList(companyId,departId));
    }
    @ApiOperation("成品计划-工序进度查询")
    @GetMapping("/getProcedureProcessList/{companyId}/{departId}")
    public ApiResponse<List<ProcedureProcessModel>> getProcedureProcessList (@PathVariable Integer companyId, @PathVariable Integer departId   ) {
        return ApiResponse.success(statisticsService.getProcedureProcessList(companyId,departId));
    }
server/src/main/java/doumeemes/dao/business/dto/statistics/CheckRecordModel.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;
import java.util.Date;
@Data
@ApiModel("大屏数据看板- è®¾å¤‡å·¡æ£€")
/**
 *  æ»šåŠ¨å±•ç¤ºæœ€æ–°20条设备巡检记录,按照时间倒序排列;
 */
public class CheckRecordModel {
    @ApiModelProperty(value = "巡检时间")
    private Date createTime;
    @ApiModelProperty(value = "员工姓名")
    private String userName;
    @ApiModelProperty(value = "设备名称")
    private String materialCode;
    @ApiModelProperty(value = "巡检结果 0合格 1不良",example = "1")
    private Integer doneType;
}
server/src/main/java/doumeemes/dao/business/dto/statistics/ProcedurePlansPageModel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
package doumeemes.dao.business.dto.statistics;
import doumeemes.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
@ApiModel("大屏数据看板- ã€å·¥åºè®¡åˆ’进度:(不分页,展示所有数据)")
/**
 *  ä»¥å½“前工序维度展示工序计划的情况;
 * ç»Ÿè®¡èŒƒå›´ï¼šã€å·²å‘布】、【已分配】或者 [【已完工】且当天有报工记录的工序计划];
 * å±•示物料名称、编码、计划数量、完成的良品数、不良品数、未完工数=计划数-良品数-不良品数、不良率=不良品数/总完工数*100%;
 * æŒ‰ç…§åˆ›å»ºæ—¶é—´æ­£åºå±•示;
 */
public class ProcedurePlansPageModel {
    @ApiModelProperty(value = "工序名称", example = "1")
    private String procedureName;
    @ApiModelProperty(value = "工序编码", example = "1")
    private Integer procedureId;
    @ApiModelProperty(value = "不良品率", example = "1")
    private BigDecimal unqualifiedRate;
    @ApiModelProperty(value = "不良品数", example = "1")
    private BigDecimal unqualifiedNum;
    @ApiModelProperty(value = "良品数", example = "1")
    private BigDecimal qualifiedNum;
    @ApiModelProperty(value = "未完工数量", example = "1")
    private BigDecimal undoneNum;
    @ApiModelProperty(value = "计划生产数量", example = "1")
    private BigDecimal num;
    @ApiModelProperty(value = "计划个数", example = "1")
    private Integer planCount;
}
server/src/main/java/doumeemes/dao/business/dto/statistics/ProcedureProcessModel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
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("大屏数据看板- æˆå“è®¡åˆ’进度-工序列表 ")
/**
 *  ç»Ÿè®¡èŒƒå›´ä¸ºã€å·²æŠ¥å·¥ã€‘状态的工单的报工数量;
 * åˆ—表展示状态为【执行中】或者【已完成】且当天有报工记录的成品计划,按照创建时间正序展示;
 * å„工序完成情况:按照工艺路线下的工序顺序展示,并展示当前工序的完成情况;完成情况=良品数/计划数;点击工序名称跳转到工序大屏
 * æœ€åŽä¸€åˆ—的良品数/完工数:为当前产品最后一道工序的良品数/完工数;
 */
public class ProcedureProcessModel {
    @ApiModelProperty(value = "不良品数", example = "1")
    private BigDecimal unqualifiedNum;
    @ApiModelProperty(value = "良品数", example = "1")
    private BigDecimal qualifiedNum;
    @ApiModelProperty(value = "未完工数量", example = "1")
    private BigDecimal undoneNum;
    @ApiModelProperty(value = "计划数量", example = "1")
    private BigDecimal num;
    @ApiModelProperty(value = "不良品率%", example = "1")
    private BigDecimal  unqualifiedRate;
    @ApiModelProperty(value = "物料编码")
    private String materialCode;
    @ApiModelProperty(value = "工序名称")
    private String procedureName;
    @ApiModelProperty(value = "状态 0已生成、1已发布、2已撤回、3已取消、4已分配、5已暂停、6已完工、7已入库、8已关闭", example = "1")
    private Integer status;
}
server/src/main/java/doumeemes/dao/business/dto/statistics/RecordLogModel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
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("大屏数据看板- æŠ¥å·¥æ—¥å¿—")
/**
 *  æ»šåŠ¨å±•ç¤ºå‘˜å·¥æœ€æ–°20条报工数据;统计范围为工单状态为【已报工】;
 */
public class RecordLogModel {
    @ApiModelProperty(value = "不良品数", example = "1")
    private BigDecimal unqualifiedNum;
    @ApiModelProperty(value = "良品数", example = "1")
    private BigDecimal qualifiedNum;
    @ApiModelProperty(value = "报工时间")
    private Date createTime;
    @ApiModelProperty(value = "不良品率%")
    private BigDecimal  unqualifiedRate;
    @ApiModelProperty(value = "员工姓名")
    private String userName;
    @ApiModelProperty(value = "物料编码")
    private String materialCode;
    @ApiModelProperty(value = "物料名称")
    private String materialName;
}
server/src/main/java/doumeemes/dao/business/dto/statistics/Unqualified7DayModel.java
@@ -8,10 +8,10 @@
import java.util.Date;
@Data
@ApiModel("大屏数据看板-员工产品统计TOP10")
@ApiModel("大屏数据看板-近7天不良品分布 ä¸è‰¯å“æ•°é‡ç»Ÿè®¡")
/**
 *  ç»Ÿè®¡èŒƒå›´ä¸ºå½“日;工单状态为【已报工】;
 * æ ¹æ®å‘˜å·¥æŠ¥å·¥è‰¯å“æ•°ç»Ÿè®¡æŽ’序;
 * æŒ‰ç…§å½“天时间往前统计7天的数据,包含当天;
 * ç»Ÿè®¡æ¯å¤©æŠ¥å·¥çš„不良品数(工单为已报工状态);
 */
public class Unqualified7DayModel {
    @ApiModelProperty(value = "不良品数", example = "1")
server/src/main/java/doumeemes/dao/business/dto/statistics/UnqualifiedCateModel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
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("大屏数据看板- è¿‘7天不良品分布 ä¸è‰¯é¡¹åˆ†å¸ƒ")
/**
 * æŒ‰ç…§å½“天时间往前统计7天的数据,包含当天;
 * ç»Ÿè®¡æ¯å¤©æŠ¥å·¥çš„不良项的不良品数量(工单为已报工状态);
 * æŒ‰ç…§ä¸è‰¯é¡¹ç»Ÿè®¡å±•示各个不良项下不良品的数量;
 * å±•示排名前6的不良项的分布情况;
 */
public class UnqualifiedCateModel {
    @ApiModelProperty(value = "不良品数", example = "1")
    private BigDecimal unqualifiedNum;
    @ApiModelProperty(value = "不良项")
    private String  categoryName;
}
server/src/main/java/doumeemes/dao/business/dto/statistics/WorkPlansPageModel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
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.List;
@Data
@ApiModel("大屏数据看板- æˆå“è®¡åˆ’进度:(不分页,展示所有数据)")
/**
 *  ç»Ÿè®¡èŒƒå›´ä¸ºã€å·²æŠ¥å·¥ã€‘状态的工单的报工数量;
 * åˆ—表展示状态为【执行中】或者【已完成】且当天有报工记录的成品计划,按照创建时间正序展示;
 * å„工序完成情况:按照工艺路线下的工序顺序展示,并展示当前工序的完成情况;完成情况=良品数/计划数;点击工序名称跳转到工序大屏
 * æœ€åŽä¸€åˆ—的良品数/完工数:为当前产品最后一道工序的良品数/完工数;
 */
public class WorkPlansPageModel {
    @ApiModelProperty(value = "良品数", example = "1")
    private BigDecimal qualifiedNum;
    @ApiModelProperty(value = "完工数量", example = "1")
    private BigDecimal doneNum;
    @ApiModelProperty(value = "计划数量", example = "1")
    private BigDecimal num;
    @ApiModelProperty(value = "计划编码", example = "1")
    private String  code;
    @ApiModelProperty(value = "物料编码")
    private String materialCode;
    @ApiModelProperty(value = "物料名称")
    private String materialName;
    @ApiModelProperty(value = "物流编码", example = "1")
    private Integer materialId;
    @ApiModelProperty(value = "计划编码", example = "1")
    private Integer id;
    @ApiModelProperty(value = "工艺路线编码", example = "1")
    private Integer routeId;
    @ApiModelProperty(value = "状态 0已生成、1已发布、2已撤回、3已取消、4已分配、5已暂停、6已完工、7已入库、8已关闭", example = "1")
    private Integer status;
    @ApiModelProperty(value = "工序集合", example = "1")
    private List<WorkPlansProcedureModel> procedureList;
}
server/src/main/java/doumeemes/dao/business/dto/statistics/WorkPlansProcedureModel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
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("大屏数据看板- æˆå“è®¡åˆ’进度-工序进度详情")
/**
 *  ç»Ÿè®¡èŒƒå›´ä¸ºã€å·²æŠ¥å·¥ã€‘状态的工单的报工数量;
 * åˆ—表展示状态为【执行中】或者【已完成】且当天有报工记录的成品计划,按照创建时间正序展示;
 * å„工序完成情况:按照工艺路线下的工序顺序展示,并展示当前工序的完成情况;完成情况=良品数/计划数;点击工序名称跳转到工序大屏
 * æœ€åŽä¸€åˆ—的良品数/完工数:为当前产品最后一道工序的良品数/完工数;
 */
public class WorkPlansProcedureModel {
    @ApiModelProperty(value = "工序名称", example = "1")
    private String procedureName;
    @ApiModelProperty(value = "完工率", example = "1")
    private BigDecimal rate;
    @ApiModelProperty(value = "工序编码", example = "1")
    private Integer procedureId;
}
server/src/main/java/doumeemes/dao/business/model/Plans.java
@@ -134,22 +134,18 @@
    @ApiModelProperty(value = "导入批号(关联plan_import表)", example = "1")
    @ExcelColumn(name="导入批号(关联plan_import表)")
    private Integer importId;
    @ApiModelProperty(value = "计划员编码(与system_user表关联)", example = "1")
    @ExcelColumn(name="计划员编码(与system_user表关联)")
    private Integer userId;
    @ApiModelProperty(value = "状态 0已生成、1已发布、2已撤回、3已取消、4已分配、5已暂停、6已完工、7已入库、8已关闭", example = "1")
    @ExcelColumn(name="状态 0已生成、1已发布、2已撤回、3已取消、4已分配、5已暂停、6已完工、7已入库、8已关闭")
    private Integer status;
    @ApiModelProperty(value = "计划类型 0正常1异常2返工", example = "1")
    @ExcelColumn(name="计划类型 0正常1异常2返工")
    private Integer type;
    @ApiModelProperty(value = "已报工数量", example = "1",hidden = true)
    @TableField(exist = false)
    private Integer baogongNum;
    @ApiModelProperty(value = "计划发布时间")
    @ExcelColumn(name="计划发布时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
server/src/main/java/doumeemes/dao/business/model/Workorder.java
@@ -144,7 +144,7 @@
    private Integer checkUserId;
    @ApiModelProperty(value = "工单状态 0已创建、1已备料、2已完工、3已检验、4已报工、5已入库、6已取消、7生产中", example = "1")
    @ExcelColumn(name="工单状态 0已创建、1已备料、2已完工、3已检验、4已报工、5已入库、6已取消、7生产中")
    @ExcelColumn(name="工单状态 0已创建、1已备料、2已完工、3已检验、4已报工、5已入库 ã€6已取消、7生产中")
    private Integer status;
    @ApiModelProperty(value = "是否暂停 0未暂停 1已暂停", example = "1")
    @ExcelColumn(name="是否暂停 0未暂停 1已暂停")
server/src/main/java/doumeemes/dao/ext/PlansExtMapper.java
@@ -1,5 +1,8 @@
package doumeemes.dao.ext;
import doumeemes.dao.business.dto.statistics.ProcedurePlansPageModel;
import doumeemes.dao.business.dto.statistics.ProcedureProcessModel;
import doumeemes.dao.business.dto.statistics.StatisticsPlanDataModel;
import doumeemes.dao.business.model.Plans;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import doumeemes.dao.ext.dto.QueryWOutboundExtDTO;
@@ -16,6 +19,8 @@
     * @date 2022/04/20 11:01
     */
    List<PlansExtListVO> selectList(QueryPlansExtDTO dto);
    List<ProcedureProcessModel> selectProcedureProcessList(QueryPlansExtDTO dto);
    List<ProcedurePlansPageModel> selectStatisticsList(QueryPlansExtDTO dto);
    int selectCount(QueryPlansExtDTO dto);
    void insertBatch(List<Plans> plansList);
@@ -24,4 +29,5 @@
    Integer selectCountToday(QueryPlansExtDTO w);
    StatisticsPlanDataModel getPlansStaticticsData(QueryPlansExtDTO param);
}
server/src/main/java/doumeemes/dao/ext/RouteProcedureExtMapper.java
@@ -21,4 +21,6 @@
    List<RouteProcedureExtListVO> selectListByNext(QueryRouteProcedureExtDTO dto);
    List<RouteProcedureExtListVO> selectStatisticsList(QueryRouteProcedureExtDTO r);
}
server/src/main/java/doumeemes/dao/ext/WorkPlansExtMapper.java
@@ -4,7 +4,9 @@
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.ProcedurePlansPageModel;
import doumeemes.dao.business.dto.statistics.StatisticsPlanDataModel;
import doumeemes.dao.business.dto.statistics.WorkPlansPageModel;
import doumeemes.dao.business.model.WorkPlans;
import doumeemes.dao.business.vo.WorkPlansVO;
import doumeemes.dao.ext.dto.QueryWorkPlansDTO;
@@ -32,6 +34,8 @@
    StatisticsPlanDataModel getPlansStaticticsData(QueryWorkPlansDTO workPlans);
    List<WorkPlansPageModel> selectStatisticsList(QueryWorkPlansExtDTO param);
//    @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,6 +1,8 @@
package doumeemes.dao.ext;
import doumeemes.dao.business.dto.statistics.RecordLogModel;
import doumeemes.dao.business.dto.statistics.Unqualified7DayModel;
import doumeemes.dao.business.dto.statistics.UnqualifiedCateModel;
import doumeemes.dao.business.dto.statistics.UserProduceTopModel;
import doumeemes.dao.business.model.WorkorderRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -42,4 +44,6 @@
    List<UserProduceTopModel> getUserProduceTopData(QueryWorkorderRecordExtDTO param);
    List<Unqualified7DayModel> getUnqualified7DayData(QueryWorkorderRecordExtDTO param);
    List<UnqualifiedCateModel> getUnqualifiedCateData(QueryWorkorderRecordExtDTO param);
    List<RecordLogModel> getRecordLog(QueryWorkorderRecordExtDTO param);
}
server/src/main/java/doumeemes/dao/ext/dto/QueryPlansExtDTO.java
@@ -428,6 +428,8 @@
    @ApiModelProperty(value = "系统用户信息表用户类型 0平台用户 1企业用户", example = "1")
    private Integer usermodelType;
    @ApiModelProperty(value = "查询标识 0大屏查询", example = "1")
    private Integer queryType;
    @ApiModelProperty(value = "工序编码集合", example = "1",hidden = true)
    private List<Integer> procedureIds;
server/src/main/java/doumeemes/dao/ext/dto/QueryRouteProcedureExtDTO.java
@@ -197,5 +197,7 @@
    @ApiModelProperty(value = "工序信息表设备收集层次 0设备 1组", example = "1")
    private Integer pmodelLevel;
    @ApiModelProperty(value = "成品计划编码", example = "1")
    private Integer workPlanId;
}
server/src/main/java/doumeemes/dao/ext/vo/RouteProcedureExtListVO.java
@@ -8,6 +8,8 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.math.BigDecimal;
import java.util.Date;
import java.io.Serializable;
@@ -68,6 +70,15 @@
    @ApiModelProperty(value = "工序数量", example = "1")
    @ExcelColumn(name="工序数量")
    private Integer procedureNum;
    @ApiModelProperty(value = "工序名称", example = "1")
    @ExcelColumn(name="工序名称")
    private String procedureName;
    @ApiModelProperty(value = "成品计划工序完工数量", example = "1")
    private BigDecimal doneNum;
    @ApiModelProperty(value = "成品计划工序计划数量", example = "1")
    private BigDecimal planNum;
    @ApiModelProperty(value = "成品计划工序完成良品数", example = "1")
    private BigDecimal qualifiedNum;
    @ApiModelProperty(value = "状态0.无效 1.有效", example = "1")
    @ExcelColumn(name="状态0.无效 1.有效")
server/src/main/java/doumeemes/service/ext/StatisticsService.java
@@ -1,20 +1,12 @@
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 doumeemes.dao.business.dto.statistics.*;
import doumeemes.dao.ext.dto.QueryDeviceCheckExtDTO;
import doumeemes.dao.ext.dto.QueryPlansExtDTO;
import doumeemes.dao.ext.dto.QueryWorkorderRecordExtDTO;
import doumeemes.dao.ext.vo.*;
import org.springframework.stereotype.Service;
import java.util.List;
@@ -30,6 +22,19 @@
    StatisticsPlanDataModel getPlansData(Integer companyId, Integer departId);
    List<UserProduceTopModel> getUserProduceTopData(Integer companyId, Integer departId);
    List<Unqualified7DayModel> getUnqualified7DayData(Integer companyId, Integer departId);
    List<UserProduceTopModel> getUserProduceTopData(Integer companyId, Integer departId, Integer procedureId);
    List<Unqualified7DayModel> getUnqualified7DayData(Integer companyId, Integer departId, Integer procedureId);
    List<UnqualifiedCateModel> getUnqualifiedCateData(Integer companyId, Integer departId, Integer procedureId);
    PageData<RecordLogModel> getRecordLogPage(Integer companyId, Integer departId, PageWrap<QueryWorkorderRecordExtDTO> pageWrap);
    PageData<DeviceCheckExtListVO> getDeviceCheckPage(Integer companyId, Integer departId,PageWrap<QueryDeviceCheckExtDTO> pageWrap);
    StatisticsPlanDataModel getProcedurePlanData(Integer companyId, Integer departId, Integer procedureId);
    List<ProcedurePlansPageModel> getProcedurePlansPage(Integer companyId, Integer departId, Integer procedureId);
    List<WorkPlansPageModel> getWorkPlansList(Integer companyId, Integer departId);
    List<ProcedureProcessModel> getProcedureProcessList(Integer companyId, Integer departId);
}
server/src/main/java/doumeemes/service/ext/impl/StatisticsServiceImpl.java
@@ -14,28 +14,19 @@
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.dto.statistics.*;
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 doumeemes.dao.ext.dto.*;
import doumeemes.dao.ext.vo.*;
import doumeemes.service.ext.*;
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.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -54,9 +45,17 @@
    @Autowired
    private WorkPlansExtMapper workPlansExtMapper;
    @Autowired
    private RouteProcedureExtMapper routeProcedureExtMapper;
    @Autowired
    private PlansExtMapper plansExtMapper;
    @Autowired
    private WorkorderRecordExtMapper workorderRecordExtMapper;
    @Autowired
    private DepartmentExtService departmentExtService;
    @Autowired
    private DeviceCheckExtService deviceCheckExtService;
    @Autowired
    private PlansExtService plansExtService;
    @Override
    public StatisticsPlanDataModel getPlansData(Integer companyId, Integer departId) {
@@ -69,7 +68,7 @@
        workPlans.setDepartId(departId);
        //查询统计结果
        StatisticsPlanDataModel model = workPlansExtMapper.getPlansStaticticsData(workPlans);
        model.setUnqualifiedNum(new BigDecimal(0));
        model.setUnqualifiedRate(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)));
@@ -77,13 +76,33 @@
        return  model;
    }
    @Override
    public List<UserProduceTopModel> getUserProduceTopData(Integer companyId, Integer departId) {
    public StatisticsPlanDataModel getProcedurePlanData(Integer companyId, Integer departId, Integer procedureId){
        DepartmentExtListVO department =   departmentExtService.getModelById(companyId,departId);
        if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员");
        }
        QueryPlansExtDTO param = new QueryPlansExtDTO();
        param.setRootDepartId(department.getRootId());
        param.setDepartId(departId);
        param.setProcedureId(procedureId);
        //查询统计结果
        StatisticsPlanDataModel model = plansExtMapper.getPlansStaticticsData(param);
        model.setUnqualifiedRate(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, Integer procedureId) {
        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.setProcedureId(procedureId);
        param.setDepartId(departId);
        //查询统计结果
        List<UserProduceTopModel> model = workorderRecordExtMapper.getUserProduceTopData(param);
@@ -91,7 +110,30 @@
        return  model;
    }
    @Override
    public List<Unqualified7DayModel> getUnqualified7DayData(Integer companyId, Integer departId) {
    public List<ProcedureProcessModel> getProcedureProcessList(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(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员");
        }
        QueryPlansExtDTO param = new QueryPlansExtDTO();
        param.setRootDepartId(department.getRootId());
        param.setDepartId(departId);
        //查询统计结果
        List<ProcedureProcessModel> result = plansExtMapper.selectProcedureProcessList(param);
        if(result !=null){
            for(ProcedureProcessModel model : result){
                //未完成数
                BigDecimal doneNum =Constants.formatBigdecimal(model.getUnqualifiedNum())
                        .add(Constants.formatBigdecimal(model.getQualifiedNum()));
                model.setUndoneNum(Constants.formatBigdecimal(model.getNum()).subtract(doneNum);
                //不良品率
                model.set
            }
        }
        return  result;
    }
    @Override
    public List<Unqualified7DayModel> getUnqualified7DayData(Integer companyId, Integer departId, Integer procedureId) {
        DepartmentExtListVO department =   departmentExtService.getModelById(companyId,departId);
        if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员");
@@ -99,6 +141,7 @@
        QueryWorkorderRecordExtDTO param = new QueryWorkorderRecordExtDTO();
        param.setRootDepartId(department.getRootId());
        param.setDepartId(departId);
        param.setProcedureId(procedureId);
        //查询统计结果
        List<Unqualified7DayModel> model = workorderRecordExtMapper.getUnqualified7DayData(param);
        List<Unqualified7DayModel> result = new ArrayList<>();
@@ -114,8 +157,129 @@
            result.add(m);
        }
        return  result;
    }
    @Override
    public List<UnqualifiedCateModel> getUnqualifiedCateData(Integer companyId, Integer departId, Integer procedureId) {
        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);
        param.setProcedureId(procedureId);
        //查询统计结果
        List<UnqualifiedCateModel> model = workorderRecordExtMapper.getUnqualifiedCateData(param);
        return  model;
    }
    @Override
    public PageData<RecordLogModel> getRecordLogPage(Integer companyId, Integer departId, PageWrap<QueryWorkorderRecordExtDTO> pageWrap){
        DepartmentExtListVO department =   departmentExtService.getModelById(companyId,departId);
        if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员");
        }
        //只能查看当前根组织的数据
        pageWrap.getModel().setRootDepartId(department.getRootId());
        pageWrap.getModel().setDepartId(departId);
        PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity());
        List<RecordLogModel> result = workorderRecordExtMapper.getRecordLog(pageWrap.getModel());
        if(result!=null){
            for(RecordLogModel model : result){
                model.setUnqualifiedNum(new BigDecimal(0));
                BigDecimal doneNum = Constants.formatBigdecimal(model.getUnqualifiedNum()).add(Constants.formatBigdecimal(model.getQualifiedNum()));
                if(model.getUnqualifiedNum() !=null && doneNum.compareTo(new BigDecimal(0)) != 0){
                    //不良品率
                    model.setUnqualifiedRate(model.getUnqualifiedNum().divide(doneNum,4).multiply(new BigDecimal(100)));
                }
            }
        }
        return PageData.from(new PageInfo<>(result));
    }
    @Override
    public   PageData<DeviceCheckExtListVO> getDeviceCheckPage(Integer companyId, Integer departId,PageWrap<QueryDeviceCheckExtDTO> pageWrap){
        DepartmentExtListVO department =   departmentExtService.getModelById(companyId,departId);
        if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员");
        }
        //只能查看当前根组织的数据
        pageWrap.getModel().setRootDepartId(department.getRootId());
        pageWrap.getModel().setComDepartId(departId);
        PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity());
        return deviceCheckExtService.findPage(pageWrap);
    }
    @Override
    public    List<ProcedurePlansPageModel> getProcedurePlansPage(Integer companyId, Integer departId,Integer procedureId){
        DepartmentExtListVO department =   departmentExtService.getModelById(companyId,departId);
        if(department == null || Constants.equalsInteger(department.getDeleted(), Constants.ONE)){
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员");
        }
        if(procedureId == null){
           throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"工序编码不能为空!");
        }
        QueryPlansExtDTO param = new QueryPlansExtDTO();
        param.setRootDepartId(department.getRootId());
        param.setDepartId(departId);
        param.setProcedureId(procedureId);
        List<ProcedurePlansPageModel> result = plansExtMapper.selectStatisticsList(param);
        if(result != null){
            for(ProcedurePlansPageModel model :result){
                model.setUnqualifiedRate(new BigDecimal(0));
                BigDecimal doneNum = Constants.formatBigdecimal(model.getQualifiedNum()).add(Constants.formatBigdecimal(model.getUnqualifiedNum()));
                if(model.getUnqualifiedNum() !=null && doneNum.compareTo(new BigDecimal(0)) != 0){
                    //不良品率
                    model.setUnqualifiedRate(model.getUnqualifiedNum().divide(doneNum,4).multiply(new BigDecimal(100)));
                    model.setUndoneNum(Constants.formatBigdecimal(model.getNum()).subtract(doneNum));
                }
            }
        }
        return result;
    }
    @Override
    public   List<WorkPlansPageModel> getWorkPlansList(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(),"对不起,企业或者部门信息不合法,如有疑问,请联系系统管理员");
        }
        QueryWorkPlansExtDTO param = new QueryWorkPlansExtDTO();
        param.setRootDepartId(department.getRootId());
        param.setDepartId(departId);
        List<WorkPlansPageModel> result = workPlansExtMapper.selectStatisticsList(param);
        if(result != null){
            for(WorkPlansPageModel model :result){
                if(model.getRouteId() ==null){
                    continue;
                }
                //查询工序集合和完成情况
                QueryRouteProcedureExtDTO r = new QueryRouteProcedureExtDTO();
                r.setRouteId(model.getRouteId());
                r.setDeleted(Constants.ZERO);
                List<RouteProcedureExtListVO> list = routeProcedureExtMapper.selectStatisticsList(r);
                List<WorkPlansProcedureModel> rList = new ArrayList<>();
                if(list != null){
                    for(RouteProcedureExtListVO t : list){
                        WorkPlansProcedureModel tt = new WorkPlansProcedureModel();
                        tt.setProcedureName(t.getProcedureName());
                        tt.setProcedureId(t.getProcedureId());
                        tt.setRate(new BigDecimal(0));
                        if(  Constants.formatBigdecimal(t.getPlanNum()).compareTo(new BigDecimal(0)) >0){
                            //完成率
                            tt.setRate(Constants.formatBigdecimal(t.getDoneNum()).divide(t.getPlanNum(),4).subtract(new BigDecimal(100)));
                        }
                        rList.add(tt);
                        //最后一列的良品数/完工数:为当前产品最后一道工序的良品数/完工数
                        model.setNum(t.getPlanNum());
                        model.setQualifiedNum(t.getDoneNum());
                    }
                }
                model.setProcedureList(rList);
            }
        }
        return result;
    }
    private Unqualified7DayModel getReusltModelByDate(Date td, List<Unqualified7DayModel> model ) {
        if(model !=null){
server/src/main/resources/mappers/PlansExtMapper.xml
@@ -287,8 +287,34 @@
    and to_days(`a`.`CREATE_TIME`)=to_days(now())
  </where>
  </select>
  <select id="selectProcedureProcessList" parameterType="doumeemes.dao.ext.dto.QueryPlansExtDTO" resultType="doumeemes.dao.business.dto.statistics.ProcedureProcessModel">
    select a.PROCEDURE_ID as procedureId,
    b.name as procedureName,
    sum(a.num) as num,
    count(DISTINCT(a.id)) as planCount,
    (select sum(d.QUALIFIED_NUM) from workorder_record d where d.DELETED=0 and d.PLAN_ID=a.id and d.TYPE=1) as qualifiedNum ,
    (select sum(d.UNQUALIFIED_NUM) from workorder_record d where d.DELETED=0 and d.PLAN_ID=a.id and d.TYPE=1) as unqualifiedNum
    from plans a
    left join procedures b on a.PROCEDURE_ID =b.ID
    where ( a.`STATUS` in (1,4) or a.`STATUS`=6 and EXISTS(select e.id from workorder_record e where e.PLAN_ID = a.id and TO_DAYS(now())=TO_DAYS(e.CREATE_TIME)))
    and a.ROOT_DEPART_ID=#{rootDepartId} and a.DEPART_ID=#{departId}
    and b.DELETED=0 and a.ROOT_DEPART_ID=132
    GROUP BY a.PROCEDURE_ID
    order by b.SORTNUM
  </select>
  <select id="selectStatisticsList" parameterType="doumeemes.dao.ext.dto.QueryPlansExtDTO" resultType="doumeemes.dao.business.dto.statistics.ProcedurePlansPageModel">
    select a.status,a.NUM,m.name as categoryName,m.code as materialCode
    ,(select sum(b.UNQUALIFIED_NUM) from workorder_record b where b.type=1 and b.DELETED=0 and b.PLAN_ID=a.id) as unqualifiedNum
    ,(select sum(b.QUALIFIED_NUM) from workorder_record b where b.type=1 and b.DELETED=0 and b.PLAN_ID=a.id) as qualifiedNum
    FROM `plans` `a`
    LEFT JOIN `material_distribute` c ON a.MATERIAL_ID=c.ID
    LEFT JOIN `material` m ON c.MATERIAL_ID=m.ID
    where (a.status in (1,4) or (a.status=6 and EXISTS(select b.id from workorder_record b where b.type=1 and b.DELETED=0 and b.PLAN_ID=a.id) ))
    and a.deleted=0 and a.ROOT_DEPART_ID=#{rootDepartId} and a.DEPART_ID=#{departId}
    order by a.CREATE_TIME
  </select>
  <select id="selectList" parameterType="doumeemes.dao.ext.dto.QueryPlansExtDTO" resultMap="PlansExtListVO">
    SELECT
  SELECT
      `a`.*,
      `dmodel`.`ID` AS DMODEL_ID,
      `dmodel`.`NAME` AS DMODEL_NAME,
@@ -1328,4 +1354,15 @@
           )
    </foreach>
  </insert>
  <select id="getPlansStaticticsData" parameterType="doumeemes.dao.ext.dto.QueryPlansExtDTO" resultType="doumeemes.dao.business.dto.statistics.StatisticsPlanDataModel">
    SELECT count(a.id) as ingNum,
    (select count(b.id)  FROM `plans` b where b.DELETED = 0 and b.PROCEDURE_ID=#{procedureId}  AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId}  AND  (b.`STATUS` in (1,4) 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.PROCEDURE_ID=#{procedureId}  AND 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.PROCEDURE_ID=#{procedureId}  AND 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.PROCEDURE_ID=#{procedureId}  AND b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId}  AND c.status=4) as unqualifiedNum,
    (select sum(ifnull(b.NUM,0))  FROM `workorder_record` b left join workorder c on b.workorder_id =c.id where b.PROCEDURE_ID=#{procedureId}  AND b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId}  AND c.status=4) as doneNum
    FROM `plans` `a`
    where
    a.DELETED = 0 AND a.ROOT_DEPART_ID = #{rootDepartId} AND a.DEPART_ID = #{departId} and a.PROCEDURE_ID=#{procedureId} AND a.`STATUS` in (1,4)
  </select>
</mapper>
server/src/main/resources/mappers/RouteProcedureExtMapper.xml
@@ -453,4 +453,14 @@
    </where>
    order by  `a`.`SORTNUM` asc
  </select>
  <select id="selectStatisticsList" parameterType="doumeemes.dao.ext.dto.QueryRouteProcedureExtDTO" resultMap="RouteProcedureExtListVO">
    SELECT a.*,p.`NAME` AS procedureName
    ,(select sum(b.num) from workorder_record b left join workorder d on b.workorder_id=d.id left join plans c on b.plan_id=c.id where d.status=4 and b.type=1 and b.deleted=0 and c.deleted=0  and b.procedure_id=p.id and c.work_plans_id=#{workPlanId}) as doneNum
    ,(select sum(b.qualified_num) from workorder_record b  left join workorder d on b.workorder_id=d.id  left join plans c on b.plan_id=c.id where d.status=4 and b.type=1 and b.deleted=0 and c.deleted=0  and b.procedure_id=p.id and c.work_plans_id=#{workPlanId}) as qualifiedNum
    ,(select sum(b.num) from plans b where b.deleted=0 and b.work_plans_id=#{workPlanId} and b.procedure_id=p.id) as plansNum
    FROM `route_procedure` `a`
    LEFT JOIN `procedures` `p` ON a.PROCEDURE_ID=p.ID
    where a.ROUTE_ID = #{routeId}
    order by  `a`.`SORTNUM` asc
  </select>
</mapper>
server/src/main/resources/mappers/WorkPlansExtMapper.xml
@@ -175,12 +175,26 @@
    (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.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 unqualifiedNum,
    (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="selectStatisticsList" parameterType="doumeemes.dao.ext.dto.QueryWorkPlansDTO" resultType="doumeemes.dao.business.dto.statistics.WorkPlansPageModel">
    select a.status,a.code,a.id,a.NUM,m.id as materialId,m.name as categoryName,m.code as materialCode
   <!-- ,(select sum(b.num) from workorder_record b left join plans c on b.PLAN_ID=c.id where b.type=1 and b.DELETED=0 and c.WORK_PLANS_ID=a.id) as doneNum
    ,(select sum(b.QUALIFIED_NUM) from workorder_record b left join plans c on b.PLAN_ID=c.id where b.type=1 and b.DELETED=0 and c.WORK_PLANS_ID=a.id) as qualifiedNum
    -->,(select b.route_id from bom b where b.MATERIAL_ID=c.id and b.ROOT_DEPART_ID=a.ROOT_DEPART_ID) as routeId
    FROM `work_plans` `a`
    LEFT JOIN `material_distribute` c ON a.MATERIAL_ID=c.ID
    LEFT JOIN `material` m ON c.MATERIAL_ID=m.ID
    where ( a.status = or (a.status=6 and EXISTS(select b.id from workorder_record b left join plans c on b.PLAN_ID=c.id where b.type=1 and b.DELETED=0 and c.WORK_PLANS_ID=a.id) ))
    and  a.deleted=0 and a.ROOT_DEPART_ID=#{rootDepartId} and a.DEPART_ID=#{departId}
    order by a.CREATE_TIME
  </select>
  <select id="getWorkPlansVODetail" parameterType="doumeemes.dao.ext.dto.QueryWorkPlansDTO" resultMap="WorkPlansVO">
server/src/main/resources/mappers/WorkorderRecordExtMapper.xml
@@ -469,7 +469,7 @@
  <select id="salaryStatistic" parameterType="doumeemes.dao.ext.dto.QuerySalaryStatisticDTO" resultType="doumeemes.dao.ext.vo.SalaryStatisticsListVO">
    select `CREATE_USER` as userId ,sum(CASE  WHEN salary_type=0 THEN salary ELSE 0 END ) as jijianSalary
    ,sum(CASE  WHEN salary_type=0 THEN  0 ELSE salary  END ) as jishiSalary
    ,count(id) as num
    ,count(distinct(a.workorder_id)) as num
    ,sum(salary) as totalSalary
    from `workorder_record`
    where `DELETED` =0 and `SALARY` >0
@@ -495,6 +495,9 @@
    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
    <if test="procedureId != null">
      AND  a.`PROCEDURE_ID` = #{procedureId}
    </if>
    GROUP BY a.CREATE_USER
    ORDER By doneNum desc
    limit 10
@@ -506,7 +509,41 @@
    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) )
    <if test="procedureId != null">
      AND  a.`PROCEDURE_ID` = #{procedureId}
    </if>
    GROUP BY TO_DAYS(a.CREATE_TIME )
  </select>
  <select id="getUnqualifiedCateData" parameterType="doumeemes.dao.ext.dto.QueryWorkorderRecordExtDTO"
          resultType="doumeemes.dao.business.dto.statistics.UnqualifiedCateModel">
    SELECT sum(b.UNQUALIFIED_NUM) as unqualifiedNum,d.`NAME` as categoryName
    from unqualified_record b
    left join workorder_record a on b.RECORD_ID=a.id
    left join workorder c on a.WORKORDER_ID=c.id
    left join category d on b.CATEGORY_ID=d.id
    where a.ROOT_DEPART_ID=#{rootDepartId} and a.DEPART_ID=#{departId}  and c.`STATUS`=4 and a.deleted=0
    and 7>TO_DAYS(now()) - TO_DAYS(a.CREATE_TIME )
    <if test="procedureId != null">
      AND  a.`PROCEDURE_ID` = #{procedureId}
    </if>
    GROUP BY TO_DAYS(d.ID )
    order by unqualifiedNum desc
    limit 6
  </select>
  <select id="getRecordLog" parameterType="doumeemes.dao.ext.dto.QueryWorkorderRecordExtDTO"
          resultType="doumeemes.dao.business.dto.statistics.RecordLogModel">
    select a.CREATE_TIME as createTime,a.UNQUALIFIED_NUM as unqualifiedNum,a.QUALIFIED_NUM as qualifiedNum,
    d.name as userName,c.name as materialName,c.code as materialCode
    from workorder_record a
    left join material_distribute b on a.MATERIAL_ID=b.ID
    left join material c on b.MATERIAL_ID=c.ID
    left join company_user d on d.DELETED=0 and d.user_id=a.CREATE_USER
    left JOIN workorder  e on e.id=a.WORKORDER_ID
    where a.DELETED = 0 AND a.ROOT_DEPART_ID=#{rootDepartId} and a.DEPART_ID=#{departId}  AND e.`STATUS` = 4
    <if test="procedureId != null">
      AND  a.`PROCEDURE_ID` = #{procedureId}
    </if>
    ORDER BY a.CREATE_TIME desc
  </select>
  <select id="selectListNew" parameterType="doumeemes.dao.ext.dto.QueryWorkorderRecordExtDTO" resultMap="WorkorderRecordExtListVO">