Browse Source

[fix]

品质管理 品质单
修改来料品质单列表页面委外品质跳转页面;
修改委外品质单开始品质页面,实现新版效果;
修改品质单委外开始品质controller,去除多余接口;
修改更新审批通过采购品质报告service方法,添加委外类型处理;
修改品质报告审批完成任务controller,添加委外审批通过更新语句;
dev
王晓迪 3 months ago
parent
commit
d49776afb7
  1. 41
      ruoyi-admin/src/main/java/com/ruoyi/quality/controller/QualityOrderController.java
  2. 3
      ruoyi-admin/src/main/java/com/ruoyi/quality/controller/QualityOrderReportController.java
  3. 128
      ruoyi-admin/src/main/java/com/ruoyi/quality/service/impl/QualityOrderReportServiceImpl.java
  4. 2
      ruoyi-admin/src/main/resources/templates/quality/iqcQualityOrder/iqcQualityOrder.html
  5. 481
      ruoyi-admin/src/main/resources/templates/quality/qualityOrder/makeOutStartingQuality.html

41
ruoyi-admin/src/main/java/com/ruoyi/quality/controller/QualityOrderController.java

@ -362,16 +362,6 @@ public class QualityOrderController extends BaseController
return toAjax(orderReportService.updateMakeInOrderReport(qualityOrderReport)); return toAjax(orderReportService.updateMakeInOrderReport(qualityOrderReport));
} }
/**
* 委外加工品质单开始品质
*/
@GetMapping("/makeOutStartingQuality/{qualityOrderId}")
public String makeOStartingQuality(@PathVariable("qualityOrderId") Long qualityOrderId, ModelMap mmap)
{
QualityOrder qualityOrder = qualityOrderService.selectQualityOrderById(qualityOrderId);
mmap.put("qualityOrder", qualityOrder);
return prefix + "/makeOutStartingQuality";
}
/** /**
* 修改保存委外加工品质单开始品质 * 修改保存委外加工品质单开始品质
*/ */
@ -393,19 +383,6 @@ public class QualityOrderController extends BaseController
mmap.put("qualityOrder", qualityOrder); mmap.put("qualityOrder", qualityOrder);
return prefix + "/makeOutStartingQualityDetail"; return prefix + "/makeOutStartingQualityDetail";
} }
/**
* 修改委外加工入库单品质报告按钮
*/
@GetMapping("/makeOutOrderReport")
public String makeOutOrderReport( @RequestParam("materialNo") String materialNo,
@RequestParam("qualityOrderCode") String qualityOrderCode,
ModelMap mmap)
{
QualityOrderReport qualityOrderReport = orderReportService.selectMakeInOrderReportByNoAndCode(materialNo,qualityOrderCode);
mmap.put("qualityOrderReport", qualityOrderReport);
mmap.put("qualityOrderCode",qualityOrderCode);
return prefix + "/makeOutOrderReport";
}
/** /**
* 修改保存委外加工入库单品质报告按钮 * 修改保存委外加工入库单品质报告按钮
@ -476,22 +453,18 @@ public class QualityOrderController extends BaseController
return toAjax(qualityOrderService.qualityOrderDetailSave(qualityOrder)); return toAjax(qualityOrderService.qualityOrderDetailSave(qualityOrder));
} }
/** /**
* 修改委生产入库品质报告按钮 * 委外入库开始品质
*/ */
@GetMapping("/makeOrderReport") @GetMapping("/makeOutStartingQuality/{qualityOrderId}")
public String makeOrderReport( @RequestParam("materialNo") String materialNo, public String makeOutStartingQuality(@PathVariable("qualityOrderId") Long qualityOrderId, ModelMap mmap)
@RequestParam("qualityOrderCode") String qualityOrderCode,
ModelMap mmap)
{ {
QualityOrderReport qualityOrderReport = orderReportService.selectMakeInOrderReportByNoAndCode(materialNo,qualityOrderCode); QualityOrder qualityOrder = qualityOrderService.selectQualityOrderById(qualityOrderId);
mmap.put("qualityOrderReport", qualityOrderReport); mmap.put("qualityOrder", qualityOrder);
mmap.put("qualityOrderCode",qualityOrderCode); return prefix + "/makeOutStartingQuality";
return prefix + "/makeOrderReport";
} }
/** /**
* 修改保存生产入库品质报告按钮 * 修改保存生产入库品质报告按钮
*/ */

3
ruoyi-admin/src/main/java/com/ruoyi/quality/controller/QualityOrderReportController.java

@ -211,7 +211,8 @@ public class QualityOrderReportController extends BaseController
||tempQualityReport.getQualityOrderReportType().equals("1")){ ||tempQualityReport.getQualityOrderReportType().equals("1")){
qualityOrderReportService.updateApprovedInfo(tempQualityReport); qualityOrderReportService.updateApprovedInfo(tempQualityReport);
} }
if(tempQualityReport.getQualityOrderReportType().equals("2")){//采购品质审批 if(tempQualityReport.getQualityOrderReportType().equals("2")
||tempQualityReport.getQualityOrderReportType().equals("3")){//采购品质审批,委外品质审批
qualityOrderReportService.updatePurchaseApprovedInfo(tempQualityReport); qualityOrderReportService.updatePurchaseApprovedInfo(tempQualityReport);
} }
} }

