From df1aec4048bb4aead4afb802185fcab72615733e Mon Sep 17 00:00:00 2001 From: qianyu <617189624@qq.com> Date: Mon, 19 Jun 2023 08:40:14 +0800 Subject: [PATCH] =?UTF-8?q?230619=20=E5=A7=94=E5=A4=96=E9=A2=86=E6=96=99?= =?UTF-8?q?=E5=8D=95=E3=80=81=E4=BE=9B=E5=BA=94=E5=95=86=E7=B4=A2=E8=B5=94?= =?UTF-8?q?=E6=89=A3=E6=AC=BE=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/java/com/ruoyi/main.java | 12 + .../MaterialRequisitionInfoController.java | 198 +++++++++++- .../domain/MaterialRequisitionDetail.java | 10 +- .../QualitySupplierDeductionController.java | 190 +++++++++++ .../domain/QualitySupplierDeduction.java | 275 ++++++++++++++++ .../QualitySupplierDeductionDto.java | 297 ++++++++++++++++++ .../QualitySupplierDeductionMapper.java | 61 ++++ .../IQualitySupplierDeductionService.java | 61 ++++ .../QualitySupplierDeductionServiceImpl.java | 94 ++++++ .../com/ruoyi/system/domain/SysBomBcp.java | 14 +- .../system/domain/SysBomRawMaterial.java | 6 + .../domain/SysBomSubsidiaryMaterial.java | 9 +- .../ruoyi/system/domain/SysFinishProduct.java | 9 +- .../MaterialRequisitionDetailMapper.xml | 1 + .../QualitySupplierDeductionMapper.xml | 138 ++++++++ .../mapper/system/SysBomBcpMapper.xml | 1 - .../manufacture/workOrderInfo/add.html | 7 - .../materialRequisitionOutsource/add.html | 82 ++--- .../materialRequisitionOutsource.html | 2 +- .../quality/qualitySupplierDeduction/add.html | 184 +++++++++++ .../qualitySupplierDeduction/edit.html | 184 +++++++++++ .../qualitySupplierDeduction.html | 217 +++++++++++++ .../MaterialRequisitionInfoController.class | Bin 23548 -> 33429 bytes .../domain/MaterialRequisitionDetail.class | Bin 5584 -> 5733 bytes .../com/ruoyi/system/domain/SysBomBcp.class | Bin 5245 -> 5476 bytes .../system/domain/SysBomRawMaterial.class | Bin 5123 -> 5211 bytes .../domain/SysBomSubsidiaryMaterial.class | Bin 5249 -> 5337 bytes .../system/domain/SysFinishProduct.class | Bin 10514 -> 10602 bytes .../MaterialRequisitionDetailMapper.xml | 1 + .../classes/mapper/system/SysBomBcpMapper.xml | 1 - .../manufacture/workOrderInfo/add.html | 7 - 31 files changed, 1984 insertions(+), 77 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/main.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/quality/controller/QualitySupplierDeductionController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/quality/domain/QualitySupplierDeduction.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/quality/domain/exportDto/QualitySupplierDeductionDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/quality/mapper/QualitySupplierDeductionMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/quality/service/IQualitySupplierDeductionService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/quality/service/impl/QualitySupplierDeductionServiceImpl.java create mode 100644 ruoyi-admin/src/main/resources/mapper/quality/QualitySupplierDeductionMapper.xml create mode 100644 ruoyi-admin/src/main/resources/templates/quality/qualitySupplierDeduction/add.html create mode 100644 ruoyi-admin/src/main/resources/templates/quality/qualitySupplierDeduction/edit.html create mode 100644 ruoyi-admin/src/main/resources/templates/quality/qualitySupplierDeduction/qualitySupplierDeduction.html diff --git a/ruoyi-admin/src/main/java/com/ruoyi/main.java b/ruoyi-admin/src/main/java/com/ruoyi/main.java new file mode 100644 index 00000000..c4303173 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/main.java @@ -0,0 +1,12 @@ +package com.ruoyi; + +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.manufacture.controller.MaterialRequisitionInfoController; + +import java.util.Scanner; + +public class main { + public static void main(String args[]){ + + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/manufacture/controller/MaterialRequisitionInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/manufacture/controller/MaterialRequisitionInfoController.java index f1defacf..e3a4d62d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/manufacture/controller/MaterialRequisitionInfoController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/manufacture/controller/MaterialRequisitionInfoController.java @@ -5,6 +5,7 @@ import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.util.MapUtils; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.fill.FillConfig; +import com.alibaba.excel.write.metadata.fill.FillWrapper; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com.ruoyi.ck.utils.Result; @@ -26,15 +27,19 @@ import com.ruoyi.outsource.domain.OutsourceOrderMaterial; import com.ruoyi.outsource.service.IOutsourceOrderMaterialService; import com.ruoyi.outsource.service.impl.OutsourceOrderMaterialServiceImpl; import com.ruoyi.manufacture.service.IWorkOrderInfoService; -import com.ruoyi.system.domain.SysBom; -import com.ruoyi.system.domain.SysBomRawMaterial; -import com.ruoyi.system.service.ISysBomBcpService; -import com.ruoyi.system.service.ISysBomRawMaterialService; -import com.ruoyi.system.service.ISysBomService; -import com.ruoyi.system.service.ISysDictTypeService; +import com.ruoyi.storehouse.domain.OutboundDetail; +import com.ruoyi.storehouse.domain.exportDto.OutboundDetailDto; +import com.ruoyi.system.domain.*; +import com.ruoyi.system.service.*; +import com.ruoyi.system.service.impl.SysBomBcpServiceImpl; +import com.ruoyi.system.service.impl.SysBomRawMaterialServiceImpl; +import com.ruoyi.system.service.impl.SysBomServiceImpl; +import com.ruoyi.system.service.impl.SysBomSubsidiaryMaterialServiceImpl; import com.ruoyi.system.utils.ExcelFillCellMergePrevColUtils; +import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.VerticalAlignment; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -43,12 +48,10 @@ import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; +import java.io.*; import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.text.SimpleDateFormat; +import java.util.*; import static com.ruoyi.common.config.datasource.DynamicDataSourceContextHolder.log; @@ -84,7 +87,14 @@ public class MaterialRequisitionInfoController extends BaseController @Autowired private ISysBomRawMaterialService sysBomRawMaterialService; @Autowired + private ISysBomSubsidiaryMaterialService sysBomSubsidiaryMaterialService; + @Autowired private IWorkOrderInfoService workOrderInfoService; + @Autowired + private IOutsourceOrderMaterialService outsourceOrderMaterialService; + @Autowired + private ISysFinishProductService sysFinishProductService; + // @RequiresPermissions("manufacture:materialRequisitionInfo:view") // @GetMapping() @@ -592,24 +602,178 @@ public class MaterialRequisitionInfoController extends BaseController /** * 查询委外领料单物料明细List */ - @RequiresPermissions("manufacture:materialRequisitionInfo:listOutsource") - @PostMapping("/selectOutsourceDetail") +// @RequiresPermissions("manufacture:materialRequisitionInfo:listOutsource") + @PostMapping("/selectOutsourceDetail/{outsourceOrderNumber}") @ResponseBody - public void selectOutsourceDetail(MaterialRequisitionInfo materialRequisitionInfo){ + public TableDataInfo selectOutsourceDetail(@PathVariable("outsourceOrderNumber")String outsourceOrderNumber){ + startPage(); //委外订单 - IOutsourceOrderMaterialService outsourceOrderMaterialService = new OutsourceOrderMaterialServiceImpl(); - List orderMaterialList = outsourceOrderMaterialService.selectOutsourceOrderMaterialList(new OutsourceOrderMaterial(materialRequisitionInfo.getSalesOrderNumber())); - + List orderMaterialList = outsourceOrderMaterialService.selectOutsourceOrderMaterialList(new OutsourceOrderMaterial(outsourceOrderNumber)); //委外明细 List materialRequisitionDetailList = new ArrayList<>(); //bom阶 int bomRank = 1; for (OutsourceOrderMaterial outsourceOrderMaterial : orderMaterialList) { + List list = sysBomBcpAllList(bomRank,Double.valueOf(outsourceOrderMaterial.getQuantity()),new SysBomBcp(outsourceOrderMaterial.getMaterialCode())); + if (list.size()>0){ + materialRequisitionDetailList.addAll(list); + } } + return getDataTable(materialRequisitionDetailList); + } + @RequiresPermissions("manufacture:materialRequisitionInfo:export") + @Log(title = "领料单", businessType = BusinessType.EXPORT) + @PostMapping("/exportOutsource/{materialRequisitionId}") + @ResponseBody + public void exportOutsource(@PathVariable("materialRequisitionId") Long materialRequisitionId, HttpServletResponse response) throws IOException { + //委外领料 + MaterialRequisitionInfo materialRequisitionInfo = materialRequisitionInfoService.selectMaterialRequisitionInfoById(materialRequisitionId); + //委外订单 + List orderMaterialList = outsourceOrderMaterialService.selectOutsourceOrderMaterialList(new OutsourceOrderMaterial(materialRequisitionInfo.getOutsourceOrderNumber())); + response.setCharacterEncoding("utf-8"); + String fileName = URLEncoder.encode("委外领料单", "UTF-8").replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + String templateFileName = "C:\\exportTemplates\\exportMaterialRequisitionOutsource.xlsx"; + ExcelFillCellMergePrevColUtils mergePrevColUtils = new ExcelFillCellMergePrevColUtils(); + Map> map = new HashMap<>(); + for (OutsourceOrderMaterial orderMaterial : orderMaterialList) { + List materialRequisitionDetailList = exportOutsourceList(materialRequisitionInfo.getMaterialRequisitionNumber(), orderMaterial.getMaterialCode()); + List materialRequisitionDetailDtoList = new ArrayList<>(); + try { + int number = 0; + Iterator materialRequisitionDetailValues = materialRequisitionDetailList.iterator(); + while (materialRequisitionDetailValues.hasNext()) { + Object detailValues = materialRequisitionDetailValues.next(); + MaterialRequisitionDetailDto detailDto = new MaterialRequisitionDetailDto(); + BeanUtils.copyProperties(detailValues, detailDto); + detailDto.setNumber(++number); + materialRequisitionDetailDtoList.add(detailDto); + } + } catch (Exception e) { + log.error(">>>>>>异常OutboundDetailDto<<<<<<", e); + } + map.put(orderMaterial,materialRequisitionDetailDtoList); + } + + File file = new File(templateFileName); + try(FileInputStream fileInputStream = new FileInputStream(file); ByteArrayOutputStream bos = new ByteArrayOutputStream()){ + int sheetCount = map.size(); + XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream); + for (int i = 1; i < sheetCount; i++) { + workbook.cloneSheet(0,"sheet"+(i+1)); + } + workbook.write(bos); + byte[] bArray = bos.toByteArray(); + InputStream is = new ByteArrayInputStream(bArray); + ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), MaterialRequisitionDetailDto.class).withTemplate(is).registerWriteHandler(mergePrevColUtils).build(); + int i = 0; + for (OutsourceOrderMaterial orderMaterial : map.keySet()) { + List finishProductList = sysFinishProductService.selectSysFinishProductList(new SysFinishProduct(orderMaterial.getMaterialCode())); + List list=new ArrayList<>(); + for (MaterialRequisitionDetailDto materialRequisitionDetailDto : map.get(orderMaterial)) { + list.add(finishProductList.get(0)); + } + WriteSheet writeSheet = EasyExcel.writerSheet(i++).build(); + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); + excelWriter.fill(new FillWrapper("material",map.get(orderMaterial)), fillConfig, writeSheet); + excelWriter.fill(new FillWrapper("finish",list), writeSheet); + Map excelMap = MapUtils.newHashMap(); + SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日"); + excelMap.put("materialRequisitionNumber", materialRequisitionInfo.getMaterialRequisitionNumber()); + excelMap.put("salesOrderNumber", materialRequisitionInfo.getOutsourceOrderNumber()); + //暂时存在问题 + excelMap.put("typeMachine",finishProductList.get(0).getTypeMachine()); + excelMap.put("firstAddTime",format.format( new SimpleDateFormat("yyyy-MM-dd").parse(materialRequisitionInfo.getFirstAddTime()))); + excelMap.put("quantity",orderMaterial.getQuantity()); + excelMap.put("finishCode",orderMaterial.getMaterialCode()); + excelMap.put("nowDate",format.format(new Date())); + excelMap.put("deliveryDate",format.format(new SimpleDateFormat("yyyy-MM-dd").parse(orderMaterial.getDeliveryDate()))); + excelMap.put("finishName",orderMaterial.getMaterialName()); + excelWriter.fill(excelMap,writeSheet); + } + excelWriter.finish(); + }catch (Exception e){ + e.printStackTrace(); + } + } + + private List exportOutsourceList(String materialRequisitionNumber,String materialCode) { + List result = new ArrayList<>(); + List materialRequisitionDetailList = materialRequisitionDetailService.selectMaterialRequisitionDetailList(new MaterialRequisitionDetail(materialRequisitionNumber,materialCode)); + if (materialRequisitionDetailList.size()>0){ + result.addAll(materialRequisitionDetailList); + for (MaterialRequisitionDetail materialRequisitionDetail : materialRequisitionDetailList) { + result.addAll(exportOutsourceList(materialRequisitionNumber,materialRequisitionDetail.getMaterialCode())); + } + } + return result; + } + private List sysBomBcpAllList(int bomRank,Double quantity,SysBomBcp sysBomBcp) { + List materialRequisitionDetailList = new ArrayList<>(); + List bomBcpList =sysBomBcpService.selectSysBomBcpList(sysBomBcp); + List rawMaterialList = sysBomRawMaterialService.selectSysBomRawMaterialList(new SysBomRawMaterial(sysBomBcp.getFinishProductCode())); + List subsidiaryMaterialList = sysBomSubsidiaryMaterialService.selectSysBomSubsidiaryMaterialList(new SysBomSubsidiaryMaterial(sysBomBcp.getFinishProductCode())); + if(rawMaterialList.size()>0){ + for (SysBomRawMaterial rawMaterial : rawMaterialList) { + MaterialRequisitionDetail materialRequisitionDetail = new MaterialRequisitionDetail(); + materialRequisitionDetail.setMaterialCode(rawMaterial.getRawMaterialCode()); //物料代码 + materialRequisitionDetail.setMaterialName(rawMaterial.getRawMaterialName()); //物料名称 + materialRequisitionDetail.setSpecificationModel(rawMaterial.getSpecificationModel()); //规格型号 + materialRequisitionDetail.setItemNumber(rawMaterial.getSupplierNumber()); //料号 + materialRequisitionDetail.setInventoryUnit(rawMaterial.getInventoryUnit()); //单位 + materialRequisitionDetail.setUnitUsage(rawMaterial.getRawMaterialConsumption()); //单位用量 + materialRequisitionDetail.setUpFinishProductCode(rawMaterial.getFinishProductCode()); //上级半成品代码 + + materialRequisitionDetail.setPlanQuantity(String.valueOf(Double.valueOf(rawMaterial.getRawMaterialConsumption()) * quantity)); //计划数量 + materialRequisitionDetail.setMaterialType("原料"); //物料类别 + materialRequisitionDetail.setBomRank(String.valueOf(bomRank)); //bom阶 + materialRequisitionDetailList.add(materialRequisitionDetail); + } + } + if (subsidiaryMaterialList.size()>0){ + for (SysBomSubsidiaryMaterial subsidiaryMaterial : subsidiaryMaterialList) { + MaterialRequisitionDetail materialRequisitionDetail = new MaterialRequisitionDetail(); + materialRequisitionDetail.setMaterialCode(subsidiaryMaterial.getSubsidiaryMaterialCode()); //物料代码 + materialRequisitionDetail.setMaterialName(subsidiaryMaterial.getSubsidiaryMaterialName()); //物料名称 + materialRequisitionDetail.setSpecificationModel(subsidiaryMaterial.getSpecificationModel()); //规格型号 + materialRequisitionDetail.setItemNumber(subsidiaryMaterial.getSupplierNumber()); //料号 + materialRequisitionDetail.setInventoryUnit(subsidiaryMaterial.getInventoryUnit()); //单位 + materialRequisitionDetail.setUnitUsage(subsidiaryMaterial.getSubsidiaryMaterialConsumption()); //单位用量 + materialRequisitionDetail.setUpFinishProductCode(subsidiaryMaterial.getFinishProductCode()); //上级半成品代码 + + materialRequisitionDetail.setPlanQuantity(String.valueOf(Double.valueOf(subsidiaryMaterial.getSubsidiaryMaterialConsumption())*quantity)); //计划数量 + materialRequisitionDetail.setMaterialType("辅料"); //物料类别 + materialRequisitionDetail.setBomRank(String.valueOf(bomRank)); //bom阶 + materialRequisitionDetailList.add(materialRequisitionDetail); + } + } + if(bomBcpList.size()>0){ + for (SysBomBcp bomBcp : bomBcpList) { + quantity = Double.valueOf(bomBcp.getBcpMaterialConsumption())*quantity; + + MaterialRequisitionDetail materialRequisitionDetail = new MaterialRequisitionDetail(); + materialRequisitionDetail.setMaterialCode(bomBcp.getBcpCode()); //物料代码 + materialRequisitionDetail.setMaterialName(bomBcp.getBcpName()); //物料名称 + materialRequisitionDetail.setSpecificationModel(bomBcp.getSpecificationModel()); //规格型号 + materialRequisitionDetail.setItemNumber(bomBcp.getCustomerNumber()); //料号 + materialRequisitionDetail.setInventoryUnit(bomBcp.getInventoryUnit()); //单位 + materialRequisitionDetail.setUnitUsage(bomBcp.getBcpMaterialConsumption()); //单位用量 + materialRequisitionDetail.setUpFinishProductCode(bomBcp.getFinishProductCode()); //上级半成品代码 + + materialRequisitionDetail.setPlanQuantity(String.valueOf(quantity)); //计划数量 + materialRequisitionDetail.setMaterialType("半成品"); //物料类别 + materialRequisitionDetail.setBomRank(String.valueOf(bomRank)); //bom阶 + materialRequisitionDetailList.add(materialRequisitionDetail); + + List list = sysBomBcpAllList(bomRank+1,quantity,new SysBomBcp(bomBcp.getBomBcpId(),bomBcp.getBcpCode())); + materialRequisitionDetailList.addAll(list); + } + } + return materialRequisitionDetailList; } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/manufacture/domain/MaterialRequisitionDetail.java b/ruoyi-admin/src/main/java/com/ruoyi/manufacture/domain/MaterialRequisitionDetail.java index ac64194c..9a4e7479 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/manufacture/domain/MaterialRequisitionDetail.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/manufacture/domain/MaterialRequisitionDetail.java @@ -80,7 +80,15 @@ public class MaterialRequisitionDetail extends BaseEntity @Excel(name = "上级半成品代码") private String upFinishProductCode; - public void setMaterialRequisitionDetailId(Long materialRequisitionDetailId) + public MaterialRequisitionDetail() { + } + + public MaterialRequisitionDetail(String materialRequisitionNumber, String upFinishProductCode) { + this.materialRequisitionNumber = materialRequisitionNumber; + this.upFinishProductCode = upFinishProductCode; + } + + public void setMaterialRequisitionDetailId(Long materialRequisitionDetailId) { this.materialRequisitionDetailId = materialRequisitionDetailId; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/quality/controller/QualitySupplierDeductionController.java b/ruoyi-admin/src/main/java/com/ruoyi/quality/controller/QualitySupplierDeductionController.java new file mode 100644 index 00000000..133b9d0b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/quality/controller/QualitySupplierDeductionController.java @@ -0,0 +1,190 @@ +package com.ruoyi.quality.controller; + +import java.io.IOException; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.util.MapUtils; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; +import com.ruoyi.quality.domain.exportDto.QualitySupplierDeductionDto; +import com.ruoyi.storehouse.domain.exportDto.OutboundDetailDto; +import com.ruoyi.system.utils.ExcelFillCellMergePrevColUtils; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.quality.domain.QualitySupplierDeduction; +import com.ruoyi.quality.service.IQualitySupplierDeductionService; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +import javax.servlet.http.HttpServletResponse; + +/** + * qualitySupplierDeductionController + * + * @author ruoyi + * @date 2023-06-19 + */ +@Controller +@RequestMapping("/quality/qualitySupplierDeduction") +public class QualitySupplierDeductionController extends BaseController +{ + private String prefix = "quality/qualitySupplierDeduction"; + + @Autowired + private IQualitySupplierDeductionService qualitySupplierDeductionService; + + @RequiresPermissions("quality:qualitySupplierDeduction:view") + @GetMapping() + public String qualitySupplierDeduction() + { + return prefix + "/qualitySupplierDeduction"; + } + + /** + * 查询qualitySupplierDeduction列表 + */ + @RequiresPermissions("quality:qualitySupplierDeduction:list") + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(QualitySupplierDeduction qualitySupplierDeduction) + { + startPage(); + List list = qualitySupplierDeductionService.selectQualitySupplierDeductionList(qualitySupplierDeduction); + return getDataTable(list); + } + + /** + * 导出qualitySupplierDeduction列表 + */ + @RequiresPermissions("quality:qualitySupplierDeduction:export") + @Log(title = "qualitySupplierDeduction", businessType = BusinessType.EXPORT) + @PostMapping("/export") + @ResponseBody + public AjaxResult export(QualitySupplierDeduction qualitySupplierDeduction) + { + List list = qualitySupplierDeductionService.selectQualitySupplierDeductionList(qualitySupplierDeduction); + ExcelUtil util = new ExcelUtil(QualitySupplierDeduction.class); + return util.exportExcel(list, "qualitySupplierDeduction数据"); + } + + /** + * 导出原料出库单 + */ + @RequiresPermissions("storehouse:outboundInfo:export") + @Log(title = "outboundInfo", businessType = BusinessType.EXPORT) + @PostMapping("/export/{qualitySupplierDeductionId}") + @ResponseBody + public void exportYL(@PathVariable("qualitySupplierDeductionId") Long qualitySupplierDeductionId , HttpServletResponse response) throws IOException { + QualitySupplierDeduction qualitySupplierDeduction= qualitySupplierDeductionService.selectQualitySupplierDeductionById(qualitySupplierDeductionId); + + ExcelFillCellMergePrevColUtils mergePrevColUtils = new ExcelFillCellMergePrevColUtils(); + response.setCharacterEncoding("utf-8"); + String fileName = URLEncoder.encode("供应商索赔扣款单", "UTF-8").replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + String templateFileName = "C:\\exportTemplates\\exportQualitySupplierDeduction.xlsx"; + + try (ExcelWriter excelWriter = EasyExcel + .write(response.getOutputStream(), QualitySupplierDeductionDto.class) + .withTemplate(templateFileName) + .registerWriteHandler(mergePrevColUtils) + .build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + Map map = MapUtils.newHashMap(); + map.put("supplierCode", qualitySupplierDeduction.getSupplierCode()); + map.put("modeOfService", qualitySupplierDeduction.getModeOfService()); + map.put("acceptanceDepartment", qualitySupplierDeduction.getAcceptanceDepartment()); + map.put("acceptancePerson", qualitySupplierDeduction.getAcceptancePerson()); + map.put("contactNumber", qualitySupplierDeduction.getContactNumber()); + map.put("reworkLaborCost", qualitySupplierDeduction.getReworkLaborCost()); + map.put("customerDeduction", qualitySupplierDeduction.getCustomerDeduction()); + map.put("punitiveDamage", qualitySupplierDeduction.getPunitiveDamage()); + map.put("materialScrapCost", qualitySupplierDeduction.getMaterialScrapCost()); + map.put("transportationExpenses", qualitySupplierDeduction.getTransportationExpenses()); + map.put("otherName", "其他("+qualitySupplierDeduction.getOtherName()+")"); + map.put("othersCost", qualitySupplierDeduction.getOthersCost()); + map.put("totalAmount", qualitySupplierDeduction.getTotalAmount()); + map.put("proposePerson", qualitySupplierDeduction.getProposePerson()); + map.put("reviewedPerson", qualitySupplierDeduction.getReviewedPerson()); + map.put("approvalPerson", qualitySupplierDeduction.getApprovalPerson()); + List reasons = new ArrayList<>(); + map.put("reason", qualitySupplierDeduction.getReason()); + excelWriter.fill(map,writeSheet); + } + } + + + + /** + * 新增qualitySupplierDeduction + */ + @GetMapping("/add") + public String add() + { + return prefix + "/add"; + } + + /** + * 新增保存qualitySupplierDeduction + */ + @RequiresPermissions("quality:qualitySupplierDeduction:add") + @Log(title = "qualitySupplierDeduction", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ResponseBody + public AjaxResult addSave(QualitySupplierDeduction qualitySupplierDeduction) + { + return toAjax(qualitySupplierDeductionService.insertQualitySupplierDeduction(qualitySupplierDeduction)); + } + + /** + * 修改qualitySupplierDeduction + */ + @GetMapping("/edit/{supplierDeductionId}") + public String edit(@PathVariable("supplierDeductionId") Long supplierDeductionId, ModelMap mmap) + { + QualitySupplierDeduction qualitySupplierDeduction = qualitySupplierDeductionService.selectQualitySupplierDeductionById(supplierDeductionId); + mmap.put("qualitySupplierDeduction", qualitySupplierDeduction); + return prefix + "/edit"; + } + + /** + * 修改保存qualitySupplierDeduction + */ + @RequiresPermissions("quality:qualitySupplierDeduction:edit") + @Log(title = "qualitySupplierDeduction", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave(QualitySupplierDeduction qualitySupplierDeduction) + { + return toAjax(qualitySupplierDeductionService.updateQualitySupplierDeduction(qualitySupplierDeduction)); + } + + /** + * 删除qualitySupplierDeduction + */ + @RequiresPermissions("quality:qualitySupplierDeduction:remove") + @Log(title = "qualitySupplierDeduction", businessType = BusinessType.DELETE) + @PostMapping( "/remove") + @ResponseBody + public AjaxResult remove(String ids) + { + return toAjax(qualitySupplierDeductionService.deleteQualitySupplierDeductionByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/quality/domain/QualitySupplierDeduction.java b/ruoyi-admin/src/main/java/com/ruoyi/quality/domain/QualitySupplierDeduction.java new file mode 100644 index 00000000..07d83620 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/quality/domain/QualitySupplierDeduction.java @@ -0,0 +1,275 @@ +package com.ruoyi.quality.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * qualitySupplierDeduction对象 quality_supplier_deduction + * + * @author ruoyi + * @date 2023-06-19 + */ +public class QualitySupplierDeduction extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** */ + private Long supplierDeductionId; + + /** 供应商代码 */ + @Excel(name = "供应商代码") + private String supplierCode; + + /** 送达方式 */ + @Excel(name = "送达方式") + private String modeOfService; + + /** 受理部门 */ + @Excel(name = "受理部门") + private String acceptanceDepartment; + + /** 受理人 */ + @Excel(name = "受理人") + private String acceptancePerson; + + /** 联络方式 */ + @Excel(name = "联络方式") + private String contactNumber; + + /** 索赔扣款详细原因 */ + @Excel(name = "索赔扣款详细原因") + private String reason; + + /** 返工工时费 */ + @Excel(name = "返工工时费") + private String reworkLaborCost; + + /** 客户扣款 */ + @Excel(name = "客户扣款") + private String customerDeduction; + + /** 惩罚性罚款 */ + @Excel(name = "惩罚性罚款") + private String punitiveDamage; + + /** 物料报废费用 */ + @Excel(name = "物料报废费用") + private String materialScrapCost; + + /** 交通/运输费 */ + @Excel(name = "交通/运输费") + private String transportationExpenses; + + /** 其他名字 */ + @Excel(name = "其他名字") + private String otherName; + + /** 其他金额 */ + @Excel(name = "其他金额") + private String othersCost; + + /** 合计金额 */ + @Excel(name = "合计金额") + private String totalAmount; + + /** 提出人 */ + @Excel(name = "提出人") + private String proposePerson; + + /** 审核人 */ + @Excel(name = "审核人") + private String reviewedPerson; + + /** 复核人 */ + @Excel(name = "复核人") + private String approvalPerson; + + public void setSupplierDeductionId(Long supplierDeductionId) + { + this.supplierDeductionId = supplierDeductionId; + } + + public Long getSupplierDeductionId() + { + return supplierDeductionId; + } + public void setSupplierCode(String supplierCode) + { + this.supplierCode = supplierCode; + } + + public String getSupplierCode() + { + return supplierCode; + } + public void setModeOfService(String modeOfService) + { + this.modeOfService = modeOfService; + } + + public String getModeOfService() + { + return modeOfService; + } + public void setAcceptanceDepartment(String acceptanceDepartment) + { + this.acceptanceDepartment = acceptanceDepartment; + } + + public String getAcceptanceDepartment() + { + return acceptanceDepartment; + } + public void setAcceptancePerson(String acceptancePerson) + { + this.acceptancePerson = acceptancePerson; + } + + public String getAcceptancePerson() + { + return acceptancePerson; + } + public void setContactNumber(String contactNumber) + { + this.contactNumber = contactNumber; + } + + public String getContactNumber() + { + return contactNumber; + } + public void setReason(String reason) + { + this.reason = reason; + } + + public String getReason() + { + return reason; + } + public void setReworkLaborCost(String reworkLaborCost) + { + this.reworkLaborCost = reworkLaborCost; + } + + public String getReworkLaborCost() + { + return reworkLaborCost; + } + public void setCustomerDeduction(String customerDeduction) + { + this.customerDeduction = customerDeduction; + } + + public String getCustomerDeduction() + { + return customerDeduction; + } + public void setPunitiveDamage(String punitiveDamage) + { + this.punitiveDamage = punitiveDamage; + } + + public String getPunitiveDamage() + { + return punitiveDamage; + } + public void setMaterialScrapCost(String materialScrapCost) + { + this.materialScrapCost = materialScrapCost; + } + + public String getMaterialScrapCost() + { + return materialScrapCost; + } + public void setTransportationExpenses(String transportationExpenses) + { + this.transportationExpenses = transportationExpenses; + } + + public String getTransportationExpenses() + { + return transportationExpenses; + } + public void setOtherName(String otherName) + { + this.otherName = otherName; + } + + public String getOtherName() + { + return otherName; + } + public void setOthersCost(String othersCost) + { + this.othersCost = othersCost; + } + + public String getOthersCost() + { + return othersCost; + } + public void setTotalAmount(String totalAmount) + { + this.totalAmount = totalAmount; + } + + public String getTotalAmount() + { + return totalAmount; + } + public void setProposePerson(String proposePerson) + { + this.proposePerson = proposePerson; + } + + public String getProposePerson() + { + return proposePerson; + } + public void setReviewedPerson(String reviewedPerson) + { + this.reviewedPerson = reviewedPerson; + } + + public String getReviewedPerson() + { + return reviewedPerson; + } + public void setApprovalPerson(String approvalPerson) + { + this.approvalPerson = approvalPerson; + } + + public String getApprovalPerson() + { + return approvalPerson; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("supplierDeductionId", getSupplierDeductionId()) + .append("supplierCode", getSupplierCode()) + .append("modeOfService", getModeOfService()) + .append("acceptanceDepartment", getAcceptanceDepartment()) + .append("acceptancePerson", getAcceptancePerson()) + .append("contactNumber", getContactNumber()) + .append("reason", getReason()) + .append("reworkLaborCost", getReworkLaborCost()) + .append("customerDeduction", getCustomerDeduction()) + .append("punitiveDamage", getPunitiveDamage()) + .append("materialScrapCost", getMaterialScrapCost()) + .append("transportationExpenses", getTransportationExpenses()) + .append("otherName", getOtherName()) + .append("othersCost", getOthersCost()) + .append("totalAmount", getTotalAmount()) + .append("proposePerson", getProposePerson()) + .append("reviewedPerson", getReviewedPerson()) + .append("approvalPerson", getApprovalPerson()) + .toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/quality/domain/exportDto/QualitySupplierDeductionDto.java b/ruoyi-admin/src/main/java/com/ruoyi/quality/domain/exportDto/QualitySupplierDeductionDto.java new file mode 100644 index 00000000..ac2c2a78 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/quality/domain/exportDto/QualitySupplierDeductionDto.java @@ -0,0 +1,297 @@ +package com.ruoyi.quality.domain.exportDto; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ContentFontStyle; +import com.alibaba.excel.annotation.write.style.ContentStyle; +import com.alibaba.excel.enums.BooleanEnum; +import com.alibaba.excel.enums.poi.BorderStyleEnum; +import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum; +import com.alibaba.excel.enums.poi.VerticalAlignmentEnum; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * qualitySupplierDeduction对象 quality_supplier_deduction + * + * @author ruoyi + * @date 2023-06-19 + */ +public class QualitySupplierDeductionDto extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** */ + private Long supplierDeductionId; + + /** 供应商代码 */ + @ExcelProperty("供应商代码") + @ContentStyle(borderTop = BorderStyleEnum.THIN , borderBottom = BorderStyleEnum.THIN , horizontalAlignment = HorizontalAlignmentEnum.CENTER , verticalAlignment = VerticalAlignmentEnum.CENTER) + private String supplierCode; + + /** 送达方式 */ + @ExcelProperty("送达方式") + @ContentStyle(borderTop = BorderStyleEnum.THIN , borderBottom = BorderStyleEnum.THIN , horizontalAlignment = HorizontalAlignmentEnum.CENTER , verticalAlignment = VerticalAlignmentEnum.CENTER) + private String modeOfService; + + /** 受理部门 */ + @ExcelProperty("受理部门") + @ContentStyle(borderTop = BorderStyleEnum.THIN , borderBottom = BorderStyleEnum.THIN , horizontalAlignment = HorizontalAlignmentEnum.CENTER , verticalAlignment = VerticalAlignmentEnum.CENTER) + private String acceptanceDepartment; + + /** 受理人 */ + @ExcelProperty("受理人") + @ContentStyle(borderTop = BorderStyleEnum.THIN , borderBottom = BorderStyleEnum.THIN , horizontalAlignment = HorizontalAlignmentEnum.CENTER , verticalAlignment = VerticalAlignmentEnum.CENTER) + private String acceptancePerson; + + /** 联络方式 */ + @ExcelProperty("联络方式") + @ContentStyle(borderTop = BorderStyleEnum.THIN , borderBottom = BorderStyleEnum.THIN , horizontalAlignment = HorizontalAlignmentEnum.CENTER , verticalAlignment = VerticalAlignmentEnum.CENTER) + private String contactNumber; + + /** 索赔扣款详细原因 */ + @ExcelProperty("索赔扣款详细原因") + @ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.LEFT , verticalAlignment = VerticalAlignmentEnum.TOP , wrapped = BooleanEnum.TRUE) + private String reason; + + /** 返工工时费 */ + @ExcelProperty("返工工时费") + @ContentStyle(borderTop = BorderStyleEnum.THIN , borderBottom = BorderStyleEnum.THIN , horizontalAlignment = HorizontalAlignmentEnum.CENTER , verticalAlignment = VerticalAlignmentEnum.CENTER) + private String reworkLaborCost; + + /** 客户扣款 */ + @ExcelProperty("客户扣款") + @ContentStyle(borderTop = BorderStyleEnum.THIN , borderBottom = BorderStyleEnum.THIN , horizontalAlignment = HorizontalAlignmentEnum.CENTER , verticalAlignment = VerticalAlignmentEnum.CENTER) + private String customerDeduction; + + /** 惩罚性罚款 */ + @ExcelProperty("惩罚性罚款") + @ContentStyle(borderTop = BorderStyleEnum.THIN , borderBottom = BorderStyleEnum.THIN , horizontalAlignment = HorizontalAlignmentEnum.CENTER , verticalAlignment = VerticalAlignmentEnum.CENTER) + private String punitiveDamage; + + /** 物料报废费用 */ + @ExcelProperty("物料报废费用") + @ContentStyle(borderTop = BorderStyleEnum.THIN , borderBottom = BorderStyleEnum.THIN , horizontalAlignment = HorizontalAlignmentEnum.CENTER , verticalAlignment = VerticalAlignmentEnum.CENTER) + private String materialScrapCost; + + /** 交通/运输费 */ + @ExcelProperty("交通/运输费") + @ContentStyle(borderTop = BorderStyleEnum.THIN , borderBottom = BorderStyleEnum.THIN , horizontalAlignment = HorizontalAlignmentEnum.CENTER , verticalAlignment = VerticalAlignmentEnum.CENTER) + private String transportationExpenses; + + /** 其他名字 */ + @ExcelProperty("其他名字") + @ContentFontStyle(fontName="等线") + private String otherName; + + /** 其他金额 */ + @ExcelProperty("其他金额") + @ContentStyle(borderTop = BorderStyleEnum.THIN , borderBottom = BorderStyleEnum.THIN , horizontalAlignment = HorizontalAlignmentEnum.CENTER , verticalAlignment = VerticalAlignmentEnum.CENTER) + private String othersCost; + + /** 合计金额 */ + @ExcelProperty("合计金额") + @ContentStyle(borderTop = BorderStyleEnum.THIN , borderBottom = BorderStyleEnum.THIN , horizontalAlignment = HorizontalAlignmentEnum.CENTER , verticalAlignment = VerticalAlignmentEnum.CENTER) + private String totalAmount; + + /** 提出人 */ + @ExcelProperty("提出人") + private String proposePerson; + + /** 审核人 */ + @ExcelProperty("审核人") + private String reviewedPerson; + + /** 复核人 */ + @ExcelProperty("复核人") + @ContentStyle(borderRight = BorderStyleEnum.THIN) + private String approvalPerson; + + public void setSupplierDeductionId(Long supplierDeductionId) + { + this.supplierDeductionId = supplierDeductionId; + } + + public Long getSupplierDeductionId() + { + return supplierDeductionId; + } + public void setSupplierCode(String supplierCode) + { + this.supplierCode = supplierCode; + } + + public String getSupplierCode() + { + return supplierCode; + } + public void setModeOfService(String modeOfService) + { + this.modeOfService = modeOfService; + } + + public String getModeOfService() + { + return modeOfService; + } + public void setAcceptanceDepartment(String acceptanceDepartment) + { + this.acceptanceDepartment = acceptanceDepartment; + } + + public String getAcceptanceDepartment() + { + return acceptanceDepartment; + } + public void setAcceptancePerson(String acceptancePerson) + { + this.acceptancePerson = acceptancePerson; + } + + public String getAcceptancePerson() + { + return acceptancePerson; + } + public void setContactNumber(String contactNumber) + { + this.contactNumber = contactNumber; + } + + public String getContactNumber() + { + return contactNumber; + } + public void setReason(String reason) + { + this.reason = reason; + } + + public String getReason() + { + return reason; + } + public void setReworkLaborCost(String reworkLaborCost) + { + this.reworkLaborCost = reworkLaborCost; + } + + public String getReworkLaborCost() + { + return reworkLaborCost; + } + public void setCustomerDeduction(String customerDeduction) + { + this.customerDeduction = customerDeduction; + } + + public String getCustomerDeduction() + { + return customerDeduction; + } + public void setPunitiveDamage(String punitiveDamage) + { + this.punitiveDamage = punitiveDamage; + } + + public String getPunitiveDamage() + { + return punitiveDamage; + } + public void setMaterialScrapCost(String materialScrapCost) + { + this.materialScrapCost = materialScrapCost; + } + + public String getMaterialScrapCost() + { + return materialScrapCost; + } + public void setTransportationExpenses(String transportationExpenses) + { + this.transportationExpenses = transportationExpenses; + } + + public String getTransportationExpenses() + { + return transportationExpenses; + } + public void setOtherName(String otherName) + { + this.otherName = otherName; + } + + public String getOtherName() + { + return otherName; + } + public void setOthersCost(String othersCost) + { + this.othersCost = othersCost; + } + + public String getOthersCost() + { + return othersCost; + } + public void setTotalAmount(String totalAmount) + { + this.totalAmount = totalAmount; + } + + public String getTotalAmount() + { + return totalAmount; + } + public void setProposePerson(String proposePerson) + { + this.proposePerson = proposePerson; + } + + public String getProposePerson() + { + return proposePerson; + } + public void setReviewedPerson(String reviewedPerson) + { + this.reviewedPerson = reviewedPerson; + } + + public String getReviewedPerson() + { + return reviewedPerson; + } + public void setApprovalPerson(String approvalPerson) + { + this.approvalPerson = approvalPerson; + } + + public String getApprovalPerson() + { + return approvalPerson; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("supplierDeductionId", getSupplierDeductionId()) + .append("supplierCode", getSupplierCode()) + .append("modeOfService", getModeOfService()) + .append("acceptanceDepartment", getAcceptanceDepartment()) + .append("acceptancePerson", getAcceptancePerson()) + .append("contactNumber", getContactNumber()) + .append("reason", getReason()) + .append("reworkLaborCost", getReworkLaborCost()) + .append("customerDeduction", getCustomerDeduction()) + .append("punitiveDamage", getPunitiveDamage()) + .append("materialScrapCost", getMaterialScrapCost()) + .append("transportationExpenses", getTransportationExpenses()) + .append("otherName", getOtherName()) + .append("othersCost", getOthersCost()) + .append("totalAmount", getTotalAmount()) + .append("proposePerson", getProposePerson()) + .append("reviewedPerson", getReviewedPerson()) + .append("approvalPerson", getApprovalPerson()) + .toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/quality/mapper/QualitySupplierDeductionMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/quality/mapper/QualitySupplierDeductionMapper.java new file mode 100644 index 00000000..5b625a8e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/quality/mapper/QualitySupplierDeductionMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.quality.mapper; + +import java.util.List; +import com.ruoyi.quality.domain.QualitySupplierDeduction; + +/** + * qualitySupplierDeductionMapper接口 + * + * @author ruoyi + * @date 2023-06-19 + */ +public interface QualitySupplierDeductionMapper +{ + /** + * 查询qualitySupplierDeduction + * + * @param supplierDeductionId qualitySupplierDeductionID + * @return qualitySupplierDeduction + */ + public QualitySupplierDeduction selectQualitySupplierDeductionById(Long supplierDeductionId); + + /** + * 查询qualitySupplierDeduction列表 + * + * @param qualitySupplierDeduction qualitySupplierDeduction + * @return qualitySupplierDeduction集合 + */ + public List selectQualitySupplierDeductionList(QualitySupplierDeduction qualitySupplierDeduction); + + /** + * 新增qualitySupplierDeduction + * + * @param qualitySupplierDeduction qualitySupplierDeduction + * @return 结果 + */ + public int insertQualitySupplierDeduction(QualitySupplierDeduction qualitySupplierDeduction); + + /** + * 修改qualitySupplierDeduction + * + * @param qualitySupplierDeduction qualitySupplierDeduction + * @return 结果 + */ + public int updateQualitySupplierDeduction(QualitySupplierDeduction qualitySupplierDeduction); + + /** + * 删除qualitySupplierDeduction + * + * @param supplierDeductionId qualitySupplierDeductionID + * @return 结果 + */ + public int deleteQualitySupplierDeductionById(Long supplierDeductionId); + + /** + * 批量删除qualitySupplierDeduction + * + * @param supplierDeductionIds 需要删除的数据ID + * @return 结果 + */ + public int deleteQualitySupplierDeductionByIds(String[] supplierDeductionIds); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/quality/service/IQualitySupplierDeductionService.java b/ruoyi-admin/src/main/java/com/ruoyi/quality/service/IQualitySupplierDeductionService.java new file mode 100644 index 00000000..920c9a9b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/quality/service/IQualitySupplierDeductionService.java @@ -0,0 +1,61 @@ +package com.ruoyi.quality.service; + +import java.util.List; +import com.ruoyi.quality.domain.QualitySupplierDeduction; + +/** + * qualitySupplierDeductionService接口 + * + * @author ruoyi + * @date 2023-06-19 + */ +public interface IQualitySupplierDeductionService +{ + /** + * 查询qualitySupplierDeduction + * + * @param supplierDeductionId qualitySupplierDeductionID + * @return qualitySupplierDeduction + */ + public QualitySupplierDeduction selectQualitySupplierDeductionById(Long supplierDeductionId); + + /** + * 查询qualitySupplierDeduction列表 + * + * @param qualitySupplierDeduction qualitySupplierDeduction + * @return qualitySupplierDeduction集合 + */ + public List selectQualitySupplierDeductionList(QualitySupplierDeduction qualitySupplierDeduction); + + /** + * 新增qualitySupplierDeduction + * + * @param qualitySupplierDeduction qualitySupplierDeduction + * @return 结果 + */ + public int insertQualitySupplierDeduction(QualitySupplierDeduction qualitySupplierDeduction); + + /** + * 修改qualitySupplierDeduction + * + * @param qualitySupplierDeduction qualitySupplierDeduction + * @return 结果 + */ + public int updateQualitySupplierDeduction(QualitySupplierDeduction qualitySupplierDeduction); + + /** + * 批量删除qualitySupplierDeduction + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteQualitySupplierDeductionByIds(String ids); + + /** + * 删除qualitySupplierDeduction信息 + * + * @param supplierDeductionId qualitySupplierDeductionID + * @return 结果 + */ + public int deleteQualitySupplierDeductionById(Long supplierDeductionId); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/quality/service/impl/QualitySupplierDeductionServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/quality/service/impl/QualitySupplierDeductionServiceImpl.java new file mode 100644 index 00000000..7b0cd176 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/quality/service/impl/QualitySupplierDeductionServiceImpl.java @@ -0,0 +1,94 @@ +package com.ruoyi.quality.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.quality.mapper.QualitySupplierDeductionMapper; +import com.ruoyi.quality.domain.QualitySupplierDeduction; +import com.ruoyi.quality.service.IQualitySupplierDeductionService; +import com.ruoyi.common.core.text.Convert; + +/** + * qualitySupplierDeductionService业务层处理 + * + * @author ruoyi + * @date 2023-06-19 + */ +@Service +public class QualitySupplierDeductionServiceImpl implements IQualitySupplierDeductionService +{ + @Autowired + private QualitySupplierDeductionMapper qualitySupplierDeductionMapper; + + /** + * 查询qualitySupplierDeduction + * + * @param supplierDeductionId qualitySupplierDeductionID + * @return qualitySupplierDeduction + */ + @Override + public QualitySupplierDeduction selectQualitySupplierDeductionById(Long supplierDeductionId) + { + return qualitySupplierDeductionMapper.selectQualitySupplierDeductionById(supplierDeductionId); + } + + /** + * 查询qualitySupplierDeduction列表 + * + * @param qualitySupplierDeduction qualitySupplierDeduction + * @return qualitySupplierDeduction + */ + @Override + public List selectQualitySupplierDeductionList(QualitySupplierDeduction qualitySupplierDeduction) + { + return qualitySupplierDeductionMapper.selectQualitySupplierDeductionList(qualitySupplierDeduction); + } + + /** + * 新增qualitySupplierDeduction + * + * @param qualitySupplierDeduction qualitySupplierDeduction + * @return 结果 + */ + @Override + public int insertQualitySupplierDeduction(QualitySupplierDeduction qualitySupplierDeduction) + { + return qualitySupplierDeductionMapper.insertQualitySupplierDeduction(qualitySupplierDeduction); + } + + /** + * 修改qualitySupplierDeduction + * + * @param qualitySupplierDeduction qualitySupplierDeduction + * @return 结果 + */ + @Override + public int updateQualitySupplierDeduction(QualitySupplierDeduction qualitySupplierDeduction) + { + return qualitySupplierDeductionMapper.updateQualitySupplierDeduction(qualitySupplierDeduction); + } + + /** + * 删除qualitySupplierDeduction对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteQualitySupplierDeductionByIds(String ids) + { + return qualitySupplierDeductionMapper.deleteQualitySupplierDeductionByIds(Convert.toStrArray(ids)); + } + + /** + * 删除qualitySupplierDeduction信息 + * + * @param supplierDeductionId qualitySupplierDeductionID + * @return 结果 + */ + @Override + public int deleteQualitySupplierDeductionById(Long supplierDeductionId) + { + return qualitySupplierDeductionMapper.deleteQualitySupplierDeductionById(supplierDeductionId); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysBomBcp.java b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysBomBcp.java index 9b5f7a71..acd0b73d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysBomBcp.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysBomBcp.java @@ -75,7 +75,19 @@ public class SysBomBcp extends BaseEntity /** 备用二 */ private String standbyTwo; - public void setBomBcpId(Long bomBcpId) + public SysBomBcp() { + } + + public SysBomBcp(String finishProductCode) { + this.finishProductCode = finishProductCode; + } + + public SysBomBcp(Long bomBcpId, String finishProductCode) { + this.bomBcpId = bomBcpId; + this.finishProductCode = finishProductCode; + } + + public void setBomBcpId(Long bomBcpId) { this.bomBcpId = bomBcpId; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysBomRawMaterial.java b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysBomRawMaterial.java index e136bad1..992876eb 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysBomRawMaterial.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysBomRawMaterial.java @@ -73,6 +73,12 @@ public class SysBomRawMaterial extends BaseEntity @Excel(name = "备用二") private String standbyTwo; + public SysBomRawMaterial() { + } + + public SysBomRawMaterial(String finishProductCode) { + this.finishProductCode = finishProductCode; + } public void setRawMaterialId(Long rawMaterialId) { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysBomSubsidiaryMaterial.java b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysBomSubsidiaryMaterial.java index 74c23372..2b909fa2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysBomSubsidiaryMaterial.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysBomSubsidiaryMaterial.java @@ -73,7 +73,14 @@ public class SysBomSubsidiaryMaterial extends BaseEntity @Excel(name = "备用二") private String standbyTwo; - public void setSubsidiaryMaterialId(Long subsidiaryMaterialId) + public SysBomSubsidiaryMaterial() { + } + + public SysBomSubsidiaryMaterial(String finishProductCode) { + this.finishProductCode = finishProductCode; + } + + public void setSubsidiaryMaterialId(Long subsidiaryMaterialId) { this.subsidiaryMaterialId = subsidiaryMaterialId; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysFinishProduct.java b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysFinishProduct.java index 3176aea4..ba1cb6ea 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysFinishProduct.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysFinishProduct.java @@ -154,7 +154,14 @@ public class SysFinishProduct extends BaseEntity @Excel(name = "修改时间") private String updateInfoTime; - public void setFinishProductId(Long finishProductId) + public SysFinishProduct() { + } + + public SysFinishProduct(String finishProductCode) { + this.finishProductCode = finishProductCode; + } + + public void setFinishProductId(Long finishProductId) { this.finishProductId = finishProductId; } diff --git a/ruoyi-admin/src/main/resources/mapper/manufacture/MaterialRequisitionDetailMapper.xml b/ruoyi-admin/src/main/resources/mapper/manufacture/MaterialRequisitionDetailMapper.xml index d4a540be..376b4645 100644 --- a/ruoyi-admin/src/main/resources/mapper/manufacture/MaterialRequisitionDetailMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/manufacture/MaterialRequisitionDetailMapper.xml @@ -35,6 +35,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and material_code like concat('%', #{materialCode}, '%') and material_name like concat('%', #{materialName}, '%') and material_type = #{materialType} + and up_finish_product_code = #{upFinishProductCode} diff --git a/ruoyi-admin/src/main/resources/mapper/quality/QualitySupplierDeductionMapper.xml b/ruoyi-admin/src/main/resources/mapper/quality/QualitySupplierDeductionMapper.xml new file mode 100644 index 00000000..344cfb7c --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/quality/QualitySupplierDeductionMapper.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + select supplier_deduction_id, supplier_code, mode_of_service, acceptance_department, acceptance_person, contact_number, reason, rework_labor_cost, customer_deduction, punitive_damage, material_scrap_cost, transportation_expenses, other_name, others_cost, total_amount, propose_person, reviewed_person, approval_person from quality_supplier_deduction + + + + + + + + insert into quality_supplier_deduction + + supplier_deduction_id, + supplier_code, + mode_of_service, + acceptance_department, + acceptance_person, + contact_number, + reason, + rework_labor_cost, + customer_deduction, + punitive_damage, + material_scrap_cost, + transportation_expenses, + other_name, + others_cost, + total_amount, + propose_person, + reviewed_person, + approval_person, + + + #{supplierDeductionId}, + #{supplierCode}, + #{modeOfService}, + #{acceptanceDepartment}, + #{acceptancePerson}, + #{contactNumber}, + #{reason}, + #{reworkLaborCost}, + #{customerDeduction}, + #{punitiveDamage}, + #{materialScrapCost}, + #{transportationExpenses}, + #{otherName}, + #{othersCost}, + #{totalAmount}, + #{proposePerson}, + #{reviewedPerson}, + #{approvalPerson}, + + + + + update quality_supplier_deduction + + supplier_code = #{supplierCode}, + mode_of_service = #{modeOfService}, + acceptance_department = #{acceptanceDepartment}, + acceptance_person = #{acceptancePerson}, + contact_number = #{contactNumber}, + reason = #{reason}, + rework_labor_cost = #{reworkLaborCost}, + customer_deduction = #{customerDeduction}, + punitive_damage = #{punitiveDamage}, + material_scrap_cost = #{materialScrapCost}, + transportation_expenses = #{transportationExpenses}, + other_name = #{otherName}, + others_cost = #{othersCost}, + total_amount = #{totalAmount}, + propose_person = #{proposePerson}, + reviewed_person = #{reviewedPerson}, + approval_person = #{approvalPerson}, + + where supplier_deduction_id = #{supplierDeductionId} + + + + delete from quality_supplier_deduction where supplier_deduction_id = #{supplierDeductionId} + + + + delete from quality_supplier_deduction where supplier_deduction_id in + + #{supplierDeductionId} + + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/system/SysBomBcpMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/SysBomBcpMapper.xml index 9e3278ff..8dcd4388 100644 --- a/ruoyi-admin/src/main/resources/mapper/system/SysBomBcpMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/system/SysBomBcpMapper.xml @@ -123,5 +123,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{bomBcpId} - \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/manufacture/workOrderInfo/add.html b/ruoyi-admin/src/main/resources/templates/manufacture/workOrderInfo/add.html index 37468848..3c68a79e 100644 --- a/ruoyi-admin/src/main/resources/templates/manufacture/workOrderInfo/add.html +++ b/ruoyi-admin/src/main/resources/templates/manufacture/workOrderInfo/add.html @@ -919,13 +919,6 @@ $("#bomMaterialModal").modal("hide"); } - //半成品二阶bom - function bcpList(){ - $.ajax({ - url:ctx+ - }) - } - //添加BOM材料信息 function addBomDetailToTable() { var dataRaw = $("#rawMaterialBomTable").bootstrapTable("getSelections"); diff --git a/ruoyi-admin/src/main/resources/templates/outsource/materialRequisitionOutsource/add.html b/ruoyi-admin/src/main/resources/templates/outsource/materialRequisitionOutsource/add.html index 9932c37c..96749e78 100644 --- a/ruoyi-admin/src/main/resources/templates/outsource/materialRequisitionOutsource/add.html +++ b/ruoyi-admin/src/main/resources/templates/outsource/materialRequisitionOutsource/add.html @@ -390,47 +390,9 @@ // $("#form-MaterialRequisitionOutsource-add select[name='stockName']").val(orderData[i].stockName).trigger("change"); // $("#form-MaterialRequisitionOutsource-add input[name='stockNumber']").val(orderData[i].stockNumber); // $("#form-MaterialRequisitionOutsource-add input[name='stockManager']").val(orderData[i].stockManager); + showMaterial(); } } - $.ajax({ - url: prefixOrderMaterial + '/list', - type: "post", - data: { - outsourceOrderNumber: outsourceOrderNumber - }, - success: function (res) { - // console.log(res) - $('#addMaterialTable').bootstrapTable("refresh") - $('#addMaterialTable').bootstrapTable("removeAll") - // console.log(res.rows) - if (res.rows.length>0) { - let data = res.rows; - var count = $('#addMaterialTable').bootstrapTable('getData').length; - var materialRequisitionNumber = $("#form-MaterialRequisitionOutsource-add input[name='materialRequisitionNumber']").val() - for (let j in data) { - $("#addMaterialTable").bootstrapTable('insertRow', { - index: count + j, - row: { - materialRequisitionNumber: materialRequisitionNumber, - materialCode: data[j].materialCode, - materialName: data[j].materialName, - specificationModel: data[j].specificationModel, - inventoryUnit: data[j].inventoryUnit, - planQuantity: data[j].quantity, - description: data[j].description, - unitUsage: '', - bomRank: '', - upFinishProductCode: '', - storageLocation: '', - materialType: '' - } - }); - } - } else { - $.modal.alertWarning("该订单内无物料,请先添加!") - } - } - }) }) } }, @@ -438,6 +400,48 @@ $.modal.msgError("后台出错啦!"); } }) + function showMaterial() { + $('#addMaterialTable').bootstrapTable("removeAll"); + var outsourceOrderNumber = $("select[name='outsourceOrderNumber']").val(); + $.ajax({ + url: ctx + 'manufacture/materialRequisitionInfo/selectOutsourceDetail/'+ outsourceOrderNumber, + type: "post", + // data: { + // outsourceOrderNumber: outsourceOrderNumber + // }, + success: function (res) { + // console.log(res.rows) + if (res.rows.length>0) { + var count = res.rows.length; + var data = res.rows; + var materialRequisitionNumber = $("#form-MaterialRequisitionOutsource-add input[name='materialRequisitionNumber']").val() + for (let i in data) { + $("#addMaterialTable").bootstrapTable('insertRow', { + index: count + i, + row: { + materialRequisitionNumber: materialRequisitionNumber, + materialCode: data[i].materialCode, + materialName: data[i].materialName, + specificationModel: data[i].specificationModel, + inventoryUnit: data[i].inventoryUnit, + planQuantity: data[i].planQuantity, + description: data[i].description, + unitUsage: data[i].unitUsage, + bomRank: data[i].bomRank, + upFinishProductCode: data[i].upFinishProductCode, + storageLocation: data[i].storageLocation, + materialType: data[i].materialType, + } + }); + } + } else { + $.modal.alertWarning("该订单内无物料,请先添加!") + } + } + }) + } + + //获取单号 $.ajax({ diff --git a/ruoyi-admin/src/main/resources/templates/outsource/materialRequisitionOutsource/materialRequisitionOutsource.html b/ruoyi-admin/src/main/resources/templates/outsource/materialRequisitionOutsource/materialRequisitionOutsource.html index 84be7188..57e8d3e3 100644 --- a/ruoyi-admin/src/main/resources/templates/outsource/materialRequisitionOutsource/materialRequisitionOutsource.html +++ b/ruoyi-admin/src/main/resources/templates/outsource/materialRequisitionOutsource/materialRequisitionOutsource.html @@ -250,7 +250,7 @@ // console.log(data[0].orderNumber) $.modal.confirm("是否确认要导出本条领料单?", function (){ axios({ - url: prefix + '/exportSelectedOutSource/'+data[0].materialRequisitionId, + url: prefix + '/exportOutsource/'+data[0].materialRequisitionId, method: 'POST', responseType: 'blob' }).then(response => { diff --git a/ruoyi-admin/src/main/resources/templates/quality/qualitySupplierDeduction/add.html b/ruoyi-admin/src/main/resources/templates/quality/qualitySupplierDeduction/add.html new file mode 100644 index 00000000..fc6bf28f --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/quality/qualitySupplierDeduction/add.html @@ -0,0 +1,184 @@ + + + + + + + + + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/quality/qualitySupplierDeduction/edit.html b/ruoyi-admin/src/main/resources/templates/quality/qualitySupplierDeduction/edit.html new file mode 100644 index 00000000..d6e4bd0c --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/quality/qualitySupplierDeduction/edit.html @@ -0,0 +1,184 @@ + + + + + + + + + + + +
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/quality/qualitySupplierDeduction/qualitySupplierDeduction.html b/ruoyi-admin/src/main/resources/templates/quality/qualitySupplierDeduction/qualitySupplierDeduction.html new file mode 100644 index 00000000..b6478ca9 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/quality/qualitySupplierDeduction/qualitySupplierDeduction.html @@ -0,0 +1,217 @@ + + + + + + + +
+
+
+
+
+
    +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • +  搜索 +  重置 +
  • +
+
+
+
+ + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/ruoyi-admin/target/classes/com/ruoyi/manufacture/controller/MaterialRequisitionInfoController.class b/ruoyi-admin/target/classes/com/ruoyi/manufacture/controller/MaterialRequisitionInfoController.class index 7f5a8c508b9e741f10028708922de22ba3850cf0..a8d99a3603b3d178cf813d0b60231b4aef83cf69 100644 GIT binary patch literal 33429 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

gwm2f%Q5dzS80tXr)RAga zXF7&n3sZ<1&~Z9}lId$Y2@f2x^9RJ()BA*Xbrh-X5oP&Ji1kfS_E*D%QyB5h?Zo5h zTRL4<{|>e9%M}jN*HBnQB*Yqucmp%VPy6UfY5&1b`;XB6Q@M8g^;-ioqyAobUZs?u z@l$>l%76A#zPoP)UreZ!!e9Ip{tAV^(eI9P>-S6aI9m@P4Q_Z85t>DzG}}>H(`k$L zIhZJ#{-8fGITR@Si_Ss8dCXC9^R`?-iwZ+^%qtJWMY@C$-jH0T67(}-=q!)=Sh7Fr zSJU5yCt$-oXq0i%37OTijs}c7#jtwcWh$x{94+%azxGBPi zhiEd`%@*RXkP!pD-ads4Z(lI_6h<0CR~be)ghNRp#(=qnUe0eR#39DQcB{W zB;HTS>lKyksg#lgD8X4&X36fpfnDqTJ>%@Fl)@TNSksFH`_6$iyddzh?Qute3MK)L zUV2tFFBx1N%vyfIRI#k>7t2^*EbDMx06~H7UX%(}DJiQcHgz2(3H59cVP6_p%O8lp z0!Y76B+})W8ta`=W=jeuauULg9!}v* z;DQb2b+DoFHEd{7MoJmLhmZ$=D@90(fR7TdIJG(2v8M7UZF&VtoB5%%xeui+xTO!J zc7wt3emTLl{(d!Xg^QW@B36;$Zn$E#)_$wqs8)0QVBvj>+jueA3e}sqt#^HX7^S^! z@N-@pT2lyS)F&OYLIC0zZa~SLMvb^3wdQoXnH%BzNMjnxO=uEI55_#mE$A`qN99jn zGANT$xgEF1#VnZyI=K=+ji?uQ;EohXH&ZKz(t~hSE8+}{Q`ZBVJf-Px`?eYa#hth_ zLR5MeaHet>3gVkFr4lXa(yA{g3Ky_o*Aqcfj#SiWd$Yr8z+Y@_PZ} zqk!=oir_I6$9GXJ9tVccqo$ls?fGuHg$t+$Zu)(=kOp%RqUwRp88@mgul zZ%Ze9yzIy8Wf-a;#2VnVxcgpX)LN4=8Es1xjNPx)` z@Df>%hwz=qG%Z1F5}y!}s8IBZzL1!#s)a1!wh;FA?Ld z;ITfk50TzVE}DvOQ;NMznk)18KE5C4^&)u$7&wP~StcHyidrxNk;l_8BLt!726Sx2 z<`j8>gB;^M;{cZ^@3Q<)EbAx%qxqEZgHQr)gZn~DXd;;ob3LTZtSV;1cdi5tX0iwN&SS z>Bs`L{v7ws5MA-V1UH_T|Dz^C_Rb+kT|fx}T{$Osl=JY1V*<`APs_&(&-P7(0o9#7wzLGfnr^m zT$)mx#3S$_2uBfWPXW)ksiUUQuEF#K5Y{u;W;~nxEZPDcw5ykUM;kxq)y7i+Y|T50 z7j&UO=lpI!h+JQCIS5$j1O=g4ry)OsF16Mg|#mlu76{_U9l;`QYY zY67#)0}>ZN=odlgmq6$^`eAKT(Ws3CBEf^Guehi`e&87*@QYYlf=?asY-jL8l8|h4v=_!&QD;Mc&c->)Zl7TlktlU zr$`-6M@JK>%dI7myMk#mC7B0FeI6|-JW*2lA!)$#B#oCyLr`)$Z;(cO0&{+lMiM2B zoxtq?N!*Q7UvaCOCQ~zqTP^BOcR1wf0(>$Rd3u1bwZ34wxHV08I5QY2TI6tM2oItW z4rhkq@^;eUOg9`^_T@#QOF0uYA7{d2>IDp($>+JyOPN5I_xjcbCygRNP$utUk77Wb z`tl|R69%2&CJqC-*x+D?0nJiO_)M7&PIRV%_Ixve4#R=OPO?g{HTPAdfZLpp!n_Q2 zj`}%dUTL1t6 diff --git a/ruoyi-admin/target/classes/com/ruoyi/manufacture/domain/MaterialRequisitionDetail.class b/ruoyi-admin/target/classes/com/ruoyi/manufacture/domain/MaterialRequisitionDetail.class index ab06bcbb5827ecd4ba0fca0cc6dc9f354cc51c5a..590e9e33a2c56ce9944b39f17cc6ecf7b1d45056 100644 GIT binary patch delta 1472 zcmZ9LTWnNS6o&uZGl$tTb7necW{{W|@qvcWqBLrFurUf44IzYJky=QF+RzKo4lS)x z6ly_HE&}yHLZT8#KrYIqj?8qSb$`*$D|R|C)2o_ph~Q z@BM#W^UKuq)v?p(06dJ#Nz@JHo*qcx5gdx+Z~{kgG>JUkx0sRS%Maw?n8hr4IBqdp z>IsWEQcqgUl{#!OPwIyj^QD$7>ZN{U@r=|Fiw3D5TQo`?wOB0mltq)&Piicd$dA(& zOQn8l(Jb|hMT^w4vWjzYoR8x|DPe9^n90#lEFX0yQtA5Mo{p}zx+x0{?p+-{8k<LRhdIP*5vPNXB z$V(#YMP3ovAo8lnCXqKpwuo#K*)Fm}WJn}Jufg<|V&}A;zG8pJw9e+PzSic_V>ag1 zR>5$5E47UW@er$F^{Yo=hWVoc?bIYIP>&cEM1#Tj<;$?r85;S;Fi3`Ew(l2L|4?EDMZJD&~Ji|=c3`% zM34Iv&Clnfn?Y!vm*sff=uz(NROq*oYa=%yRqkhGHw_c?xgI`oU=S1CVR z=Ns90;dA~;F01_i$LYd))%>C}pQm{Z&HZYgn|D*rgS6WX`I_2pev_VF+@C1qc8ebRV zsQhBbGXcWqGIyTZB{gq$=AATOq4}zso1B@+(P7teq4`Srt&YDtANt>r|5o_uY|eTN z7}-hYJLTSV+z;fgk^5fzE_HpGLtRvO=c0a8GZU&~s|%C8ovu-P;r=KnSdYQgZ$;kn z>q@`nh)GPtZyfczj*_fMW|{G5U*U4c4JPalOu(N^*iB5qUw9CIqYk&o{e!vqmsuRc v68wjD2EE%DtTh$bXgq8)G3+)z_L^}xVB$E08=BNWFaKeeRD)d_i{1YN-RwTg delta 1330 zcmZ9MS!_*V5Xb*tkK=y#I``^#@6{$E;lYy9B0?YP#TJRsh^3^YEvc=PE)=b$_O;fd z4-!ivqNQ|ETkX4q2NEP6M0gNS_FZi=(=U;D`Op34{AT7mb7t<#)CYZ{cYmM13}7H` zhcFn`L1gR-kFN}%CWu-b4IzeO8bd?KKph{BYYgYZ35`)~>orERZP3VM+o&;?ZIi}0 zwkI_vux-}JVtYzsGTYM{*=)~fOl5mkBZuudjl2+gW}ro58avKwOlNyRBcJU>zQv^g zE(dU>IjC9_n)|j(cl1yU^DrDE{F1;(?I9l{6#Dxrm{K{cte|kl%+dg^dboz`9%kZ( zhXp9|a1*yYlwzTWGL|JQSSML_ZQRhqS#oBYsn)lT(QKzKO;C z7SFg@a52e$5l;4VJnhi!{r6sXHAT2$lnD1LZrohr@|f#D&5#oGe#FN7D{-UpgpdOoEo$0{6nk zEhnx*E|h66L>(4BDPq)0;i=u?IY^#08ig z={Wn8zMABEO1XAQ_LY{OMf@J(tC{z^Bx;8~F0;{KSk$=Jh`lbkb8K#!V&QY6M%@;Ei{D+A zf)+$j5KLr3d_WKtL{u)NLbX`*!3Q+)0Zn`WqYvOhJ`T}=kr2IjGQ?4Q65=ToLM#+nB(g;0X_4h3 z&xouNc}`?NQzV^B8?Z;%fOJW5S5 z0uNven&bXV)j$Wjonbm>WG*F!x;qaeal@5?&zTmw9z-cx@fhE#i!>fb7vCf^7p_G+ z(BpE>AtTQ0^_+g)UH?fuIbu$rjXH~&XCs4$H2b)s@1N{h*->3kR_i4A`~>F5`SQxR zr_2U(5uiQpv}4PPoF|(d4~7+ye~<-=i!adxd0Du>0NrZ-K4pV0n!D9}eF;1tF~_xK z*6UTi&+!*ntU$g``1qF4_&i2s8$#TBJU0eBKZ(l1p1}of>&vbYvq(Ht5JwSN3??2Ak=AMawq1vdi3TWyS_u zI2-G1&du`PX||4x^m;@!0`d=yKM2hm>VI=*XmU>mAXN)#|PZM(8}MW!qfY zHO0Ku>6>@=Q=*?~k@MxoXLD)F&|2?vO}W;6&`fKC<7B@edz;VxQ*JA{uasNoxNpdv zAosQ8+!7g|U8?AO8C-uvwJV$|;u!Fzw&y8w(u zhY#bhs~?j0`O~YtXy}JV9Q7fHV+s>|NXBt~IiWC#Urs8da6F|jjpJ#BRE}p9(m0+~ zNauJ?VFt(Z3K<+PC}eWHsF20+lEQ3`mld)(HYw!zFfbWc6z21XW`!`vtK7ZCi&ihL zHUH|2aesKi1Nx6hTN+sr2^B?(3qqL{Wrf8B<44YF$?CH;Moqv(2a_<_ec5+S^>qg~ z(B@zPZaP?kLI>@*<)8>r2PG`aS;|=|SXQ!Bv8-WP$FiQKhGiqmCYCKM+gP?EYGFuj zNil1AvnLliBF_NW`Mn&}}1i%9#* z$AH@t*Wa@k1#WX}qC4Hu_DtBwaCKZ#ENx6mX&dg4K!RKEXe&$jrC3J%a66mWxx&)^ zg{6%O8&7Ol*kWN5-AClTi1=LLQw&dM!hEpLm0k-gkm6EPywI=hWmH_m#qKV@^3XX- zqYHj*l?q#C*tf)15L+pYQcWW|a^ivi9bgCap5x!PuEDc7u$P#r=^%KnAi=}+Bz>^s*T+|t?kQX z*CcjX#%_bjo~3LHWm_dX+hpmciraT`YZJHHfBb;J|J&xHTL*MdaVHnM;h^%+?Uur| zL2ccZ!aCEaJ*e$F#NL%gIi?W}g79{Nw(beP+3-^mwEckiZt*TnP#&5WVRsYzP}r@8 zy-(~TVjqil*m%=u37?dxttZ0MoVk+|yYhPwz%wM_IR@heM&c#L;1$N>HKyVX((x9v y@Q%jqJ&pSZ8t;!-jZZYWpRp5PZ~$L%7~jx<9^}#qI5KsO$U{E8S=b@he&=7%9x9js diff --git a/ruoyi-admin/target/classes/com/ruoyi/system/domain/SysBomRawMaterial.class b/ruoyi-admin/target/classes/com/ruoyi/system/domain/SysBomRawMaterial.class index 53315676a4d8efc1a9bc8ef332081cdc59a49078..0ec9133a722753c322182cd85b7383662e3ecf5d 100644 GIT binary patch delta 767 zcmYMyO>9h26bJDCoj2FVo7b7SgBc5HSV*cCuVE!VRy2YJ2_=&0hgLg6w4{;IkeC@k zkVss_f`vs%Ea+q+t;7O}q)56biG>#RQIte%t^DWAO>A!7$?tz|PVPIUhIb9aW1ek_ zF1BM{uCh5=jLch)4FT3-ot>Cd@_Lc0?47&CODuyz7HvG+0j#!VKOOTC;rBK~(PGQV zMSHU7cHT^>n%_7A)wuE@B4t()bnuMBcsp8XSFV8>%d?W@k<9YnX}|N2I^G2dRz+u>Nf-Na0nWDdJb z5E$LdOinUuf>0e2KO(+d_tE;rp3w%x`dx2*ozZ#v3GuCUp*kgg%=uk1(pyM|szT4G+A~g3N2sHsz6sT1=|1hcdyLUf=ugEh{keG2 z`EU9Q`b+U8sZfoJpK+c~89hONEj~nlTXj2|8tt6qs!Sn+_gIP#Sb>jNg=uc)Cv3!L vwBQR`@s;a1gB-r$D86G5KTyIfF5xGx;1{l8Qr0WrvH;iJdMTV^6~Xy`OVh%r delta 679 zcmZ9~%}dll7zgn0_-oYMpSzAPyAU3X3RVaPf==rTgcU@RP>3C@R@B`US#n!eQBiR> zD5xNZ3XCYILxMq@6j4w_K^_X!gJxU#QhA9E{Q;rRKF-O@GYp^a_kn@Q1=GQ&vyNGH zqW-Gj$)0d3tb4=ph(4W6#Nv@qZR^ajU73R75b9jiqrof`rk!p?X4;BQIKCPPwBsDj z^8mETmiUVb=>~YsJGaW|M3>pCDoxI#0-&sWzYv{u|2JsVV{K7T-#soHS3yY?) GvU&?g+_}jB diff --git a/ruoyi-admin/target/classes/com/ruoyi/system/domain/SysBomSubsidiaryMaterial.class b/ruoyi-admin/target/classes/com/ruoyi/system/domain/SysBomSubsidiaryMaterial.class index 39eae752b3337726dbfaff11e11316fbfed55c82..a308792adef63227947b9dc9e5fefce7073b45d3 100644 GIT binary patch delta 1060 zcmZ9LOGs5w6o&tO?>&|G9Itm@UrnNf8fXKd1`R4Hib7CIB85crRhnjLW~r5FT1H8P zCxgNoG_XNXhDtV&UeKTh4Js(Yo|e6wI0zcmzt`QDpvliUdw=U+d#|-uclPV-k-4CM zF0{~}3l0U+TKs#V^wG&sZ@^uPJP)g}#={1`V1C!OTGV+M!?=e=)O*-tWWSMSBP~W+ zjT|=8ZsdrOV@8e}={C}1piqW#>P`SF{aiQ04I{ws0)$ZLuaBjd zl%dA%Z{m*G3+LQ{%2_^+z-|5oP(h6#NZrDytw=%^JL7mp7JOUf1uArVe;o?J!3O^1^1pf60|{S!qCx7@VO&6%DG5f#2YT zReZh8)lMzf>%=&bmemuVN3K?T#b=-ONln&H6ZvNGS(hAEak4yFt5zYKEICB7on(hN zZ?+d=BgA=ze5ddSgkR>IAloBszGc}jVVfda^$B~>df$v_=PdbtImMeu;uOD0o)_|v zC0C_r=K{$=aW1sZ?7wl2C5^D!@xIJsMS)8a+-8ICGx!RFuS%NPltdags?{|iJ1m(W z)y^=<>yoC(rs3manx*Q7ut(!;hWGC=#GlYD298LIKhZ>rMOv#d3G1{eO0{+-NZuux zWvf0+YEq~!OHGq{K$c;ysd{aa+>9hTrdvhe{c@R4)-2^%quLVQLs qzHqW;P=~La)oE5sWY{B0|A!Yd2b4sI3yPh_5PEO{?{hYPD%K(KI0V zfL^Q%7Ye#iK`_R+P)ipTbfKb~YJ9f7Htvesg6E#zm79N0#RB)k47UrTwWTL04qBh_f7wO&2;QwaRwI5V1+IxSvtmk$ECVxZ^!rcdQXpVBeteHG~{lB5I6%8;p+*TeXK= zae>*BhP^`UC1NkL@mWY4Ul29U)G0$XhaEXV)HODC86$l(wK?pH>&y->vWdX|$9{tf zZ?gVPSnKOla+^y=jDDr#$U8*cWqrozX%f_4#})UPJ!9A^u@zz;vT@eY#y>sceXc{?PaSikulZShsMZ5ZLFa&)T9!5Xf`zADhY}_ zYz#aQgNcm+C&Xa1ftuKu8eP*8ZA=MWu^^S;r9py4%dOV6w3H%LtkpAT{sz;Ro!xxC z=Rdcdd8;|ooZ6OchaXzIHL*M4Y)|aiMBntR4<1#IG!kfl(){@)5k1OV@K#lSM);J!Sagy7TR~;kk{#1|xEJt|iC@rQ=`ig(qeocdPihp@4^HIr8zos*8!Vb9?Lt1@6 zin`o^!ic*kl;a(%`&~i48xL!Ad;1TZrPI=G3~TiXw<&3}!%_ERZhEEp)-)5`e9ldu zGzYk;wKe*s`Cgj18emV07ur$x1pA=)uvuf?*6Iv5L(+6|(-_e>C(U`&?2l;m12@Cc ztcpbQa#DPP{sqjEt9n5OE|`Jk1zL^pz$F>zjYQoI1sa#7xoDch++62oOqwSOqV6?r zGSZCrjs3qX?%$_L9+;AWK^}NFq%k7{KbwIE?%yJR;4Tl$%D}UQ4(22tHAm20xIByh z5eneoDGN&UiqXf4v|7xVE7OT02SN4-{M*ydn#Y^(8RP3qw0f9*wfJi#4r;_Fe7Ex!oG2dWxK`re3I}x(PnyNHuF&d9 z_BG;fv)7B?G(N-rG<&0XEb5?1{Fd=oqgt(FZx;WMy+!;s`*bv}USQiGR>Z^bE>i?oD2A(4g=r{s^s>iR?gmG%YZ`6tmZN~4k6BCrg4cdoE zYR42E!cFSHGBUm4c8eEEebOWOl)Lkfyxj{5s$|4BH>dbl}hhnvT%sKxIlUxA|kuwU(QvYc7+X`>t;!66Xs&22IJ;|BMnUk$pKpLxITGoBPY zv#2&i4@F;h+qM^J6(WT!0Y{4ra-|PQPpYZh@}Al>akUrx2>=LaE_nFdHmKZ!E{Z`Pu!i+1$bBt#T z9%cNZ;4!ysp|90T+~?VpUxzwrcUCT$jo8 zxSJm2{ucM;(hJKBQqm_}Utgxx+uT=5-^G2c^hwtzxHoWLFFpCV!TZu51l=pjyv$9E zHw!+$2~#JanrTawc5wvTLEuQH)syP6bITE9AI!zzyO280myS; zZc?iw4B7;|n>1(-K)wTK7#wGCLclnKjx?~(S60h=%oqEJqfM3aBJ-=C{(t$t(%@XM zOFIy&(yE(xT}*@4m#a47qsvr)9*W`@D#I13K`%XxKAMAmnvbir2-m0{*J%ZA&}t0O z2K-7}Fi4HKN!u|*JMkOs#xU*2@6>`3I*LE&ByLeBMyVTP)Qj6Rh&wcjKWPGY0o+3# i#!-mBkiZ0z9`2(SlbD6SF&7U|hkvjDm+k8{iGKkGgr#-> diff --git a/ruoyi-admin/target/classes/mapper/manufacture/MaterialRequisitionDetailMapper.xml b/ruoyi-admin/target/classes/mapper/manufacture/MaterialRequisitionDetailMapper.xml index d4a540be..376b4645 100644 --- a/ruoyi-admin/target/classes/mapper/manufacture/MaterialRequisitionDetailMapper.xml +++ b/ruoyi-admin/target/classes/mapper/manufacture/MaterialRequisitionDetailMapper.xml @@ -35,6 +35,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and material_code like concat('%', #{materialCode}, '%') and material_name like concat('%', #{materialName}, '%') and material_type = #{materialType} + and up_finish_product_code = #{upFinishProductCode} diff --git a/ruoyi-admin/target/classes/mapper/system/SysBomBcpMapper.xml b/ruoyi-admin/target/classes/mapper/system/SysBomBcpMapper.xml index 9e3278ff..8dcd4388 100644 --- a/ruoyi-admin/target/classes/mapper/system/SysBomBcpMapper.xml +++ b/ruoyi-admin/target/classes/mapper/system/SysBomBcpMapper.xml @@ -123,5 +123,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{bomBcpId} - \ No newline at end of file diff --git a/ruoyi-admin/target/classes/templates/manufacture/workOrderInfo/add.html b/ruoyi-admin/target/classes/templates/manufacture/workOrderInfo/add.html index 37468848..3c68a79e 100644 --- a/ruoyi-admin/target/classes/templates/manufacture/workOrderInfo/add.html +++ b/ruoyi-admin/target/classes/templates/manufacture/workOrderInfo/add.html @@ -919,13 +919,6 @@ $("#bomMaterialModal").modal("hide"); } - //半成品二阶bom - function bcpList(){ - $.ajax({ - url:ctx+ - }) - } - //添加BOM材料信息 function addBomDetailToTable() { var dataRaw = $("#rawMaterialBomTable").bootstrapTable("getSelections");