add质量问题统计表

master
yinq 2 years ago
parent 87a60bab94
commit ad96cfd928

@ -456,6 +456,20 @@ public class ReportController {
}
}
/**
*
* @param
* @return
*/
@PostMapping("/qualityProblemsInfoReport")
public R qualityProblemsInfoReport(@RequestParam(required = false) Map paramMap){
try {
return R.ok(reportService.qualityProblemsInfoReport(paramMap));
} catch (Exception e) {
return R.failed(e.getMessage());
}
}
/**
*
* @param
@ -470,6 +484,8 @@ public class ReportController {
}
}
/**
*
* @param

@ -218,4 +218,11 @@ public interface ReportMapper {
* @return
*/
List<Map<String, Object>> monthTimeStatisticsReport(Map paramMap);
/**
*
* @param paramMap
* @return
*/
List<Map<String, Object>> qualityProblemsInfoReport(Map paramMap);
}

@ -230,4 +230,10 @@ public interface ReportService {
*/
List<Map<String, Object>> monthTimeStatisticsReport(Map paramMap);
/**
*
* @param paramMap
* @return
*/
List<Map<String, Object>> qualityProblemsInfoReport(Map paramMap);
}

@ -32,6 +32,8 @@ import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import static com.foreverwin.mesnac.anomaly.utils.DateReportUtils.getMonthRemainingDays;
/**
* @Description TODO
* @Author zhaojiawei
@ -684,11 +686,12 @@ public class ReportServiceImpl implements ReportService {
}
int month = Calendar.getInstance().get(Calendar.MONTH) + 1;
List<Map<String, String>> result = reportMapper.monthLoadRateReport(paramMap);
Integer monthRemainingDays = getMonthRemainingDays();
for (Map<String, String> map : result) {
Float number = Float.valueOf(String.valueOf(map.get("workHours" + month))) + Float.valueOf(String.valueOf(map.get("tardinessWork")));
map.put("workHours" + month, String.format("%.2f",number));
if ((map.containsKey("monthCapacity"))){
map.put("monthRate" + month, String.format("%.2f",(number / Float.valueOf(String.valueOf(map.get("monthCapacity")))) * 100) + "%" );
if ((map.containsKey("dayCapacity"))){
map.put("monthRate" + month, String.format("%.2f",(number / (Float.valueOf(String.valueOf(map.get("dayCapacity")))) * monthRemainingDays) * 100) + "%" );
}else {
map.put("monthRate" + month, "0.00%");
}
@ -709,6 +712,8 @@ public class ReportServiceImpl implements ReportService {
Float workHours10 = 0.00f;
Float workHours11= 0.00f;
Float workHours12 = 0.00f;
Float currentCompletedWorkHours = 0.00f;
Float currentPlanWorkHours = 0.00f;
for (Map<String, String> map : result) {
tardinessWork += Float.valueOf(String.valueOf(map.get("tardinessWork")));
if (!StringUtils.isBlank(map.get("monthCapacity"))){
@ -726,6 +731,8 @@ public class ReportServiceImpl implements ReportService {
workHours10 += Float.valueOf(String.valueOf(map.get("workHours10")));
workHours11 += Float.valueOf(String.valueOf(map.get("workHours11")));
workHours12 += Float.valueOf(String.valueOf(map.get("workHours12")));
currentCompletedWorkHours += Float.valueOf(String.valueOf(map.get("currentCompletedWorkHours")));
currentPlanWorkHours += Float.valueOf(String.valueOf(map.get("currentPlanWorkHours")));
}
countMap.put("tardinessWork",String.format("%.2f",tardinessWork));
countMap.put("monthCapacity",String.format("%.2f",monthCapacity));
@ -753,6 +760,10 @@ public class ReportServiceImpl implements ReportService {
countMap.put("monthRate10",String.format("%.2f",workHours10 / monthCapacity * 100 ) + "%");
countMap.put("monthRate11",String.format("%.2f",workHours11 / monthCapacity * 100 ) + "%");
countMap.put("monthRate12",String.format("%.2f",workHours12 / monthCapacity * 100 ) + "%");
countMap.put("currentCompletedWorkHours",String.format("%.2f",currentCompletedWorkHours));
countMap.put("currentCompletedRate",String.format("%.2f",currentCompletedWorkHours / monthCapacity * 100 ) + "%");
countMap.put("currentPlanWorkHours",String.format("%.2f",currentPlanWorkHours));
result.add(countMap);
return result;
}
@ -1265,6 +1276,111 @@ public class ReportServiceImpl implements ReportService {
return reportMapper.monthTimeStatisticsReport(paramMap);
}
/**
*
* @param paramMap
* @return
*/
@Override
public List<Map<String, Object>> qualityProblemsInfoReport(Map paramMap) {
String site = CommonMethods.getSite();
paramMap.put("site", site);
paramMap.put("locale", LocaleContextHolder.getLocale().getLanguage());
List<Map<String, Object>> qualityInspectionReport = reportMapper.qualityProblemsInfoReport(paramMap);
//原因分类
Map<String, List<DataFieldList>> dataFieldListMap = new HashMap<>();
DataField dataField = new DataField();
dataField.setSite(site);
dataField.setDataField("REASON_CATEGORY");
List<DataFieldList> dataFieldList = dataFieldListMapper.findDataFieldList(dataField);
if (dataFieldList != null && dataFieldList.size() > 0) {
dataFieldListMap = dataFieldList.stream().collect(Collectors.groupingBy(DataFieldList::getDataValue));
}
for (int i = 0; i < qualityInspectionReport.size(); i++) {
Map<String, Object> temporaryMap = qualityInspectionReport.get(i);
String dutyCauseType = (String) temporaryMap.get("DUTY_CAUSE_TYPE");
if (StringUtils.isBlank(dutyCauseType)) {
qualityInspectionReport.get(i).put("DUTY_CAUSE_TYPE_DESCRIPTION", "");
continue;
}
String[] dutyCauseTypeSplit = dutyCauseType.split(",");
StringBuilder dutyCauseTypeDescription = new StringBuilder();
for (int j = 0; j < dutyCauseTypeSplit.length; j++) {
if (dataFieldListMap.get(dutyCauseTypeSplit[j]) != null) {
dutyCauseTypeDescription.append(dataFieldListMap.get(dutyCauseTypeSplit[j]).get(0).getDescription()).append(";");
}
}
qualityInspectionReport.get(i).put("DUTY_CAUSE_TYPE_DESCRIPTION", dutyCauseTypeDescription);
}
//返修工序内容
Map map = new HashMap();
map.put("site", site);
for (int i = 0; i < qualityInspectionReport.size(); i++) {
Map<String, Object> temporaryMap = qualityInspectionReport.get(i);
String routerBo = (String) temporaryMap.get("ROUTER_BO");
if(StringUtil.notBlank(routerBo)){
// map.put("abnormalBo", abnormalBo);
map.put("routerBo", routerBo);
List<Map<String, Object>> result = routerStepcontentService.selectDisRouterInfo(map);
String ReapirContent = "";
if (result != null && result.size() != 0) {
for (int j = 0; j < result.size(); j++) {
ReapirContent = ReapirContent + "【" + (String) result.get(j).get("STEP_ID") + "】" +
(String) result.get(j).get("ROUTER_STEP_CONTENT");
}
}
qualityInspectionReport.get(i).put("ROUTER_STEP_CONTENT", ReapirContent);
}
}
//责任分类
dataField.setDataField("RESPONSIBILITY_TYPE");
dataFieldList = dataFieldListMapper.findDataFieldList(dataField);
if (dataFieldList != null && dataFieldList.size() > 0) {
dataFieldListMap = dataFieldList.stream().collect(Collectors.groupingBy(DataFieldList::getDataValue));
}
for (int i = 0; i < qualityInspectionReport.size(); i++) {
Map<String, Object> temporaryMap = qualityInspectionReport.get(i);
String dutyType = (String) temporaryMap.get("DUTY_TYPE");
if (StringUtils.isBlank(dutyType)) {
qualityInspectionReport.get(i).put("DUTY_TYPE_DESCRIPTION", "");
continue;
}
String[] dutyTypeSplit = dutyType.split(",");
StringBuilder dutyTypeDescription = new StringBuilder();
for (int j = 0; j < dutyTypeSplit.length; j++) {
if (dataFieldListMap.get(dutyTypeSplit[j]) != null) {
dutyTypeDescription.append(dataFieldListMap.get(dutyTypeSplit[j]).get(0).getDescription()).append(";");
}
}
qualityInspectionReport.get(i).put("DUTY_TYPE_DESCRIPTION", dutyTypeDescription);
}
//责任部门
dataField.setDataField("RESPONSIBILITY_DEPARTMENT");
dataFieldList = dataFieldListMapper.findDataFieldList(dataField);
if (dataFieldList != null && dataFieldList.size() > 0) {
dataFieldListMap = dataFieldList.stream().collect(Collectors.groupingBy(DataFieldList::getDataValue));
}
for (int i = 0; i < qualityInspectionReport.size(); i++) {
Map<String, Object> temporaryMap = qualityInspectionReport.get(i);
String dutyDepart = (String) temporaryMap.get("DUTY_DEPART");
if (StringUtils.isBlank(dutyDepart)) {
qualityInspectionReport.get(i).put("DUTY_DEPART_DESCRIPTION", "");
continue;
}
String[] dutyDepartSplit = dutyDepart.split(",");
StringBuilder dutyDepartDescription = new StringBuilder();
for (int j = 0; j < dutyDepartSplit.length; j++) {
if (dataFieldListMap.get(dutyDepartSplit[j]) != null) {
dutyDepartDescription.append(dataFieldListMap.get(dutyDepartSplit[j]).get(0).getDescription()).append(";");
}
}
qualityInspectionReport.get(i).put("DUTY_DEPART_DESCRIPTION", dutyDepartDescription);
}
return qualityInspectionReport;
}
/**
*
* @param user

@ -1586,9 +1586,14 @@
<select id="monthLoadRateReport" resultType="java.util.HashMap" parameterType="java.util.HashMap">
--资源负荷率报表(月维度)
SELECT WIP.*,
CF.VALUE "monthCapacity",
WIP.RESOURCE_TYPE_DESCRIPTION "DESCRIPTION",
WIP.WORK_CENTER_DESCRIPTION "workCenterDescription",
CF.VALUE "monthCapacity",
CFD.VALUE "dayCapacity",
ZWIP.currentCompletedWorkHours "currentCompletedWorkHours",
TO_CHAR(DECODE(CF.VALUE, NULL, '0.00', ZWIP.currentCompletedWorkHours / CF.VALUE) * 100, '99990.99') ||
'%' "currentCompletedRate",
ZWIP.currentPlanWorkHours "currentPlanWorkHours",
WIP.RESOURCE_TYPE_DESCRIPTION "DESCRIPTION",
WIP.WORK_CENTER_DESCRIPTION "workCenterDescription",
TO_CHAR(DECODE(CF.VALUE,NULL,0, WIP."workHours1" / CF.VALUE) * 100, '99990.99') || '%' "monthRate1",
TO_CHAR(DECODE(CF.VALUE,NULL,0, WIP."workHours2" / CF.VALUE) * 100, '99990.99') || '%' "monthRate2",
TO_CHAR(DECODE(CF.VALUE,NULL,0, WIP."workHours3" / CF.VALUE) * 100, '99990.99') || '%' "monthRate3",
@ -1620,7 +1625,9 @@
SELECT O.OPERATION "operation",
OT.DESCRIPTION "operationDescription",
SUM(CASE
WHEN TO_DATE(trunc(sysdate,'month')) > (ZSD.PLANNED_COMP_DATE + 8/24) THEN ZSD.DISPATCH_QTY * ZSD.PROD_HOURS ELSE 0 END) "tardinessWork",
WHEN TO_DATE(TRUNC(SYSDATE)) > (ZSD.PLANNED_COMP_DATE + 8 / 24)
THEN ZSD.DISPATCH_QTY * ZSD.PROD_HOURS
ELSE 0 END) "tardinessWork",
SUM(CASE
WHEN (ZSD.PLANNED_COMP_DATE + 8/24) >= TO_DATE(MONTH.month0) AND (ZSD.PLANNED_COMP_DATE + 8/24) &lt; TO_DATE(MONTH.month1)
THEN ZSD.DISPATCH_QTY * ZSD.PROD_HOURS ELSE 0 END) "workHours1",
@ -1675,8 +1682,40 @@
ORDER BY O.OPERATION ASC ) WIP
LEFT JOIN OPERATION OP ON OP.OPERATION = WIP."operation" AND CURRENT_REVISION = 'true'
LEFT JOIN CUSTOM_FIELDS CF ON CF.ATTRIBUTE ='MONTH_CAPACITY' AND CF.HANDLE = OP.HANDLE
LEFT JOIN CUSTOM_FIELDS CFD ON CFD.ATTRIBUTE = 'DAY_CAPACITY' AND CFD.HANDLE = OP.HANDLE
LEFT JOIN (SELECT WCT.DESCRIPTION WCT_DESCRIPTION,
O.OPERATION OPERATION,
OT.DESCRIPTION OT_DESCRIPTION,
RT.DESCRIPTION RT_DESCRIPTION,
SUM(CASE
WHEN ZSD.DISPATCH_STATUS = 'COMPLETE' AND
to_char(add_months(last_day(sysdate) + 1, -1), 'yyyy-MM-dd') &lt;=
to_char(ZSD.ACTUAL_COMPLETE_DATE + 8 / 24, 'yyyy-MM-dd')
AND to_char(last_day(add_months(last_day(sysdate) + 1, -1)), 'yyyy-MM-dd') >=
to_char(ZSD.ACTUAL_COMPLETE_DATE + 8 / 24, 'yyyy-MM-dd')
THEN ZSD.DISPATCH_QTY * ZSD.PROD_HOURS
ELSE 0 END) currentCompletedWorkHours,
SUM(CASE
WHEN to_char(add_months(last_day(sysdate) + 1, -1), 'yyyy-MM-dd') &lt;=
to_char(ZSD.PLANNED_COMP_DATE + 8 / 24, 'yyyy-MM-dd')
AND to_char(last_day(add_months(last_day(sysdate) + 1, -1)), 'yyyy-MM-dd') >=
to_char(ZSD.PLANNED_COMP_DATE + 8 / 24, 'yyyy-MM-dd')
THEN ZSD.DISPATCH_QTY * ZSD.PROD_HOURS
ELSE 0 END) currentPlanWorkHours
FROM Z_SFC_DISPATCH ZSD
LEFT JOIN OPERATION O
ON O.OPERATION = ZSD.OPERATION AND O.SITE = ZSD.SITE AND
CURRENT_REVISION = 'true'
LEFT JOIN OPERATION_T OT ON O.HANDLE = OT.OPERATION_BO
LEFT JOIN WORK_CENTER WC ON WC.WORK_CENTER = ZSD.WORK_CENTER
LEFT JOIN WORK_CENTER_T WCT ON WCT.WORK_CENTER_BO = WC.HANDLE
LEFT JOIN RESOURCE_TYPE RT ON ZSD.RESOURCE_TYPE = RT.RESOURCE_TYPE
GROUP BY O.OPERATION, OT.DESCRIPTION, WCT.DESCRIPTION, RT.DESCRIPTION) ZWIP
ON ZWIP.WCT_DESCRIPTION = WIP.WORK_CENTER_DESCRIPTION
AND ZWIP.OPERATION = WIP."operation" AND ZWIP.OT_DESCRIPTION = WIP."operationDescription" AND
ZWIP.RT_DESCRIPTION = WIP.RESOURCE_TYPE_DESCRIPTION
<where>
1=1
WIP."operation" IS NOT NULL
<if test="operation != null and operation != ''">
AND WIP."operation" = #{operation}
</if>
@ -2367,5 +2406,99 @@
</if>
GROUP BY wct.DESCRIPTION, WIP.USER_NAME
</select>
<select id="qualityProblemsInfoReport" resultType="java.util.Map">
SELECT zab.CREATED_DATE_TIME,
zab.ABNORMAL_NO ABNORMAL_NO,
dflt.DATA_TAG PRODUCT_CATEGORY,
dflt2.DATA_TAG DISCOVER,
i.ITEM ITEM,
COALESCE(itemNumber.VALUE, zab.ITEM_NUMBER) ITEM_NUMBER,
zab.SHOP_ORDER,
zab.SFC,
it.DESCRIPTION ITEM_DESCRIPTION,
mapNo.VALUE MAP_NO,
zab.PB_DESCRIPTION PB_DESCRIPTION,
CASE
WHEN zab.SFC IS NOT NULL THEN '质量异常'
ELSE '外协质量异常'
END ABNORMAL_TYPE,
znu.FULL_NAME INSPECTOR,
zab.PB_GRADE PB_GRADE,
zabd.DUTY_TYPE DUTY_TYPE,
zabd.DUTY_DEPART DUTY_DEPART,
zabd.PRINCIPAL_USER PRINCIPAL_USER,
LISTAGG(nct.DESCRIPTION, ';') WITHIN GROUP (ORDER BY zab.ABNORMAL_NO) NC_CODE_DESCRIPTION,
zabd.DUTY_CAUSE_TYPE DUTY_CAUSE_TYPE,
zabd.DUTY_CAUSE_DESCRIPTION DUTY_CAUSE_DESCRIPTION,
zabd.BEFORE_MEASURE BEFORE_MEASURE,
CASE
WHEN zabd.ABNORMAL_METHOD = 'X' THEN '线下换料'
WHEN zabd.ABNORMAL_METHOD = 'S' THEN '试装'
WHEN zabd.ABNORMAL_METHOD = 'R' THEN '让步放行'
WHEN zabd.ABNORMAL_METHOD = 'C' THEN '报废'
WHEN zabd.ABNORMAL_METHOD = 'P' THEN '配作'
WHEN zabd.ABNORMAL_METHOD = 'F' THEN '返修'
WHEN zabd.ABNORMAL_METHOD = 'FW' THEN '返修(外协)'
WHEN zabd.ABNORMAL_METHOD = 'FB' THEN '返修(不返回原工艺)'
ELSE ''
END ABNORMAL_METHOD,
zabd.RESOLVE_REMARK RESOLVE_REMARK,
zabd.ROUTER_BO ROUTER_BO,
znu2.FULL_NAME RESOLVE_USER,
zabd.CLOSED_DATE_TIME CLOSED_DATE_TIME,
zab.NC_QTY NC_QTY,
zab.PB_QTY PB_QTY
FROM Z_ABNORMAL_BILL zab
INNER JOIN Z_ABNORMAL_BILL_DISPOSE zabd ON zab.HANDLE = zabd.ABNORMAL_BILL_BO
LEFT JOIN Z_ABNORMAL_NC_CODE zanc ON zab.HANDLE = zanc.ABNORMAL_BILL_BO
LEFT JOIN NC_CODE nc ON zanc.NC_CODE = nc.NC_CODE AND nc.SITE = zab.SITE
LEFT JOIN NC_CODE_T nct ON nct.NC_CODE_BO = nc.HANDLE
INNER JOIN ITEM i ON i.HANDLE = zab.ITEM_BO
LEFT JOIN ITEM_T it ON it.ITEM_BO = i.HANDLE
INNER JOIN DATA_FIELD df ON df.DATA_FIELD = 'PRODUCT_CATEGORY'
LEFT JOIN DATA_FIELD_LIST dfl ON dfl.DATA_FIELD_BO = df.HANDLE AND dfl.DATA_VALUE = zab.PRODUCT_CATEGORY
LEFT JOIN DATA_FIELD_LIST_T dflt ON dflt.DATA_FIELD_LIST_BO = dfl.HANDLE
INNER JOIN DATA_FIELD df2 ON df2.DATA_FIELD = 'DISCOVER'
LEFT JOIN DATA_FIELD_LIST dfl2 ON dfl2.DATA_FIELD_BO = df2.HANDLE AND dfl2.DATA_VALUE = zab.DISCOVER
LEFT JOIN DATA_FIELD_LIST_T dflt2 ON dflt2.DATA_FIELD_LIST_BO = dfl2.HANDLE
LEFT JOIN CUSTOM_FIELDS mapNo ON mapNo."ATTRIBUTE" = 'DWG_NO' AND mapNo.HANDLE = i.HANDLE
LEFT JOIN SHOP_ORDER so ON so.SHOP_ORDER = zab.SHOP_ORDER AND so.SITE = zab.SITE
LEFT JOIN CUSTOM_FIELDS itemNumber ON itemNumber.HANDLE = so.HANDLE AND itemNumber."ATTRIBUTE" = 'ITEM_NUMBER'
LEFT JOIN Z_NWA_USER znu ON znu.USER_NAME = zab.CREATED_USER AND znu.SITE = zab.SITE
LEFT JOIN Z_NWA_USER znu2 ON znu2.USER_NAME = zabd.RESOLVE_USER AND znu2.SITE = zab.SITE
<where>
zab.SITE = #{site} AND zab."TYPE" ='Z'
<if test="abnormalNo != null and abnormalNo != ''">
AND zab.ABNORMAL_NO = #{abnormalNo}
</if>
<if test="shopOrder != null and shopOrder != ''">
AND so.SHOP_ORDER = #{shopOrder}
</if>
<if test="productCategory != null and productCategory != ''">
AND (dflt.DATA_TAG = #{productCategory} OR
zab.PRODUCT_CATEGORY = #{productCategory}
)
</if>
<if test="discover != null and discover != ''">
AND zab.DISCOVER = #{discover}
</if>
<if test="createdUser != null and createdUser != ''">
AND (zab.CREATED_USER = #{createdUser} OR znu.FULL_NAME = #{createdUser})
</if>
<if test="startDateTime != null and startDateTime != ''">
AND zab.CREATED_DATE_TIME &gt;= TO_DATE(#{startDateTime},'YYYY-MM-DD') - 8/24
</if>
<if test="endDateTime != null and endDateTime != ''">
AND zab.CREATED_DATE_TIME &lt;= TO_DATE(#{endDateTime}|| '15:59:59','YYYY-MM-DD HH24:MI:SS')
</if>
</where>
GROUP BY zab.CREATED_DATE_TIME, zab.ABNORMAL_NO, i.ITEM, it.DESCRIPTION, itemNumber.VALUE, zab.ITEM_NUMBER, mapNo.VALUE,
zab.PB_DESCRIPTION, zabd.DUTY_DEPART, zabd.PRINCIPAL_USER, zab.PB_GRADE, zabd.DUTY_CAUSE_DESCRIPTION,
zabd.BEFORE_MEASURE, ABNORMAL_METHOD,
zabd.RESOLVE_REMARK, zabd.RESOLVE_USER, zabd.CLOSED_DATE_TIME, zab.NC_QTY, zab.PB_QTY, zab.SHOP_ORDER,
so.QTY_TO_BUILD, dflt.DATA_TAG, zabd.DUTY_CAUSE_TYPE, zabd.DUTY_TYPE, zabd.DUTY_DEPART, zab.SFC, znu.FULL_NAME,
znu2.FULL_NAME, dflt2.DATA_TAG, zabd.ROUTER_BO
ORDER BY zab.CREATED_DATE_TIME DESC
</select>
</mapper>
Loading…
Cancel
Save