128
ruoyi-admin/src/main/java/com/ruoyi/quality/service/impl/QualityOrderReportServiceImpl.java

@ -292,6 +292,7 @@ public class QualityOrderReportServiceImpl implements IQualityOrderReportService
} }
} }
qualityOrderReportVO.setDeliveryInspectionTime(qualityOrderDetail.getDeliveryInspectionTime());
qualityOrderReportVO.setQualityHasqualifiedNum(qualifiedNum); qualityOrderReportVO.setQualityHasqualifiedNum(qualifiedNum);
qualityOrderReportVO.setCheckNum(pendingReviewNum); qualityOrderReportVO.setCheckNum(pendingReviewNum);
qualityOrderReportVO.setQualityOrderReportCode(qualityReportCode); qualityOrderReportVO.setQualityOrderReportCode(qualityReportCode);
@ -437,7 +438,8 @@ public class QualityOrderReportServiceImpl implements IQualityOrderReportService
updateApprovedInfo(qualityOrderReportVO); updateApprovedInfo(qualityOrderReportVO);
} }
//采购品质 //采购品质
if(qualityOrderReportVO.getQualityOrderReportType().equals("2")){ if(qualityOrderReportVO.getQualityOrderReportType().equals("2")
||qualityOrderReportVO.getQualityOrderReportType().equals("3")){
updatePurchaseApprovedInfo(qualityOrderReportVO); updatePurchaseApprovedInfo(qualityOrderReportVO);
} }
} }
@ -737,6 +739,7 @@ public class QualityOrderReportServiceImpl implements IQualityOrderReportService
storageOrder.setQualityUnqualifiedNum(qualityReportVO.getProcessBadNum()); storageOrder.setQualityUnqualifiedNum(qualityReportVO.getProcessBadNum());
storageOrder.setDeliveryInspectionTime(qualityReportVO.getDeliveryInspectionTime()); storageOrder.setDeliveryInspectionTime(qualityReportVO.getDeliveryInspectionTime());
storageOrder.setQualityTime(qualityReportVO.getCheckoutCompletionTime()); storageOrder.setQualityTime(qualityReportVO.getCheckoutCompletionTime());
storageOrder.setStorageNum(0);
storageOrder.setArrivedTime(DateUtils.getNowDate()); storageOrder.setArrivedTime(DateUtils.getNowDate());
storageOrder.setCreateBy(ShiroUtils.getLoginName()); storageOrder.setCreateBy(ShiroUtils.getLoginName());
storageOrder.setCreateTime(DateUtils.getNowDate()); storageOrder.setCreateTime(DateUtils.getNowDate());
@ -765,6 +768,7 @@ public class QualityOrderReportServiceImpl implements IQualityOrderReportService
storageOrderDetail.setMaterialProcessMethod(qualityOrderDetail.getMaterialProcessMethod()); storageOrderDetail.setMaterialProcessMethod(qualityOrderDetail.getMaterialProcessMethod());
storageOrderDetail.setMaterialDeptType(qualityOrderDetail.getMaterialDeptType()); storageOrderDetail.setMaterialDeptType(qualityOrderDetail.getMaterialDeptType());
storageOrderDetail.setMakeTotal(qualityOrderDetail.getMakeTotal()); storageOrderDetail.setMakeTotal(qualityOrderDetail.getMakeTotal());
storageOrderDetail.setHasStorageNum(0);//已入库数0
storageOrderDetail.setArrivedTime(DateUtils.getNowDate()); storageOrderDetail.setArrivedTime(DateUtils.getNowDate());
storageOrderDetail.setCreateBy(ShiroUtils.getLoginName()); storageOrderDetail.setCreateBy(ShiroUtils.getLoginName());
storageOrderDetail.setCreateTime(DateUtils.getNowDate()); storageOrderDetail.setCreateTime(DateUtils.getNowDate());
@ -772,7 +776,7 @@ public class QualityOrderReportServiceImpl implements IQualityOrderReportService
} }
/* /*
* 审核通过后更新数据(采购入库) * 审核通过后更新数据(采购入库(有退换货),委外入库跳过退换货)
* 来料品质更新品质单表品质单详情表入库单*/ * 来料品质更新品质单表品质单详情表入库单*/
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
@ -887,72 +891,74 @@ public class QualityOrderReportServiceImpl implements IQualityOrderReportService
storageOrder.setQualityTime(qualityOrderReportVO.getCheckoutCompletionTime()); storageOrder.setQualityTime(qualityOrderReportVO.getCheckoutCompletionTime());
storageOrderMapper.updateWarehouseStorageOrder(storageOrder); storageOrderMapper.updateWarehouseStorageOrder(storageOrder);
//不合格数大于0生成退换货单 if(qualityOrderReportVO.getQualityOrderReportType().equals("2")){
if(unQualifiedNum > 0){ //不合格数大于0生成退换货单
String refundsCodes = redisCache.generateBillNo("THH"); if(unQualifiedNum > 0){
QualityRefundsExchanges refundsExchanges = generateQualityRefundsExchange(qualityOrderReportVO,refundsCodes); String refundsCodes = redisCache.generateBillNo("THH");
QualityRefundsExchanges refundsExchanges = generateQualityRefundsExchange(qualityOrderReportVO,refundsCodes);
//生成退换货入库单和退换货入库详情 //生成退换货入库单和退换货入库详情
WarehouseStorageOrder refundStorageOrder = generateWarehouseStorageOrder(refundsCodes,qualityOrderReportVO); WarehouseStorageOrder refundStorageOrder = generateWarehouseStorageOrder(refundsCodes,qualityOrderReportVO);
WarehouseStorageOrderDetail refundStorageOrderDetail = generateWarehouseStorageOrderDetail(refundStorageOrder.getWarehouseStorageCode(),refundsCodes,qualityOrderDetail); WarehouseStorageOrderDetail refundStorageOrderDetail = generateWarehouseStorageOrderDetail(refundStorageOrder.getWarehouseStorageCode(),refundsCodes,qualityOrderDetail);
if(qualityOrderReportVO.getQualityOrderReportType().equals("2")){//采购品质 if(qualityOrderReportVO.getQualityOrderReportType().equals("2")){//采购品质
refundStorageOrder.setWarehouseOrderType("2");//退换货订单 refundStorageOrder.setWarehouseOrderType("2");//退换货订单
refundStorageOrderDetail.setWarehouseOrderType("2");//退换货订单 refundStorageOrderDetail.setWarehouseOrderType("2");//退换货订单
} }
int refundStorageDetailResult = storageDetailMapper.insertWarehouseStorageOrderDetail(refundStorageOrderDetail); int refundStorageDetailResult = storageDetailMapper.insertWarehouseStorageOrderDetail(refundStorageOrderDetail);
if(refundStorageDetailResult<=0){ if(refundStorageDetailResult<=0){
throw new BusinessException("新增退换货入库单详情失败"); throw new BusinessException("新增退换货入库单详情失败");
} }
int storageResult = storageOrderMapper.insertWarehouseStorageOrder(refundStorageOrder); int storageResult = storageOrderMapper.insertWarehouseStorageOrder(refundStorageOrder);
if(storageResult<=0){ if(storageResult<=0){
throw new BusinessException("新增退换货入库单失败"); throw new BusinessException("新增退换货入库单失败");
} }
//生成退换货详情 //生成退换货详情
QualityRefundsExchangesDetail refundsExchangesDetail = generateRefundsExchangesDetail(refundsCodes,qualityOrderDetail,refundStorageOrder.getWarehouseStorageCode()); QualityRefundsExchangesDetail refundsExchangesDetail = generateRefundsExchangesDetail(refundsCodes,qualityOrderDetail,refundStorageOrder.getWarehouseStorageCode());
//生成退换货单报告 //生成退换货单报告
QualityRefundsExchangesOrder refundsExchangesOrder = generateQualityRefundsExchangesOrder(refundsExchanges.getRefundsExchangesCode(),qualityOrderReportVO,qualityOrderDetail); QualityRefundsExchangesOrder refundsExchangesOrder = generateQualityRefundsExchangesOrder(refundsExchanges.getRefundsExchangesCode(),qualityOrderReportVO,qualityOrderDetail);
//新增退换货单不良分类 //新增退换货单不良分类
QualityOrderReportUnqualified tempUnqualify = new QualityOrderReportUnqualified(); QualityOrderReportUnqualified tempUnqualify = new QualityOrderReportUnqualified();
tempUnqualify.setQualityOrderReportCode(qualityOrderReportVO.getQualityOrderReportCode()); tempUnqualify.setQualityOrderReportCode(qualityOrderReportVO.getQualityOrderReportCode());
List<QualityOrderReportUnqualified> unqualifieds = unqualifiedMapper.selectQualityOrderReportUnqualifiedList(tempUnqualify); List<QualityOrderReportUnqualified> unqualifieds = unqualifiedMapper.selectQualityOrderReportUnqualifiedList(tempUnqualify);
if(StringUtils.isEmpty(unqualifieds)){ if(StringUtils.isEmpty(unqualifieds)){
throw new BusinessException("品质报告不良分类为空!"); throw new BusinessException("品质报告不良分类为空!");
} }
for (QualityOrderReportUnqualified unqualify:unqualifieds) { for (QualityOrderReportUnqualified unqualify:unqualifieds) {
QualityRefundsExchangesUnqualified exchangesUnqualified = new QualityRefundsExchangesUnqualified(); QualityRefundsExchangesUnqualified exchangesUnqualified = new QualityRefundsExchangesUnqualified();
exchangesUnqualified.setRefundsExchangesCode(refundsExchanges.getRefundsExchangesCode()); exchangesUnqualified.setRefundsExchangesCode(refundsExchanges.getRefundsExchangesCode());
exchangesUnqualified.setMaterialNo(qualityOrderReportVO.getMaterialNo()); exchangesUnqualified.setMaterialNo(qualityOrderReportVO.getMaterialNo());
exchangesUnqualified.setMaterialName(qualityOrderReportVO.getMaterialName()); exchangesUnqualified.setMaterialName(qualityOrderReportVO.getMaterialName());
exchangesUnqualified.setProcessBadClassification(unqualify.getProcessBadClassification()); exchangesUnqualified.setProcessBadClassification(unqualify.getProcessBadClassification());
exchangesUnqualified.setProcessBadGrade(unqualify.getProcessBadGrade()); exchangesUnqualified.setProcessBadGrade(unqualify.getProcessBadGrade());
exchangesUnqualified.setProcessBadNum(unqualify.getProcessBadNum()); exchangesUnqualified.setProcessBadNum(unqualify.getProcessBadNum());
exchangesUnqualified.setUnqualifiedReportUrl(unqualify.getUnqualifiedReportUrl()); exchangesUnqualified.setUnqualifiedReportUrl(unqualify.getUnqualifiedReportUrl());
exchangesUnqualified.setInspectionTime(qualityOrderReportVO.getDeliveryInspectionTime()); exchangesUnqualified.setInspectionTime(qualityOrderReportVO.getDeliveryInspectionTime());
exchangesUnqualified.setCreateBy(ShiroUtils.getLoginName()); exchangesUnqualified.setCreateBy(ShiroUtils.getLoginName());
exchangesUnqualified.setCreateTime(DateUtils.getNowDate()); exchangesUnqualified.setCreateTime(DateUtils.getNowDate());
int exchangeUnqualifiedResult = exchangesUnqualifiedMapper.insertQualityRefundsExchangesUnqualified(exchangesUnqualified); int exchangeUnqualifiedResult = exchangesUnqualifiedMapper.insertQualityRefundsExchangesUnqualified(exchangesUnqualified);
if (exchangeUnqualifiedResult <= 0){ if (exchangeUnqualifiedResult <= 0){
throw new BusinessException("插入退换货品质报告不合格分类失败,未影响任何行"); throw new BusinessException("插入退换货品质报告不合格分类失败,未影响任何行");
}
} }
}
int exchangeOrderResult = refundsExchangesOrderMapper.insertQualityRefundsExchangesOrder(refundsExchangesOrder); int exchangeOrderResult = refundsExchangesOrderMapper.insertQualityRefundsExchangesOrder(refundsExchangesOrder);
if(exchangeOrderResult<=0){ if(exchangeOrderResult<=0){
throw new BusinessException("新增退换货单报告失败"); throw new BusinessException("新增退换货单报告失败");
} }
int exchangeDetailResult = refundsExchangesDetailMapper.insertQualityRefundsExchangesDetail(refundsExchangesDetail); int exchangeDetailResult = refundsExchangesDetailMapper.insertQualityRefundsExchangesDetail(refundsExchangesDetail);
if(exchangeDetailResult<=0){ if(exchangeDetailResult<=0){
throw new BusinessException("新增退换货单详情失败"); throw new BusinessException("新增退换货单详情失败");
} }
int exchangeResult = refundsExchangesMapper.insertQualityRefundsExchanges(refundsExchanges); int exchangeResult = refundsExchangesMapper.insertQualityRefundsExchanges(refundsExchanges);
if(exchangeResult<=0){ if(exchangeResult<=0){
throw new BusinessException("新增退换货单失败"); throw new BusinessException("新增退换货单失败");
} }
}
} }
} }

2
ruoyi-admin/src/main/resources/templates/quality/iqcQualityOrder/iqcQualityOrder.html

@ -224,7 +224,7 @@
} }
//委外品质 //委外品质
function makeOutStartingQuality(qualityOrderId){ function makeOutStartingQuality(qualityOrderId){
var url = ctx +'quality/qualityOrder/makeOtherStartingQuality/' + qualityOrderId; var url = ctx +'quality/qualityOrder/makeOutStartingQuality/' + qualityOrderId;
$.modal.open("进行委外入库品质",url); $.modal.open("进行委外入库品质",url);
} }

481
ruoyi-admin/src/main/resources/templates/quality/qualityOrder/makeOutStartingQuality.html

@ -1,65 +1,162 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" > <html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head> <head>
<th:block th:include="include :: header('委外加工单品质')" /> <th:block th:include="include :: header('委外入库品质')" />
<th:block th:include="include :: datetimepicker-css" /> <th:block th:include="include :: datetimepicker-css" />
<th:block th:include="include :: bootstrap-editable-css" />
</head> </head>
<style>
.fixed-table-container {
border: 0px solid #ddd;
min-height: 200px;
}
#materialTable .fixed-table-container{
border: 0px solid #ddd;
min-height: 90px;
}
</style>
<body class="white-bg"> <body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content"> <div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-makeInStartingQuality-edit" th:object="${qualityOrder}"> <form class="form-horizontal m" id="form-makeInStartingQuality-edit" th:object="${qualityOrder}">
<input name="qualityOrderId" th:field="*{qualityOrderId}" type="hidden"> <input name="qualityOrderId" th:field="*{qualityOrderId}" type="hidden">
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">品质单号:</label> <label class="col-sm-4 control-label">品质单号:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="qualityOrderCode" th:field="*{qualityOrderCode}" class="form-control" type="text"> <input readonly name="qualityOrderCode" th:field="*{qualityOrderCode}" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">入库单号:</label> <label class="col-sm-4 control-label">入库单号:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="inStorageCode" th:field="*{inStorageCode}" class="form-control" type="text"> <input readonly name="inStorageCode" th:field="*{inStorageCode}" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">关联订单号:</label> <label class="col-sm-4 control-label">关联订单号:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input name="relatedOrderCode" th:field="*{relatedOrderCode}" class="form-control" type="text"> <input readonly name="relatedOrderCode" th:field="*{relatedOrderCode}" class="form-control" type="text">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">品质单订单类型:</label> <label class="col-sm-4 control-label">品质单订单类型:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<select name="qualityOrderType" class="form-control m-b" th:with="type=${@dict.getType('quality_order_type')}"> <select disabled id="qualityOrderType" name="qualityOrderType" class="form-control m-b" th:with="type=${@dict.getType('quality_order_type')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}" th:field="*{qualityOrderType}"></option> <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}" th:field="*{qualityOrderType}"></option>
</select> </select>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">品质单入库类型:</label> <label class="col-sm-4 control-label">品质单入库类型:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<select name="qualityStorageStatus" class="form-control m-b" th:with="type=${@dict.getType('quality_storage_status')}"> <select disabled id="qualityStorageStatus" name="qualityStorageStatus" class="form-control m-b" th:with="type=${@dict.getType('quality_storage_status')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}" th:field="*{qualityStorageStatus}"></option> <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}" th:field="*{qualityStorageStatus}"></option>
</select> </select>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label class="col-sm-3 control-label">交付质检时间:</label> <label class="col-sm-4 control-label">交付质检时间:</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="input-group date"> <div class="input-group date">
<input name="deliveryInspectionTime" th:value="${#dates.format(qualityOrder.deliveryInspectionTime, 'yyyy-MM-dd')}" class="form-control" placeholder="yyyy-MM-dd" type="text"> <input disabled name="deliveryInspectionTime" th:value="${#dates.format(qualityOrder.deliveryInspectionTime, 'yyyy-MM-dd')}" class="form-control" placeholder="yyyy-MM-dd" type="text">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span> <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
</div> </div>
</div> </div>
</div> </div>
</form>
<!--物料信息--> <!--物料信息-->
<div class="container"> <div class="container" >
<div class="row"> <div class="row">
<div class="col-sm-12 select-table table-striped"> <div class="col-sm-12" id="materialTable" style="height: 100px;padding-left: 50px;">
<table id="bootstrap-table"></table> <table id="bootstrap-material-table"></table>
</div>
</div>
</div>
<div class="container">
<h3 style="color: blue;">品质报告:</h3>
<div class="col-sm-12">
<h3>合格数</h3>
<div class="row">
<div class="form-group col-sm-6">
<label class="col-sm-4 control-label is-required">ok允收数:</label>
<div class="col-sm-8">
<input id="okAcceptedNum" name="okAcceptedNum" class="form-control" type="number" value="0" required>
</div>
</div>
<div class="form-group col-sm-6">
<label class="col-sm-4 control-label">ok报告图片:</label>
<div class="col-sm-8">
<input name="okReportUrl" class="form-control" type="text">
</div>
</div>
</div>
<div class="row">
<div class="form-group col-sm-6">
<label class="col-sm-4 control-label is-required">特采/让步数:</label>
<div class="col-sm-8">
<input id="specialConcessionsNum" name="specialConcessionsNum" class="form-control" type="number" value="0" required>
</div>
</div>
<div class="form-group col-sm-6">
<label class="col-sm-4 control-label">特采报告图片:</label>
<div class="col-sm-8">
<input name="specialReportUrl" class="form-control" type="text">
</div>
</div>
</div>
</div>
<!--不合格数-->
<div class="col-sm-12">
<div class="row">
<div class="col-sm-12 align-items-center">
<span style="font-weight: bold; font-family: Arial, sans-serif; font-size: 15px;padding-left: 0px;">不良数</span>
<div class="row">
<div class="form-group col-sm-6">
<label class="col-sm-4 control-label is-required">不良数:</label>
<div class="col-sm-8">
<input id="processBadNum" name="processBadNum" class="form-control" type="number" value="0" required>
</div>
</div>
<div class="form-group col-sm-6">
<label class="col-sm-4 control-label">检验完成时间:</label>
<div class="col-sm-8">
<div class="input-group date">
<input name="checkoutCompletionTime" class="form-control" placeholder="yyyy-MM-dd" type="text">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container">
<div class="col-sm-12">
<div class="row">
<div class="col-sm-12 d-flex align-items-center">
<a class="btn btn-success ml-auto" onclick="addUnqualified()">
<i class="fa fa-plus"></i> 添加不良分类
</a>
</div>
</div>
<div class="row">
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-unqualified-table"></table>
</div>
</div>
</div>
</div>
</div> </div>
</div> </div>
</div>
<!--其他字段-->
<div class="form-group" style="margin-top: 20px;">
<label class="col-sm-4 control-label">备注:</label>
<div class="col-sm-8">
<textarea name="remark" class="form-control" type="text"></textarea>
</div>
</div>
</form>
</div> </div>
<th:block th:include="include :: footer" /> <th:block th:include="include :: footer" />
<th:block th:include="include :: datetimepicker-js" /> <th:block th:include="include :: datetimepicker-js" />
@ -67,12 +164,18 @@
<th:block th:include="include :: bootstrap-table-editable-js" /> <th:block th:include="include :: bootstrap-table-editable-js" />
<script th:inline="javascript"> <script th:inline="javascript">
var qualityOrderCode = [[${qualityOrder.qualityOrderCode}]] var qualityOrderCode = [[${qualityOrder.qualityOrderCode}]]
var qualityOrder = [[${qualityOrder}]] var qualityOrder = [[${qualityOrder}]];
var prefix = ctx + "quality/qualityOrder";
var processMethodDatas = [[${@dict.getType('processMethod')}]]; var processMethodDatas = [[${@dict.getType('processMethod')}]];
var materialTypeDatas = [[${@category.getChildByCode('materialType')}]]; var materialTypeDatas = [[${@category.getChildByCode('materialType')}]];
var processBadClassificationDatas = [[${@dict.getType('process_bad_classification')}]];
var processBadGradeDatas = [[${@dict.getType('process_bad_grade')}]];
var tableIndex = 0;
var tableIdList = [];
var divIdList = [];
var prefix = ctx + "quality/qualityOrder";
var reportPrefix = ctx + "quality/qualityReport";
$("#form-makeInStartingQuality-edit").validate({ $("#form-makeInStartingQuality-edit").validate({
focusCleanup: true focusCleanup: true
}); });
@ -83,66 +186,21 @@
autoclose: true autoclose: true
}); });
// 新增提交
function submitHandler() {
// 获取表单数据
const qualityOrderData = $("#form-makeInStartingQuality-edit").serializeArray().reduce((obj, item) => {
obj[item.name] = item.value;
return obj;
}, {});
// 获取bootstrap-table的数据,这里假设你使用bootstrap-table的API获取所有数据
var table = $('#bootstrap-table').bootstrapTable('getData');
// 将表数据转换成与complaintNoticeData格式一致的数组
var materialDataList = table.map(function(item) {
// 根据实际字段名调整
return {
"qualityOrderDetailId": item.qualityOrderDetailId,
"materialNo": item.materialNo,
"materialName": item.materialName,
"materialType": item.materialType,
"materialPhotourl": item.materialPhotourl,
"materialDescribe": item.materialDescribe,
"materialBrand": item.materialBrand,
"materialUnit": item.materialUnit,
"materialProcessMethod": item.materialProcessMethod,
"thisArrivedNum": item.thisArrivedNum,
"qualityQualifiedNum": item.qualityQualifiedNum,
"qualityUnqualifiedNum": item.qualityUnqualifiedNum,
"makeInNum":item.makeInNum,
"makeInUnitPrice": item.makeInUnitPrice,
"materialDeptType": item.materialDeptType,
// ...其他字段
};
});
const combinedData = Object.assign({}, qualityOrderData, {
qualityOrderDetailList: materialDataList,
});
// 合并表单数据和表格数据
console.log(combinedData)
// 使用 JSON.stringify() 序列化数据
const jsonData = JSON.stringify(combinedData);
// 发送 AJAX 请求到后端接口
$.operate.saveJson(prefix + "/makeOutStartingQuality", jsonData);
}
//物料信息展示列表 //物料信息展示列表
$(function() { $(function() {
sessionStorage.clear();
var options = { var options = {
modalName: "选择物料", modalName: "品质单物料",
id: "bootstrap-material-table",
url: prefix + "/getMaterialListByQualityOrderCode", url: prefix + "/getMaterialListByQualityOrderCode",
queryParams: queryParams, queryParams: queryParams,
showSearch: false, showSearch: false,
showRefresh: false, showRefresh: false,
showToggle: false, showToggle: false,
showColumns: false, showColumns: false,
height: 40,
pagination: false, // 设置不分页 pagination: false, // 设置不分页
columns: [{ columns: [
checkbox: true
},
{ {
title: '品质单详情ID', title: '品质单详情ID',
field: 'qualityOrderDetailId', field: 'qualityOrderDetailId',
@ -150,86 +208,145 @@
}, },
{ {
title: '料号', title: '料号',
field: 'materialNo' field: 'materialNo',
align: 'center',
}, },
{ {
title: '物料名称', title: '物料名称',
align: 'center',
field: 'materialName' field: 'materialName'
}, },
{ {
title: '物料类型', title: '物料类型',
align: 'center',
field: 'materialType', field: 'materialType',
formatter: function(value, row, index) { formatter: function(value, row, index) {
return $.table.selectCategoryLabel(materialTypeDatas, value); return $.table.selectCategoryLabel(materialTypeDatas, value);
} }
}, },
{
field: 'materialModel',
align: 'center',
title: '型号',
},
{ {
title: '图片', title: '图片',
align: 'center',
field: 'materialPhotourl', field: 'materialPhotourl',
formatter: function(value, row, index) {
return $.table.imageView(value);
}
}, },
{ {
title: '物料描述', title: '描述',
align: 'center',
field: 'materialDescribe', field: 'materialDescribe',
}, },
{ {
title: '物料品牌', title: '品牌',
align: 'center',
field: 'materialBrand', field: 'materialBrand',
}, },
{ {
title: '物料单位', title: '单位',
align: 'center',
field: 'materialUnit', field: 'materialUnit',
}, },
{ {
title: '物料加工方式', title: '加工方式',
align: 'center',
field: 'materialProcessMethod', field: 'materialProcessMethod',
formatter: function(value, row, index) { formatter: function(value, row, index) {
return $.table.selectDictLabel(processMethodDatas, value); return $.table.selectDictLabel(processMethodDatas, value);
} }
}, },
{ {
title: '品质已合格数', title: '检验数',
field: 'qualityHasqualifiedNum', align: 'center',
field: 'checkNum',
}, },
{ {
title: '本次到货数', title: '合格数',
field: 'thisArrivedNum', align: 'center',
field: 'qualityQualifiedNum',
},
{
title: '不良数',
align: 'center',
field: 'qualityUnqualifiedNum',
},
{
title: '待审核数',
align: 'center',
field: 'pendingReviewNum',
},
]
};
$.table.init(options);
var unqualifiedOption = {
id: "bootstrap-unqualified-table",
modalName: "不良数",
showColumns: false,
pagination: false,
showToggle: false,
showRefresh:false,
showSearch:false,
singleSelect:true,
height: 40,
columns: [
{
title: '品质报告单id',
field: 'qualityOrderReportId',
visible: false
},
{title: '不良分类',field: 'processBadClassification',
formatter:function (value, row, index) {
return processBadClassificationFormatter(value,row,index);
}
},
{title: '不良等级',field: 'processBadGrade',
formatter:function (value, row, index) {
return processBadGradeFormatter(value,row,index);
}
},
{
title: '数量',
field: 'processBadNum',
editable:{ editable:{
type:'text', type: 'text',
mode:'inline',
validate: function (v) { validate: function (v) {
if (!v) return '本次到货数不能为空'; if (!v) return '数量不能为空';
if (isNaN(v)) return '数量必须是数字';
var processBadNum = parseInt(v);
if (processBadNum < 0) return '数量必须是正整数';
} }
}
},
{
title: '报告',
field: 'unqualifiedReportUrl',
editable: {
mode:'inline',
type: 'text', // 表示该列可以被编辑为文本
}, },
required:true
}, },
{ {
title: '品质报告', title: '操作',
align: 'center', align: 'center',
formatter: function(value, row, index) { formatter: function(value, row, index) {
// 这里直接使用row对象获取supplierCode,假设它是存在的
var actions = []; var actions = [];
actions.push('<a class="btn btn-success btn-xs" href="javascript:void(0)" onclick="makeInOrderReport(\'' + row.materialNo + '\')"><i class="fa fa-plus"></i>报告</a> '); actions.push('<a class="btn btn-danger btn-xs" href="javascript:void(0)" onclick="removeUnqualify(\'' + row.qualityOrderReportId + '\')"><i class="fa fa-remove"></i>删除</a> ');
return actions.join(''); return actions.join('');
} }
},
{
title: '品质合格数',
field: 'qualityQualifiedNum',
},
{
title: '品质不合格数',
field: 'qualityUnqualifiedNum',
},
{
title: '物料入库部门',
field: 'materialDeptType',
visible: false
} }
] ]
}; };
$.table.init(options); $.table.init(unqualifiedOption);
//移除表格上方toolbar(去除空白)
$(".fixed-table-toolbar").remove();
}) })
function queryParams(params) { function queryParams(params) {
@ -237,18 +354,156 @@
// 传递参数查询参数 // 传递参数查询参数
qualityOrderCode: qualityOrderCode qualityOrderCode: qualityOrderCode
}; };
console.log(curParams);
return curParams; return curParams;
} }
$("input[name='checkoutCompletionTime']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
autoclose: true
});
//添加不合格分类
function addUnqualified() {
var uniqueId = new Date().getTime();
var newRow = {
qualityOrderReportId:uniqueId,
processBadClassification: "",
processBadGrade: "",
processBadNum: "",
unqualifiedReportUrl: ""
};
$('#bootstrap-unqualified-table').bootstrapTable('append', newRow);
}
//删除不良分类
function removeUnqualify(qualityOrderReportId){
$("#bootstrap-unqualified-table").bootstrapTable('remove',{
field: 'qualityOrderReportId',
values: qualityOrderReportId
})
}
// 自定义不良分类的初始化函数
function processBadClassificationFormatter(value, row, index) {
var selectHtml = `<select class="form-control" onchange="onProcessBadClassification(this, ${index})">`;
selectHtml += '<option value=""' + (value === undefined || value === '' ? ' selected' : '') + '>所有</option>';
processBadClassificationDatas.forEach(function (child) {
selectHtml += '<option value="' + child.dictValue + '"' + (value === child.dictValue ? ' selected' : '') + '>' + child.dictLabel + '</option>';
});
selectHtml += '</select>';
return selectHtml;
}
// 列中获取不良分类的下拉改变数据
function onProcessBadClassification(selectElement, rowIndex) {
var processBadClassificationValue = $(selectElement).val();
var tableData = $("#bootstrap-unqualified-table").bootstrapTable('getData');
var newRow = tableData[rowIndex]; // 获取当前行数据
// 更新行数据
newRow.processBadClassification = processBadClassificationValue;
$("#bootstrap-unqualified-table").bootstrapTable('updateRow', {index: rowIndex, row: newRow});
}
// 自定义不良等级的格式化函数
function processBadGradeFormatter(value, row, index) {
var selectHtml = `<select class="form-control" onchange="onProcessBadGrade(this, ${index})">`;
selectHtml += '<option value=""' + (value === undefined || value === '' ? ' selected' : '') + '>所有</option>';
processBadGradeDatas.forEach(function (child) {
selectHtml += '<option value="' + child.dictValue + '"' + (value === child.dictValue ? ' selected' : '') + '>' + child.dictLabel + '</option>';
});
selectHtml += '</select>';
return selectHtml;
}
// 列中获取不良等级的下拉改变数据
function onProcessBadGrade(selectElement, rowIndex) {
var processBadGradeValue = $(selectElement).val();
var tableData = $("#bootstrap-unqualified-table").bootstrapTable('getData');
var newRow = tableData[rowIndex]; // 获取当前行数据
// 重新渲染成本小类的设备名称列
// 更新行数据
newRow.processBadGrade = processBadGradeValue;
$("#bootstrap-unqualified-table").bootstrapTable('updateRow', {index: rowIndex, row: newRow});
}
// 新增提交
function submitHandler() {
var materialData = $('#bootstrap-material-table').bootstrapTable('getData')[0];
var materialNo = materialData.materialNo;
var materialName = materialData.materialName;
const qualityReport = $("#form-makeInStartingQuality-edit").serializeArray().reduce((obj, item) => {
obj[item.name] = item.value;
return obj;
}, {});
qualityReport.materialNo = materialNo;
qualityReport.materialName = materialName;
function makeInOrderReport(materialNo) { //计算页面本次品质数和检验数,添加限制
var qualityOrderCode = [[${qualityOrder.qualityOrderCode}]]; var checkNum = Number(materialData.checkNum);
var queryParams = new URLSearchParams(); var qualifiedNum = Number(materialData.qualityQualifiedNum);
queryParams.append('materialNo', materialNo); var unQualifiedNum = Number(materialData.qualityUnqualifiedNum);
queryParams.append('qualityOrderCode',encodeURIComponent(qualityOrderCode)); var pendingReviewNum = Number(materialData.pendingReviewNum);
var url = ctx + 'quality/qualityOrder/makeOutOrderReport?' + queryParams.toString(); //待检验数
$.modal.open("品质报告", url); var remainNum = checkNum - qualifiedNum - unQualifiedNum - pendingReviewNum;
var qualityNum = 0;
var pageOkNum = Number(qualityReport.okAcceptedNum)+ Number(qualityReport.specialConcessionsNum);
var pageUnpassNum = Number(qualityReport.processBadNum);
//本次品质数
qualifiedNum = pageOkNum + pageUnpassNum;
if(qualifiedNum == 0){
$.modal.msgError('合格数、不良数不能全为空!');
return;
}
if(qualifiedNum > remainNum){
$.modal.msgError('本次品质数'+qualifiedNum+'已超过待品质数'+remainNum);
return;
}
var unqualifyList = [];
var classNull = false;
var gradeNull = false;
var numNull = false;
var unqualifyClass = $("#bootstrap-unqualified-table").bootstrapTable('getData');
if(pageUnpassNum>0) {
if (unqualifyClass.length <= 0) {
$.modal.msgError("不良分类列表为空,请检查");
return;
}
var classNull = false;
var gradeNull = false;
var numNull = false;
unqualifyClass.forEach(function (unqualify) {
if(unqualify.processBadClassification ==''){
classNull = true;
return;
}
if(unqualify.processBadGrade ==''){
gradeNull = true;
return;
}
if(unqualify.processBadNum ==''){
numNull = true;
return;
}
unqualify.materialNo = materialNo;
unqualify.materialName = materialName;
unqualifyList.push(unqualify);
});
if(classNull){
$.modal.msgError("不良分类值为空,请检查");
return;
};
if(gradeNull){
$.modal.msgError("不良分类等级为空,请检查");
return;
};
if(numNull){
$.modal.msgError("不良分类数量为空,请检查");
return;
};
}
qualityReport.qualityOrderReportType = "3";//委外品质
qualityReport.unqualifiedDataList = unqualifyList;
console.log(qualityReport);
$.operate.saveJson(reportPrefix + "/add", JSON.stringify(qualityReport));
} }
</script> </script>

Loading…
Cancel
Save