一. 效果图
二.Java部分
1.1 Controller部分
package com.ruoyi.web.controller.gson.warehousemanagement; import com.alibaba.druid.support.json.JSONUtils; import com.alibaba.fastjson2.JSON; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.constant.PathConstant; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.ErrCode; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.SwException; import com.ruoyi.common.utils.FormExcelUtil; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.common.utils.ValidUtils; import com.ruoyi.system.domain.Cbpi; import com.ruoyi.system.domain.Cbpm; import com.ruoyi.system.domain.dto.*; import com.ruoyi.system.domain.vo.*; import com.ruoyi.system.service.gson.BaseCheckService; import com.ruoyi.system.service.gson.TakeGoodsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import com.ruoyi.web.utils.Excel2PdfUtil; import com.ruoyi.web.utils.FileCopyUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.poi.ss.formula.functions.T; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.http.MediaType; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.ArrayList; import javax.validation.Valid; import java.util.List; /** * ClassName TakeGoodsController * Description * Create by gfy * Date 2022/8/10 16:56 */ @RestController @RequestMapping("/whmanagement") @Api( tags = {"提货单模块"} ) @Slf4j public class TakeGoodsController extends BaseController { @Resource private TakeGoodsService takeGoodsService; /** * 导出提货单excel详情 */ @ApiOperation( value ="导出提货单excel详情", notes = "导出提货单excel详情") @PostMapping("/exportDetail") public void exportDetail(@RequestParam Integer id, HttpServletResponse response){ String excelPaht=""; try { long time = System.currentTimeMillis(); TakeGoodsOrderDetailVo res = takeGoodsService.takeOrderDetail(id); InputStream in = null; XSSFWorkbook wb = null; // in =Thread.currentThread().getContextClassLoader().getResourceAsStream("D:\\data\\模板.xlsx"); excelPaht = RuoYiConfig.getSwprofile() + "提货单_" + res.getOrderNo() + time + ".xlsx"; File is = new File(RuoYiConfig.getSwprofile()+ PathConstant.TAKE_ORDER_DETAIL_EXCEL); wb = new XSSFWorkbook(is); genarateReports(wb, res); String orderNo = res.getOrderNo(); saveExcelToDisk(wb, excelPaht); FileUtils.setAttachmentResponseHeader(response, "提货单_"+res.getOrderNo()+time+".xlsx"); FileUtils.writeBytes(excelPaht, response.getOutputStream()); } catch (SwException e) { // return AjaxResult.error((int) ErrCode.SYS_PARAMETER_ERROR.getErrCode(), e.getMessage()); } catch (Exception e) { log.error("【导出提货单excel详情】接口出现异常,参数${}$,异常${}$", JSON.toJSON(getUserId()), ExceptionUtils.getStackTrace(e)); // return AjaxResult.error((int) ErrCode.UNKNOW_ERROR.getErrCode(), "操作失败"); }finally { FileUtils.deleteFile(excelPaht); } } private static void saveExcelToDisk(XSSFWorkbook wb, String filePath){ File file = new File(filePath); OutputStream os=null; try { os = new FileOutputStream(file); wb.write(os); os.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try {if(os!=null) { os.close(); } } catch (IOException e) { log.error("error", e);} } } //导入模板2 private static void genarateReports(XSSFWorkbook wb, TakeGoodsOrderDetailVo res) { XSSFSheet sheet1 = wb.getSheetAt(0); // XSSFSheet sheet2 = wb.getSheetAt(1); // 设置公式自动读取,没有这行代码,excel模板中的公式不会自动计算 sheet1.setForceFormulaRecalculation(true); // sheet2.setForceFormulaRecalculation(true); /***设置单个单元格内容*********************************/ // FormExcelUtil.setCellData(sheet1, "2020-07报告", 1, 1); /***第一个表格*********************************/ // ExampleData ea = new ExampleData(); // List<List<Object>> data1 = ea.getData1(10); int addRows=0; //动态插入行 //FormExcelUtil.insertRowsStyleBatch(sheet, startNum, insertRows, styleRow, styleColStart, styleColEnd) //按照styleRow行的格式,在startNum行后添加insertRows行,并且针对styleColStart~ styleColEnd列同步模板行styleRow的格式 // FormExcelUtil.insertRowsStyleBatch(sheet1, 4+addRows, 21, 4, 1, 4); FormExcelUtil.setCellData(sheet1,res.getOrderNo(),4,2); FormExcelUtil.setCellData(sheet1,res.getCustomerNo(),4,4); FormExcelUtil.setCellData(sheet1,res.getOrderDateMsg(),4,7); FormExcelUtil.setCellData(sheet1,res.getCustomerName(),5,2); FormExcelUtil.setCellData(sheet1,res.getWhName(),5,4); FormExcelUtil.setCellData(sheet1,res.getSaleUserName(),5,7); // FormExcelUtil.setCellData(sheet1,res.getSaleUser(),5,4); // FormExcelUtil.setCellData(sheet1,res.getCurrency(),5,6); FormExcelUtil.setCellData(sheet1,res.getContacts(),6,2); FormExcelUtil.setCellData(sheet1,res.getPhone(),6,4); FormExcelUtil.setCellData(sheet1,res.getCurrencyMsg(),7,2); FormExcelUtil.setCellData(sheet1,res.getReceiver(),7,4); FormExcelUtil.setCellData(sheet1,res.getReceivPhone(),8,2); FormExcelUtil.setCellData(sheet1,res.getReceiveAdress(),8,4); FormExcelUtil.setCellData(sheet1,res.getUserName(),15,2); FormExcelUtil.setCellData(sheet1,res.getAuditUserName(),15,4); Double sumQty = res.getSumQty()==null?0:res.getSumQty(); FormExcelUtil.setCellData(sheet1,sumQty,11,4); List<TakeOrderGoodsVo> goods = res.getGoods(); List<List<Object>> data1=new ArrayList<>(); for (int i=0;i<goods.size();i++) { List<Object> rlist=new ArrayList<>(); // SaleOrderSkuVo res=new SaleOrderSkuVo(); // res.setGoodsName("aa"); rlist.add(goods.get(i).getBrand()); rlist.add(goods.get(i).getModel()); rlist.add(goods.get(i).getDescription()); // rlist.add(""); rlist.add(goods.get(i).getQty()); rlist.add(goods.get(i).getScanQty()); rlist.add(goods.get(i).getRemark()); data1.add(rlist); } // FormExcelUtil.insertRowsStyleBatch(sheet, startNum, insertRows, styleRow, styleColStart, styleColEnd) FormExcelUtil.insertRowsStyleBatch(sheet1, 10, data1.size(), 4, 1, 7); FormExcelUtil.setTableData(sheet1, data1, 10, 1); // addRows += data1.size()-2; /***第二个表格*********************************/ // List<List<Object>> data2 = ea.getData2(); // FormExcelUtil.insertRowsStyleBatch(sheet1, 10+addRows, data2.size()-2, 10+addRows, 1, 6); // FormExcelUtil.setTableData(sheet1, data2, 10+addRows, 1); // addRows += data2.size()-2; // /***第三个表格*********************************/ // List<List<Object>> data3 = ea.getData3(); // FormExcelUtil.setTableData(sheet2, data3, 3, 1); } /** * 销售提货单打印 */ @ApiOperation( value ="销售提货单打印", notes = "销售提货单打印" ) @PostMapping("/printTakeOrderOrder") public void printTakeOrderOrder( @RequestParam Integer id,HttpServletResponse response) throws IOException { InputStream in = null; String excelPaht=""; String excelPaht2=""; String pdfPath=""; XSSFWorkbook wb = null; try { long time = System.currentTimeMillis(); TakeGoodsOrderDetailVo res = takeGoodsService.takeOrderDetail(id); // in =Thread.currentThread().getContextClassLoader().getResourceAsStream("D:\\data\\模板.xlsx"); excelPaht = RuoYiConfig.getSwprofile() + "提货单_" + res.getOrderNo() + time + ".xlsx"; // FileCopyUtils.copyFile(RuoYiConfig.getSwprofile()+ PathConstant.TAKE_ORDER_DETAIL_EXCEL,excelPaht); // File is = new File(RuoYiConfig.getSwprofile()); excelPaht2 = RuoYiConfig.getSwprofile() + "模板提货单_" + res.getOrderNo() + time + ".xlsx"; FileCopyUtils.copyFile(new File(RuoYiConfig.getSwprofile()+ PathConstant.TAKE_ORDER_SUGGEST_EXCEL),new File(excelPaht2)); File is = new File(excelPaht2); // wb = new XSSFWorkbook(is); genarateReports(wb, res); String orderNo = res.getOrderNo(); saveExcelToDisk(wb, excelPaht); //转成pdf pdfPath=RuoYiConfig.getSwprofile()+"提货单详情_"+res.getOrderNo()+time+".pdf"; Excel2PdfUtil.excel2pdf(excelPaht,pdfPath); // in=new FileInputStream(new File(pdfPath)); // in.close(); // response.reset(); // response.setCharacterEncoding("UTF-8"); // // 定义输出类型 // response.setContentType("application/octet-stream"); // response.setHeader("content-type", "application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=" + "销售订单_"+res.getOrderNo()+time+".pdf"); // response.setHeader("Content-Disposition", "attachment;fileName=" + "销售订单_"+res.getOrderNo()+time+".pdf");// 设置文件名 IOUtils.copy(in,response.getOutputStream()); // StreamUtils.copy(in,response.getOutputStream()); // response.getOutputStream().flush(); // return null; response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); FileUtils.setAttachmentResponseHeader(response, "提货单详情_"+res.getOrderNo()+time+".pdf"); FileUtils.writeBytes(pdfPath, response.getOutputStream()); } catch (SwException e) { // return AjaxResult.error((int) ErrCode.SYS_PARAMETER_ERROR.getErrCode(), e.getMessage()); } catch (Exception e) { log.error("【销售提货单打印】接口出现异常,参数${}$,异常${}$", JSONUtils.toJSONString(id), ExceptionUtils.getStackTrace(e)); // return AjaxResult.error((int) ErrCode.UNKNOW_ERROR.getErrCode(), "操作失败"); }finally { if(in!=null){ in.close(); } if(wb!=null){ wb.close(); } if(excelPaht!=null){ FileUtils.deleteFile(excelPaht); } if(excelPaht2!=null){ FileUtils.deleteFile(excelPaht2); } if(pdfPath!=null){ FileUtils.deleteFile(pdfPath); } } } /** * 提货单出库建议打印 */ @ApiOperation( value ="提货单出库建议打印", notes = "提货单出库建议打印" ) @PostMapping("/printTakeOrderSuggest") public void printTakeOrderSuggest( @RequestParam Integer id,HttpServletResponse response) throws IOException { InputStream in = null; String excelPaht=""; String excelPaht2=""; String pdfPath=""; XSSFWorkbook wb = null; try { long time = System.currentTimeMillis(); TakeGoodsOrderDetailVo res = takeGoodsService.takeOrderDetail(id); // in =Thread.currentThread().getContextClassLoader().getResourceAsStream("D:\\data\\模板.xlsx"); excelPaht = RuoYiConfig.getSwprofile() + "提货单_出库建议表_" + res.getOrderNo() + time + ".xlsx"; // FileCopyUtils.copyFile(RuoYiConfig.getSwprofile()+ PathConstant.TAKE_ORDER_DETAIL_EXCEL,excelPaht); // File is = new File(RuoYiConfig.getSwprofile()+ PathConstant.TAKE_ORDER_SUGGEST_EXCEL); excelPaht2 = RuoYiConfig.getSwprofile() + "模板提货单_出库建议表_" + res.getOrderNo() + time + ".xlsx"; FileCopyUtils.copyFile(new File(RuoYiConfig.getSwprofile()+ PathConstant.TAKE_ORDER_SUGGEST_EXCEL),new File(excelPaht2)); // File is = new File(RuoYiConfig.getSwprofile()+ PathConstant.TAKE_ORDER_SCANLOG_EXCEL); File is = new File(excelPaht2); wb = new XSSFWorkbook(is); genarateSuggestReports(wb, res); String orderNo = res.getOrderNo(); saveExcelToDisk(wb, excelPaht); //转成pdf pdfPath=RuoYiConfig.getSwprofile()+"提货单出库建议_"+res.getOrderNo()+".pdf"; Excel2PdfUtil.excel2pdf(excelPaht,pdfPath); // in=new FileInputStream(new File(pdfPath)); // in.close(); // response.reset(); // response.setCharacterEncoding("UTF-8"); // // 定义输出类型 // response.setContentType("application/octet-stream"); // response.setHeader("content-type", "application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=" + "销售订单_"+res.getOrderNo()+time+".pdf"); // response.setHeader("Content-Disposition", "attachment;fileName=" + "销售订单_"+res.getOrderNo()+time+".pdf");// 设置文件名 IOUtils.copy(in,response.getOutputStream()); // StreamUtils.copy(in,response.getOutputStream()); // response.getOutputStream().flush(); // return null; response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); FileUtils.setAttachmentResponseHeader(response, "提货单出库建议_"+res.getOrderNo()+".pdf"); FileUtils.writeBytes(pdfPath, response.getOutputStream()); return; } catch (SwException e) { // return AjaxResult.error((int) ErrCode.SYS_PARAMETER_ERROR.getErrCode(), e.getMessage()); } catch (Exception e) { log.error("【提货单出库建议打印】接口出现异常,参数${}$,异常${}$", JSONUtils.toJSONString(id), ExceptionUtils.getStackTrace(e)); // return AjaxResult.error((int) ErrCode.UNKNOW_ERROR.getErrCode(), "操作失败"); }finally { if(in!=null){ in.close(); } if(wb!=null){ wb.close(); } if(excelPaht!=null){ FileUtils.deleteFile(excelPaht); } if(excelPaht2!=null){ FileUtils.deleteFile(excelPaht2); } if(pdfPath!=null){ FileUtils.deleteFile(pdfPath); } } } private void genarateSuggestReports(XSSFWorkbook wb, TakeGoodsOrderDetailVo re) { XSSFSheet sheet1 = wb.getSheetAt(0); // XSSFSheet sheet2 = wb.getSheetAt(1); // 设置公式自动读取,没有这行代码,excel模板中的公式不会自动计算 sheet1.setForceFormulaRecalculation(true); // sheet2.setForceFormulaRecalculation(true); /***设置单个单元格内容*********************************/ // FormExcelUtil.setCellData(sheet1, "2020-07报告", 1, 1); /***第一个表格*********************************/ // ExampleData ea = new ExampleData(); // List<List<Object>> data1 = ea.getData1(10); int addRows=0; //动态插入行 //FormExcelUtil.insertRowsStyleBatch(sheet, startNum, insertRows, styleRow, styleColStart, styleColEnd) //按照styleRow行的格式,在startNum行后添加insertRows行,并且针对styleColStart~ styleColEnd列同步模板行styleRow的格式 // FormExcelUtil.insertRowsStyleBatch(sheet1, 4+addRows, 21, 4, 1, 4); FormExcelUtil.setCellData(sheet1,re.getCustomerName(),2,2); FormExcelUtil.setCellData(sheet1,re.getOrderNo(),2,6); List<TakeOrderSugestVo> goods = re.getSugests(); List<List<Object>> data1=new ArrayList<>(); for (int i=0;i<goods.size();i++) { List<Object> rlist=new ArrayList<>(); // SaleOrderSkuVo res=new SaleOrderSkuVo(); // res.setGoodsName("aa"); rlist.add(goods.get(i).getNumber()); rlist.add(goods.get(i).getGoodClass()); rlist.add(goods.get(i).getBrand()); rlist.add(goods.get(i).getModel()); rlist.add(goods.get(i).getDescription()); rlist.add(goods.get(i).getSn()); rlist.add(goods.get(i).getSku()); rlist.add(goods.get(i).getScanStatus()); // rlist.add(""); data1.add(rlist); } // FormExcelUtil.insertRowsStyleBatch(sheet, startNum, insertRows, styleRow, styleColStart, styleColEnd) FormExcelUtil.insertRowsStyleBatch(sheet1, 4, data1.size(), 3, 1, 8); FormExcelUtil.setTableData(sheet1, data1, 4, 1); // addRows += data1.size()-2; /***第二个表格*********************************/ // List<List<Object>> data2 = ea.getData2(); // FormExcelUtil.insertRowsStyleBatch(sheet1, 10+addRows, data2.size()-2, 10+addRows, 1, 6); // FormExcelUtil.setTableData(sheet1, data2, 10+addRows, 1); // addRows += data2.size()-2; // /***第三个表格*********************************/ // List<List<Object>> data3 = ea.getData3(); // FormExcelUtil.setTableData(sheet2, data3, 3, 1); } /** * 提货单扫码记录打印 */ @ApiOperation( value ="提货单扫码记录打印", notes = "提货单扫码记录打印" ) @PostMapping("/printTakeOrderScanLog") public void printTakeOrderScanLog( @RequestParam Integer id,HttpServletResponse response) throws IOException { InputStream in = null; String excelPaht=""; String excelPaht2=""; String pdfPath=""; XSSFWorkbook wb = null; try { long time = System.currentTimeMillis(); TakeGoodsOrderDetailVo res = takeGoodsService.takeOrderDetail(id); // in =Thread.currentThread().getContextClassLoader().getResourceAsStream("D:\\data\\模板.xlsx"); excelPaht = RuoYiConfig.getSwprofile() + "提货单_扫描记录表" + res.getOrderNo() + time + ".xlsx"; excelPaht2 = RuoYiConfig.getSwprofile() + "模板提货单_扫描记录表" + res.getOrderNo() + time + ".xlsx"; FileCopyUtils.copyFile(new File(RuoYiConfig.getSwprofile()+ PathConstant.TAKE_ORDER_SCANLOG_EXCEL),new File(excelPaht2)); // File is = new File(RuoYiConfig.getSwprofile()+ PathConstant.TAKE_ORDER_SCANLOG_EXCEL); File is = new File(excelPaht2); wb = new XSSFWorkbook(is); genarateScanLogReports(wb, res); String orderNo = res.getOrderNo(); saveExcelToDisk(wb, excelPaht); //转成pdf pdfPath=RuoYiConfig.getSwprofile()+"提货单扫描记录_"+res.getOrderNo()+".pdf"; Excel2PdfUtil.excel2pdf(excelPaht,pdfPath); // in=new FileInputStream(new File(pdfPath)); // in.close(); // response.reset(); // response.setCharacterEncoding("UTF-8"); // // 定义输出类型 // response.setContentType("application/octet-stream"); // response.setHeader("content-type", "application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=" + "销售订单_"+res.getOrderNo()+time+".pdf"); // response.setHeader("Content-Disposition", "attachment;fileName=" + "销售订单_"+res.getOrderNo()+time+".pdf");// 设置文件名 IOUtils.copy(in,response.getOutputStream()); // StreamUtils.copy(in,response.getOutputStream()); // response.getOutputStream().flush(); // return null; response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); FileUtils.setAttachmentResponseHeader(response, "提货单扫描记录_"+res.getOrderNo()+".pdf"); FileUtils.writeBytes(pdfPath, response.getOutputStream()); return; } catch (SwException e) { // return AjaxResult.error((int) ErrCode.SYS_PARAMETER_ERROR.getErrCode(), e.getMessage()); } catch (Exception e) { log.error("【提货单扫码记录打印】接口出现异常,参数${}$,异常${}$", JSONUtils.toJSONString(id), ExceptionUtils.getStackTrace(e)); // return AjaxResult.error((int) ErrCode.UNKNOW_ERROR.getErrCode(), "操作失败"); }finally { if(in!=null){ in.close(); } if(wb!=null){ wb.close(); } if(excelPaht!=null){ boolean b = FileUtils.deleteFile(excelPaht); System.out.println(b); } if(pdfPath!=null){ boolean b = FileUtils.deleteFile(pdfPath); System.out.println(b); } if(excelPaht2!=null){ boolean b = FileUtils.deleteFile(excelPaht2); System.out.println(b); } } } private void genarateScanLogReports(XSSFWorkbook wb, TakeGoodsOrderDetailVo re) { XSSFSheet sheet1 = wb.getSheetAt(0); // XSSFSheet sheet2 = wb.getSheetAt(1); // 设置公式自动读取,没有这行代码,excel模板中的公式不会自动计算 sheet1.setForceFormulaRecalculation(true); // sheet2.setForceFormulaRecalculation(true); /***设置单个单元格内容*********************************/ // FormExcelUtil.setCellData(sheet1, "2020-07报告", 1, 1); /***第一个表格*********************************/ // ExampleData ea = new ExampleData(); // List<List<Object>> data1 = ea.getData1(10); int addRows=0; //动态插入行 //FormExcelUtil.insertRowsStyleBatch(sheet, startNum, insertRows, styleRow, styleColStart, styleColEnd) //按照styleRow行的格式,在startNum行后添加insertRows行,并且针对styleColStart~ styleColEnd列同步模板行styleRow的格式 // FormExcelUtil.insertRowsStyleBatch(sheet1, 4+addRows, 21, 4, 1, 4); FormExcelUtil.setCellData(sheet1,re.getCustomerName(),2,2); FormExcelUtil.setCellData(sheet1,re.getOrderNo(),2,6); List<TakeOrderSugestVo> goods = re.getScans(); List<List<Object>> data1=new ArrayList<>(); for (int i=0;i<goods.size();i++) { List<Object> rlist=new ArrayList<>(); // SaleOrderSkuVo res=new SaleOrderSkuVo(); // res.setGoodsName("aa"); rlist.add(goods.get(i).getNumber()); rlist.add(goods.get(i).getGoodClass()); rlist.add(goods.get(i).getBrand()); rlist.add(goods.get(i).getModel()); rlist.add(goods.get(i).getDescription()); rlist.add(goods.get(i).getSn()); rlist.add(goods.get(i).getSku()); // rlist.add(""); data1.add(rlist); } // FormExcelUtil.insertRowsStyleBatch(sheet, startNum, insertRows, styleRow, styleColStart, styleColEnd) FormExcelUtil.insertRowsStyleBatch(sheet1, 4, data1.size(), 3, 1, 7); FormExcelUtil.setTableData(sheet1, data1, 4, 1); // addRows += data1.size()-2; /***第二个表格*********************************/ // List<List<Object>> data2 = ea.getData2(); // FormExcelUtil.insertRowsStyleBatch(sheet1, 10+addRows, data2.size()-2, 10+addRows, 1, 6); // FormExcelUtil.setTableData(sheet1, data2, 10+addRows, 1); // addRows += data2.size()-2; // /***第三个表格*********************************/ // List<List<Object>> data3 = ea.getData3(); // FormExcelUtil.setTableData(sheet2, data3, 3, 1); } //销售订单调拨建议 @GetMapping("outStockAdviceList") @PreAuthorize("@ss.hasPermi('system:outStockAdviceList:list')") public AjaxResult<TableDataInfo> outStockAdviceList(GsOutStockAdivceDto gsOutStockAdivceDto){ try { startPage(); List<GsOutStockAdivceVo> list= takeGoodsService.saleOrderSuggest(gsOutStockAdivceDto); return AjaxResult.success(getDataTable(list)); } catch (SwException e) { return AjaxResult.error((int) ErrCode.SYS_PARAMETER_ERROR.getErrCode(), e.getMessage()); } catch (Exception e) { log.error("【调拨建议列表】接口出现异常,参数${}$,异常${}$", JSON.toJSON(getUserId()), ExceptionUtils.getStackTrace(e)); return AjaxResult.error((int) ErrCode.UNKNOW_ERROR.getErrCode(), "操作失败"); } } @GetMapping("auditOutStockEnd") @PreAuthorize("@ss.hasPermi('system:outStockAdviceList:end')") public AjaxResult auditOutStockEnd(GsOutStockAdivceDto gsOutStockAdivceDto){ try { gsOutStockAdivceDto.setUserId(Integer.parseInt(SecurityUtils.getUserId()+"")); takeGoodsService.auditOutStockEnd(gsOutStockAdivceDto); return AjaxResult.success(); } catch (SwException e) { return AjaxResult.error((int) ErrCode.SYS_PARAMETER_ERROR.getErrCode(), e.getMessage()); } catch (Exception e) { log.error("【调拨建议标记完成】接口出现异常,参数${}$,异常${}$", JSON.toJSON(getUserId()), ExceptionUtils.getStackTrace(e)); return AjaxResult.error((int) ErrCode.UNKNOW_ERROR.getErrCode(), "操作失败"); } } /** *@author: zhaoguoliang *@date: Create in 2022/9/29 17:31 *根据商品id和仓库id查未被占用的sn商品 */ @GetMapping("selectGoodsSnByWhIdAndGoodsId") public AjaxResult selectGoodsSnByWhIdAndGoodsId(@RequestParam("whId") Integer whId, @RequestParam("goodsId")Integer goodsId) { try { List<GsGoodsSnVo> gsGoodsSnVos =takeGoodsService.selectGoodsSnByWhIdAndGoodsId(whId,goodsId); return AjaxResult.success(gsGoodsSnVos); } catch (SwException e) { return AjaxResult.error((int) ErrCode.SYS_PARAMETER_ERROR.getErrCode(), e.getMessage()); } catch (Exception e) { log.error("【调拨建议标记完成】接口出现异常,参数${}$,异常${}$", JSON.toJSON(whId), ExceptionUtils.getStackTrace(e)); return AjaxResult.error((int) ErrCode.UNKNOW_ERROR.getErrCode(), "操作失败"); } } /** *@author: zhaoguoliang *@date: Create in 2022/9/30 8:52 *销售提货单主表添加保存销售提货单扫描记录数据 */ @PostMapping("mdfTakeSuggest2") public AjaxResult mdfTakeSuggest2(@RequestParam("cbpmDto")CbpmDto cbpmDto) { try { takeGoodsService.mdfTakeSuggest2(cbpmDto); return AjaxResult.success(); } catch (SwException e) { return AjaxResult.error((int) ErrCode.SYS_PARAMETER_ERROR.getErrCode(), e.getMessage()); } catch (Exception e) { log.error("【调拨建议标记完成】接口出现异常,参数${}$,异常${}$", JSON.toJSON(cbpmDto), ExceptionUtils.getStackTrace(e)); return AjaxResult.error((int) ErrCode.UNKNOW_ERROR.getErrCode(), "操作失败"); } } }
1.2 Service 部分
package com.ruoyi.system.service.gson; import com.ruoyi.system.domain.Cbpm; import com.ruoyi.system.domain.dto.*; import com.ruoyi.system.domain.vo.*; import org.apache.ibatis.annotations.Param; import java.util.List; /** * ClassName TakeGoodsService * Description * Create by gfy * Date 2022/8/10 17:51 */ public interface TakeGoodsService { List<TakeGoodsOrderListVo> takeOrderList(TakeGoodsOrderListDto takeGoodsOrderListDto); void addTakeGoodsOrder(TakeGoodsOrderAddDto takeGoodsOrderAddDto); TakeGoodsOrderDetailVo takeOrderDetail(Integer id); TakeGoodsOrderDetailVo takeOrderDetailBySaleId(Integer saleOrderId,Integer whId); void mdfTakeGoodsOrder(TakeGoodsOrderAddDto takeGoodsOrderAddDto); void delTakeGoodsOrder(Integer id, Long userId); void auditTakeOrder(AuditTakeOrderDto auditTakeOrderDto); void mdfTakeSuggest(ChangeSuggestDto changeSuggestDto); int TakeGoodsOrdersm(List<Cbpm> itemList); List<GsOutStockAdivceVo> saleOrderSuggest(GsOutStockAdivceDto gsOutStockAdivceDto); void auditOutStockEnd(GsOutStockAdivceDto gsOutStockAdivceDto); List<GsGoodsSnVo> selectGoodsSnByWhIdAndGoodsId(Integer whId,Integer goodsId); void mdfTakeSuggest2(CbpmDto cbpmDto); }
ServiceImpl 部分
package com.ruoyi.system.service.gson.impl; import com.ruoyi.common.constant.TakeOrderConstants; import com.ruoyi.common.constant.WareHouseType; import com.ruoyi.common.core.domain.entity.Cbpa; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.enums.*; import com.ruoyi.common.exception.SwException; import com.ruoyi.common.utils.NumberToChineseUtil; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.*; import com.ruoyi.system.domain.Do.CbpmTakeOrderDo; import com.ruoyi.system.domain.Do.NumberDo; import com.ruoyi.system.domain.dto.*; import com.ruoyi.system.domain.vo.*; import com.ruoyi.system.mapper.*; import com.ruoyi.system.service.gson.BaseCheckService; import com.ruoyi.system.service.gson.TakeGoodsService; import org.apache.ibatis.session.ExecutorType; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * ClassName TakeGoodsServiceImpl * Description * Create by gfy * Date 2022/8/10 17:51 */ @Service public class TakeGoodsServiceImpl implements TakeGoodsService { @Resource private CbpkMapper cbpkMapper; @Resource private CboaMapper cboaMapper; @Resource private CbplMapper cbplMapper; @Resource private GsGoodsUseMapper gsGoodsUseMapper; @Resource private NumberGenerate numberGenerate; @Resource private CalaMapper calaMapper; @Resource private CbcaMapper cbcaMapper; @Resource private SysUserMapper sysUserMapper; @Resource private CbwaMapper cbwaMapper; @Resource private CbpbMapper cbpbMapper; @Resource private CbobMapper cbobMapper; @Resource private CbpmMapper cbpmMapper; @Resource private CbpaMapper cbpaMapper; @Resource private GsGoodsSnMapper gsGoodsSnMapper; @Resource private SqlSessionFactory sqlSessionFactory; @Resource private GsOutStockAdivceMapper gsOutStockAdivceMapper; @Resource private BaseCheckService baseCheckService; @Override public List<TakeGoodsOrderListVo> takeOrderList(TakeGoodsOrderListDto takeGoodsOrderListDto) { List<TakeGoodsOrderListVo> res= cbpkMapper.takeOrderList(takeGoodsOrderListDto); return res; } @Transactional @Override public void addTakeGoodsOrder(TakeGoodsOrderAddDto takeGoodsOrderAddDto) { //查出销售订单 检查销售订单是否已复审通过 CboaCriteria oaex=new CboaCriteria(); oaex.createCriteria() .andCboa06EqualTo(DeleteFlagEnum.NOT_DELETE.getCode()) .andCboa07EqualTo(takeGoodsOrderAddDto.getSaleOrderNo()); List<Cboa> cboas = cboaMapper.selectByExample(oaex); if(cboas.size()==0){ throw new SwException("没有查到该销售订单订单"); } Cboa cboa = cboas.get(0); if(!SaleOrderStatusEnums.YIFUSHEN.getCode().equals(cboa.getCboa11())){ throw new SwException("销售订单必须为已复审状态"); } //只有该销售订单在此仓库最新一提货单质检完成之后才能再生成 Cbpk old= cbpkMapper.selectLastBySaleOrderNo(takeGoodsOrderAddDto.getSaleOrderNo()); if(old!=null && TakeOrderCheckStatus.NOCHECK.getCode().equals(old.getCheckStatus())){ throw new SwException("该销售订单的最新提货单需要质检完成之后才能提交新的提货单"); } Cbpk cbpk=new Cbpk(); Date date = new Date(); cbpk.setCbpk02(date); cbpk.setCbpk03(takeGoodsOrderAddDto.getUserId()); cbpk.setCbpk04(date); cbpk.setCbpk05(takeGoodsOrderAddDto.getUserId()); cbpk.setCbpk06(DeleteFlagEnum.NOT_DELETE.getCode()); NumberDo numberDo = new NumberDo(); numberDo.setType(NumberGenerateEnum.TAKEORDER.getCode()); cbpk.setCbpk07(numberGenerate.createOrderNo(numberDo).getOrderNo()); cbpk.setCbpk08(takeGoodsOrderAddDto.getOrderDate()); cbpk.setCbpk09(takeGoodsOrderAddDto.getCustomerId()); cbpk.setCbpk10(takeGoodsOrderAddDto.getWhId()); cbpk.setCbpk11(SaleOrderStatusEnums.YITIJIAO.getCode()); // cbpk.setCbpk12(); // cbpk.setCbpk13(); // cbpk.setCbpk14();/ // cbpk.setCbpk15(); cbpk.setCbpk16(takeGoodsOrderAddDto.getCurrency()); cbpk.setCbpk17(takeGoodsOrderAddDto.getSaleUserId()); cbpk.setCbpk18(takeGoodsOrderAddDto.getContacts()); cbpk.setCbpk19(takeGoodsOrderAddDto.getPhone()); // cbpk.setCbpk20(); cbpk.setCbpk21(takeGoodsOrderAddDto.getReceiveAdress()); // cbpk.setCbpk22(); // cbpk.setCbpk23(); // cbpk.setCbpk24(); // cbpk.setCbpk25(); // cbpk.setCbpk26(); // cbpk.setCbpk27(); // cbpk.setCbpk28(); // cbpk.setCbpk29(); cbpk.setCbpk30(takeGoodsOrderAddDto.getCustomerNo()); cbpk.setCbpk31(TakeOrderConstants.WEIWANCHENG); cbpk.setCheckStatus(TakeOrderCheckStatus.NOCHECK.getCode().byteValue()); cbpk.setSaleOrderNo(takeGoodsOrderAddDto.getSaleOrderNo()); int insert = cbpkMapper.insertWithId(cbpk); Cbpl cbpl=null; for (TakeOrderGoodsDto good : takeGoodsOrderAddDto.getGoods()) { if(good.getGoodsId()==null){ throw new SwException("提货货物不能为空"); } //检查是否已占用了库存 并且提货数量不能大于占用数量 以及历史提货数量减去良品数量 GsGoodsUseCriteria guex=new GsGoodsUseCriteria(); guex.createCriteria() .andGoodsIdEqualTo(good.getGoodsId()) .andOrderNoEqualTo(takeGoodsOrderAddDto.getSaleOrderNo()) .andWhIdEqualTo(takeGoodsOrderAddDto.getWhId()); List<GsGoodsUse> gsGoodsUses = gsGoodsUseMapper.selectByExample(guex); if(gsGoodsUses.size()==0){ throw new SwException("该商品没有在本仓库占用库存,商品:"); } GsGoodsUse goodsUse = gsGoodsUses.get(0); if(good.getQty()>goodsUse.getLockQty()){ throw new SwException("该商品的提货数量不能大于占用数量"); } //未出库数量 Double noOutQty = goodsUse.getNoOutQty(); Double lockQty = goodsUse.getLockQty(); if(good.getQty()+noOutQty>lockQty){ throw new SwException("该商品未出库的提货单数量相加超过占用数量"); } //生成明细表 cbpl=new Cbpl(); cbpl.setCbpk01(cbpk.getCbpk01()); cbpl.setCbpl02(good.getNumber()); cbpl.setCbpl03(date); cbpl.setCbpl04(takeGoodsOrderAddDto.getUserId()); cbpl.setCbpl05(date); cbpl.setCbpl06(takeGoodsOrderAddDto.getUserId()); cbpl.setCbpl07(DeleteFlagEnum.NOT_DELETE.getCode()); cbpl.setCbpl08(good.getGoodsId()); cbpl.setCbpl09(good.getQty()); cbpl.setCbpl10(0.0); cbpl.setCbpl11(good.getPrice()); cbpl.setCbpl12(good.getTotalPrice()); cbpl.setGoodProductQty(good.getQty()); // cbpl.setCbpl13(); // cbpl.setCbpl14(); // cbpl.setCbpl15(); // cbpl.setCbpl16(); cbpl.setGoodProductQty(0.0); cbplMapper.insert(cbpl); // List<Cbpl> list=cbplMapper.selectBySaleOrderNo(takeGoodsOrderAddDto.getSaleOrderNo()); //提货数量 // Double takeQty = list.stream().collect(Collectors.summingDouble(Cbpl::getCbpl09)); //良品数量 // Double goodQty = list.stream().collect(Collectors.summingDouble(Cbpl::getGoodProductQty)); // Double lessQty=takeQty-goodQty; } } @Override public TakeGoodsOrderDetailVo takeOrderDetail(Integer id) { Cbpk cbpk = cbpkMapper.selectByPrimaryKey(id); if(cbpk==null || !DeleteFlagEnum.NOT_DELETE.getCode().equals(cbpk.getCbpk06())){ throw new SwException("没有查到该提货单"); } TakeGoodsOrderDetailVo res=new TakeGoodsOrderDetailVo(); res.setContacts(cbpk.getCbpk18()); res.setCurrency(cbpk.getCbpk16()); res.setOrderNo(cbpk.getCbpk07()); if(CurrencyEnum.CNY.getCode().equals(cbpk.getCbpk16())){ res.setCurrencyMsg(CurrencyEnum.CNY.getMsg()); }else { res.setCurrencyMsg(CurrencyEnum.USD.getMsg()); } res.setCustomerId(cbpk.getCbpk09()); Cbca cbca = cbcaMapper.selectByPrimaryKey(cbpk.getCbpk09()); if(cbca!=null){ res.setCustomerName(cbca.getCbca08()); res.setCustomerLevel(cbca.getCbca28()); } res.setCustomerNo(cbpk.getCbpk30()); res.setOrderDate(cbpk.getCbpk08()); res.setPhone(cbpk.getCbpk19()); res.setReceiveAdress(cbpk.getCbpk21()); res.setReceiver(cbpk.getCbpk18()); res.setReceivPhone(cbpk.getCbpk19()); Cboa cboa=null; if(!StringUtils.isBlank(cbpk.getSaleOrderNo())){ CboaCriteria oaex=new CboaCriteria(); oaex.createCriteria() .andCboa07EqualTo(cbpk.getSaleOrderNo()); List<Cboa> cboas = cboaMapper.selectByExample(oaex); cboa= cboas.get(0); res.setSaleOrderId(cboas.get(0).getCboa01()); } res.setSaleOrderNo(cbpk.getSaleOrderNo()); SysUser user = sysUserMapper.selectByPrimaryKey(cbpk.getCbpk03().longValue()); if(user!=null){ res.setUserId(user.getUserId().intValue()); res.setUserName(user.getNickName()); } if(cbpk.getCbpk12()!=null){ SysUser auditUser = sysUserMapper.selectByPrimaryKey(cbpk.getCbpk12().longValue()); if(auditUser!=null){ res.setAuditUserName(auditUser.getNickName()); } } if(cbpk.getCbpk17()!=null){ SysUser saleUser = sysUserMapper.selectByPrimaryKey(cbpk.getCbpk17().longValue()); if(saleUser!=null){ res.setSaleUserId(saleUser.getUserId().intValue()); res.setSaleUserName(saleUser.getNickName()); } } Cbwa cbwa = cbwaMapper.selectByPrimaryKey(cbpk.getCbpk10()); if(cbwa!=null){ res.setWhName(cbwa.getCbwa09()); res.setWhId(cbwa.getCbwa01()); } if(cbpk.getCheckStatus()!=null){ if(TakeOrderCheckStatus.NOCHECK.getCode().equals(cbpk.getCheckStatus())){ res.setCheckStatus(TakeOrderCheckStatus.NOCHECK.getMsg()); }else { res.setCheckStatus(TakeOrderCheckStatus.CHECK.getMsg()); } } CbplCriteria plex=new CbplCriteria(); plex.createCriteria() .andCbpk01EqualTo(cbpk.getCbpk01()) .andCbpl07EqualTo(DeleteFlagEnum.NOT_DELETE.getCode()); plex.setOrderByClause("CBPL02 desc"); List<Cbpl> cbpls = cbplMapper.selectByExample(plex); List<TakeOrderGoodsVo> goods = res.getGoods(); //zhaoGuoLiang添加销售订单明细表id CboaCriteria cboaCriteria = new CboaCriteria(); cboaCriteria.createCriteria().andCboa07EqualTo(cbpk.getSaleOrderNo()) .andCboa06EqualTo(DeleteFlagEnum.NOT_DELETE.getCode()); List<Cboa> cboaList = cboaMapper.selectByExample(cboaCriteria); List<Cbob> cbobList = null; if(cboaList!=null&&cboaList.size()>0){ CbobCriteria cbobCriteria = new CbobCriteria(); cbobCriteria.createCriteria().andCboa01EqualTo(cboaList.get(0).getCboa01()) .andCbob07EqualTo(DeleteFlagEnum.NOT_DELETE.getCode()); cbobCriteria.setOrderByClause("CBOB03 desc"); cbobList = cbobMapper.selectByExample(cbobCriteria); } // CalaCriteria laexample = new CalaCriteria(); // laexample.createCriteria() // .andCala10EqualTo("商品品牌"); // List<Cala> calas = calaMapper.selectByExample(laexample); // Map<Integer, String> brandMap = new HashMap<>(); // for (Cala cala : calas) { // brandMap.put(cala.getCala01(), cala.getCala08()); // } Map<Integer, String> brandMap = baseCheckService.brandMap(); TakeOrderGoodsVo good=null; Double sumQty=0.0; Double sunPrice=0.0; Map<Integer,TakeOrderGoodsVo> goodsMap=new HashMap<>(); int i = 0; for (Cbpl cbpl : cbpls) { good=new TakeOrderGoodsVo(); // CbpmCriteria pmex=new CbpmCriteria(); // pmex.createCriteria() // .andCbpk01EqualTo(cbpk.getCbpk01()) // .andCb // List<Cbpm> cbpms = cbpmMapper.selectByExample(pmex); // CbpmCriteria pmex=new CbpmCriteria(); // pmex.createCriteria() // .andCbpm07EqualTo(DeleteFlagEnum.NOT_DELETE.getCode()) // .andCbpm08EqualTo(good.getGoodsId()) // .andCbpk01EqualTo(cbpk.getCbpk01()); // List<Cbpm> cbpms = cbpmMapper.selectByExample(pmex); // good.setGoodsNum(Double.valueOf(cbpms.size())); //zhaoGuoLiang添加销售订单明细表id if(cbobList!=null&&cbobList.size()>i){ good.setCbob01(cbobList.get(i).getCbob01()); } good.setCbplId(cbpl.getCbpl01()); Cbpb cbpb = cbpbMapper.selectByPrimaryKey(cbpl.getCbpl08()); if (cbpb != null) { // good.setGoodsNum(); good.setUpc(cbpb.getCbpb15()); good.setBrand(brandMap.get(cbpb.getCbpb10())); good.setDescription(cbpb.getCbpb08()); good.setModel(cbpb.getCbpb12()); Cbpa cbpa = cbpaMapper.selectByPrimaryKey(cbpb.getCbpb14()); if(cbpa!=null){ good.setGoodClass(cbpa.getCbpa07()); } } good.setGoodsId(cbpl.getCbpl08()); if(OrderTypeEnum.GUOJIDINGDAN.getCode().equals(cbpl.getCbpl16())){ good.setOrderClass(OrderTypeEnum.GUOJIDINGDAN.getMsg()); }else { good.setOrderClass(OrderTypeEnum.GUONEIDINGDAN.getMsg()); } if(cboa!=null){ GsGoodsUseCriteria usexample=new GsGoodsUseCriteria(); usexample.createCriteria() .andOrderNoEqualTo(cboa.getCboa07()) .andGoodsIdEqualTo(good.getGoodsId()); List<GsGoodsUse> gsGoodsUses = gsGoodsUseMapper.selectByExample(usexample); if(gsGoodsUses.size()>0){ GsGoodsUse goodsUse = gsGoodsUses.get(0); good.setUseQty(goodsUse.getLockQty()); } CbobCriteria obex=new CbobCriteria(); obex.createCriteria() .andCbob07EqualTo(DeleteFlagEnum.NOT_DELETE.getCode()) .andCbob08EqualTo(good.getGoodsId()) .andCboa01EqualTo(cboa.getCboa01()); List<Cbob> cbobs = cbobMapper.selectByExample(obex); if(cbobs.size()>0){ Cbob cbob=cbobs.get(0); good.setNoSendQty(cbob.getCbob09()-cbob.getCbob10()); good.setOrderQty(cbob.getCbob09()); } } //良品数量 good.setGoodsNum(cbpl.getGoodProductQty()); good.setPrice(cbpl.getCbpl11()); CbpmCriteria pmex=new CbpmCriteria(); pmex.createCriteria() .andCbpm08EqualTo(good.getGoodsId()) .andCbpm11EqualTo(1) .andCbpk01EqualTo(cbpk.getCbpk01()); List<Cbpm> cbpms = cbpmMapper.selectByExample(pmex); good.setScanQty(cbpms.size()); good.setGoodsNum(Double.valueOf(cbpms.size())); //todo // good.setRemark(); good.setQty(cbpl.getCbpl09()); //TODO // good.setSupplierId(); good.setTotalPrice(cbpl.getCbpl12()); sumQty=sumQty+cbpl.getCbpl09(); sunPrice=sunPrice+cbpl.getCbpl11(); res.getGoods().add(good); goodsMap.put(good.getGoodsId(),good); i++; } res.setSumPrice(sunPrice); res.setSumQty(sumQty); res.setCapPrice(NumberToChineseUtil.moneyToChinese(res.getSumPrice())); res.setSumQty(sumQty); // CbpmCriteria pmex=new CbpmCriteria(); // pmex.createCriteria() // .andCbpm07EqualTo(DeleteFlagEnum.NOT_DELETE.getCode()) // .andCbpm08EqualTo(good.getGoodsId()) // .andCbpk01EqualTo(cbpk.getCbpk01()); // pmex.setOrderByClause("CBPM11 ASC"); List<CbpmTakeOrderDo> cbpms = cbpmMapper.selectByTakeId(cbpk.getCbpk01()); //查提货建议表 TakeOrderSugestVo sugest=null; Map<Integer,Integer> scanMap=new HashMap<>(); for (CbpmTakeOrderDo cbpm : cbpms) { sugest=new TakeOrderSugestVo(); TakeOrderGoodsVo takeOrderGoodsVo = goodsMap.get(cbpm.getCbpm08()); if(takeOrderGoodsVo!=null){ sugest.setBrand(takeOrderGoodsVo.getBrand()); sugest.setDescription(takeOrderGoodsVo.getDescription()); sugest.setModel(takeOrderGoodsVo.getModel()); sugest.setGoodClass(takeOrderGoodsVo.getGoodClass()); sugest.setUpc(takeOrderGoodsVo.getUpc()); } sugest.setNumber(cbpm.getCbpm02()); sugest.setScanStatus(ScanStatusEnum.findByKey(cbpm.getCbpm11()).getMsg()); sugest.setBfSn(cbpm.getCbpm12()); sugest.setSku(cbpm.getSku()); sugest.setSn(cbpm.getCbpm09()); res.getSugests().add(sugest); if(ScanStatusEnum.YISAOMA.getCode().equals(cbpm.getCbpm11())){ res.getScans().add(sugest); Integer integer = scanMap.get(takeOrderGoodsVo.getGoodsId()); if(integer==null){ scanMap.put(takeOrderGoodsVo.getGoodsId(),1); }else { scanMap.put(takeOrderGoodsVo.getGoodsId(),integer+1); } } for (TakeOrderGoodsVo resGood : res.getGoods()) { if(scanMap.get(resGood.getGoodsId())==null){ resGood.setScanQty(0); }else { resGood.setScanQty(scanMap.get(resGood.getGoodsId())); } } } if(res.getOrderDate()!=null){ SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd"); String format = sd.format(res.getOrderDate()); res.setOrderDateMsg(format); } return res; } @Override public TakeGoodsOrderDetailVo takeOrderDetailBySaleId(Integer saleOrderId,Integer whId) { Cboa cboa = cboaMapper.selectByPrimaryKey(saleOrderId); TakeGoodsOrderDetailVo res=new TakeGoodsOrderDetailVo(); res.setContacts(cboa.getCboa17()); res.setCurrency(cboa.getCboa16()); if(CurrencyEnum.CNY.getCode().equals(cboa.getCboa16())){ res.setCurrencyMsg(CurrencyEnum.CNY.getMsg()); }else { res.setCurrencyMsg(CurrencyEnum.USD.getMsg()); } res.setCustomerId(cboa.getCboa09()); Cbca cbca = cbcaMapper.selectByPrimaryKey(res.getCustomerId()); if(cbca!=null){ res.setCustomerName(cbca.getCbca08()); res.setCustomerLevel(cbca.getCbca28()); } res.setCustomerNo(cboa.getCboa25()); res.setOrderDate(cboa.getCboa08()); res.setPhone(cboa.getCboa19()); res.setReceiveAdress(cboa.getCboa18()); res.setReceiver(cboa.getCboa17()); res.setReceivPhone(cboa.getCboa19()); res.setSaleOrderId(cboa.getCboa01()); res.setSaleOrderNo(cboa.getCboa07()); // SysUser user = sysUserMapper.selectByPrimaryKey(cbpk.getCbpk03().longValue()); // if(user!=null){ // res.setUserId(user.getUserId().intValue()); // res.setUserName(user.getNickName()); // } SysUser saleUser = sysUserMapper.selectByPrimaryKey(cboa.getCboa10().longValue()); if(saleUser!=null){ res.setSaleUserId(saleUser.getUserId().intValue()); res.setSaleUserName(saleUser.getNickName()); } Cbwa cbwa = cbwaMapper.selectByPrimaryKey(whId); if(cbwa!=null){ res.setWhName(cbwa.getCbwa09()); res.setWhId(cbwa.getCbwa01()); } // if(cbpk.getCheckStatus()!=null){ // if(TakeOrderCheckStatus.NOCHECK.getCode().equals(cbpk.getCheckStatus())){ // res.setCheckStatus(TakeOrderCheckStatus.NOCHECK.getMsg()); // }else { // res.setCheckStatus(TakeOrderCheckStatus.CHECK.getMsg()); // } // // // } CalaCriteria laexample = new CalaCriteria(); laexample.createCriteria() .andCala10EqualTo("商品品牌"); List<Cala> calas = calaMapper.selectByExample(laexample); Map<Integer, String> brandMap = new HashMap<>(); for (Cala cala : calas) { brandMap.put(cala.getCala01(), cala.getCala08()); } // CbobCriteria obex=new CbobCriteria(); // obex.createCriteria() // .andCbob07EqualTo(DeleteFlagEnum.NOT_DELETE.getCode()) // .andCboa01EqualTo(cboa.getCboa01()); // List<Cbob> cbobs = cbobMapper.selectByExample(obex); TakeOrderGoodsVo good=null; //查占用表 GsGoodsUseCriteria usex=new GsGoodsUseCriteria(); usex.createCriteria().andOrderNoEqualTo(cboa.getCboa07()) .andWhIdEqualTo(whId); List<GsGoodsUse> gsGoodsUses = gsGoodsUseMapper.selectByExample(usex); for (GsGoodsUse goodsUse : gsGoodsUses) { good=new TakeOrderGoodsVo(); Cbpb cbpb = cbpbMapper.selectByPrimaryKey(goodsUse.getGoodsId()); if (cbpb != null) { good.setGoodsId(cbpb.getCbpb01()); good.setBrand(brandMap.get(cbpb.getCbpb10())); good.setDescription(cbpb.getCbpb08()); good.setModel(cbpb.getCbpb12()); Cbpa cbpa = cbpaMapper.selectByPrimaryKey(cbpb.getCbpb14()); if(cbpa!=null){ good.setGoodClass(cbpa.getCbpa07()); } } CbobCriteria obex=new CbobCriteria(); obex.createCriteria() .andCbob08EqualTo(goodsUse.getGoodsId()) .andCbob07EqualTo(DeleteFlagEnum.NOT_DELETE.getCode()) .andCboa01EqualTo(cboa.getCboa01()); List<Cbob> cbobs = cbobMapper.selectByExample(obex); if(cbobs.size()>0){ Cbob cbob=cbobs.get(0); good.setNoSendQty(cbob.getCbob09()-cbob.getCbob10()); good.setPrice(cbob.getCbob11()); //todo // good.setRemark(); good.setQty(goodsUse.getLockQty()); good.setTotalPrice(cbob.getCbob12()); //TODO // good.setSupplierId(); } good.setUseQty(goodsUse.getLockQty()); //良品数量 good.setGoodsNum(0.0); res.getGoods().add(good); } return res; } @Transactional @Override public void mdfTakeGoodsOrder(TakeGoodsOrderAddDto takeGoodsOrderAddDto) { //只有在未提交状态下才能编辑 Cbpk cbpk = cbpkMapper.selectByPrimaryKey(takeGoodsOrderAddDto.getId()); if(!SaleOrderStatusEnums.WEITIJIAO.getCode().equals(cbpk.getCbpk11())){ throw new SwException("提货单必须为未提交状态才能修改"); } Date date = new Date(); cbpk.setCbpk04(date); cbpk.setCbpk05(takeGoodsOrderAddDto.getUserId()); cbpk.setCbpk08(takeGoodsOrderAddDto.getOrderDate()); cbpk.setCbpk09(takeGoodsOrderAddDto.getCustomerId()); cbpk.setCbpk10(takeGoodsOrderAddDto.getWhId()); // cbpk.setCbpk12(); // cbpk.setCbpk13(); // cbpk.setCbpk14();/ // cbpk.setCbpk15(); cbpk.setCbpk16(takeGoodsOrderAddDto.getCurrency()); cbpk.setCbpk17(takeGoodsOrderAddDto.getSaleUserId()); cbpk.setCbpk18(takeGoodsOrderAddDto.getContacts()); cbpk.setCbpk19(takeGoodsOrderAddDto.getPhone()); // cbpk.setCbpk20(); cbpk.setCbpk21(takeGoodsOrderAddDto.getReceiveAdress()); // cbpk.setCbpk22(); // cbpk.setCbpk23(); // cbpk.setCbpk24(); // cbpk.setCbpk25(); // cbpk.setCbpk26(); // cbpk.setCbpk27(); // cbpk.setCbpk28(); // cbpk.setCbpk29(); cbpk.setCbpk30(takeGoodsOrderAddDto.getCustomerNo()); cbpk.setCbpk31(TakeOrderConstants.WEIWANCHENG); cbpk.setCheckStatus(TakeOrderCheckStatus.NOCHECK.getCode().byteValue()); cbpk.setSaleOrderNo(takeGoodsOrderAddDto.getSaleOrderNo()); cbpk.setCbpk11(SaleOrderStatusEnums.YITIJIAO.getCode()); int update = cbpkMapper.updateByPrimaryKey(cbpk); Cbpl cbpl=null; //删除cbpl CbplCriteria plex=new CbplCriteria(); plex.createCriteria() .andCbpk01EqualTo(cbpk.getCbpk01()); int i = cbplMapper.deleteByExample(plex); for (TakeOrderGoodsDto good : takeGoodsOrderAddDto.getGoods()) { if(good.getGoodsId()==null){ throw new SwException("提货货物不能为空"); } //检查是否已占用了库存 并且提货数量不能大于占用数量 以及历史提货数量减去良品数量 GsGoodsUseCriteria guex=new GsGoodsUseCriteria(); guex.createCriteria() .andGoodsIdEqualTo(good.getGoodsId()) .andOrderNoEqualTo(takeGoodsOrderAddDto.getSaleOrderNo()) .andWhIdEqualTo(takeGoodsOrderAddDto.getWhId()); List<GsGoodsUse> gsGoodsUses = gsGoodsUseMapper.selectByExample(guex); if(gsGoodsUses.size()==0){ throw new SwException("该商品没有在本仓库占用库存,商品:"+good.getGoodsMsg()); } GsGoodsUse goodsUse = gsGoodsUses.get(0); if(good.getQty()>goodsUse.getLockQty()){ throw new SwException("该商品的提货数量不能大于占用数量"+good.getGoodsMsg()); } //未出库数量 Double noOutQty = goodsUse.getNoOutQty(); Double lockQty = goodsUse.getLockQty(); if(good.getQty()+noOutQty>lockQty){ throw new SwException("该商品未出库的提货单数量相加超过占用数量"+good.getGoodsMsg()); } //生成明细表 cbpl=new Cbpl(); cbpl.setCbpk01(cbpk.getCbpk01()); cbpl.setCbpl02(good.getNumber()); cbpl.setCbpl03(date); cbpl.setCbpl04(takeGoodsOrderAddDto.getUserId()); cbpl.setCbpl05(date); cbpl.setCbpl06(takeGoodsOrderAddDto.getUserId()); cbpl.setCbpl07(DeleteFlagEnum.NOT_DELETE.getCode()); cbpl.setCbpl08(good.getGoodsId()); cbpl.setCbpl09(good.getQty()); cbpl.setCbpl10(0.0); cbpl.setCbpl11(good.getPrice()); cbpl.setCbpl12(good.getTotalPrice()); // cbpl.setCbpl13(); // cbpl.setCbpl14(); // cbpl.setCbpl15(); // cbpl.setCbpl16(); cbpl.setGoodProductQty(0.0); cbplMapper.insert(cbpl); // List<Cbpl> list=cbplMapper.selectBySaleOrderNo(takeGoodsOrderAddDto.getSaleOrderNo()); //提货数量 // Double takeQty = list.stream().collect(Collectors.summingDouble(Cbpl::getCbpl09)); //良品数量 // Double goodQty = list.stream().collect(Collectors.summingDouble(Cbpl::getGoodProductQty)); // Double lessQty=takeQty-goodQty; } } @Transactional @Override public void delTakeGoodsOrder(Integer id, Long userId) { Cbpk cbpk = cbpkMapper.selectByPrimaryKey(id); if(cbpk==null || !DeleteFlagEnum.NOT_DELETE.getCode().equals(cbpk.getCbpk06())){ throw new SwException("没有查到该提货单"); } if(!SaleOrderStatusEnums.WEITIJIAO.getCode().equals(cbpk.getCbpk11())){ throw new SwException("必须在未提交状态下才能删除"); } cbpk.setCbpk06(DeleteFlagEnum.DELETE.getCode()); cbpk.setCbpk05(userId.intValue()); cbpk.setCbpk04(new Date()); cbpkMapper.updateByPrimaryKey(cbpk); } @Transactional @Override public void auditTakeOrder(AuditTakeOrderDto auditTakeOrderDto) { Cbpk cbpk = cbpkMapper.selectByPrimaryKey(auditTakeOrderDto.getTakeOrderId()); //审核通过 生成提货建议表 并让出库建议的货品变成出库中 if(cbpk==null || !DeleteFlagEnum.NOT_DELETE.getCode().equals(cbpk.getCbpk06())){ throw new SwException("没有查到该提货单"); } Date date = new Date(); if(auditTakeOrderDto.getOpType().equals(1)){ if(!SaleOrderStatusEnums.YITIJIAO.getCode().equals(cbpk.getCbpk11())){ throw new SwException("必须在已提交状态下才能审核"); } cbpk.setCbpk11(SaleOrderStatusEnums.YISHENHE.getCode()); cbpk.setCbpk12(auditTakeOrderDto.getUserId()); //生成提货建议单 CbplCriteria plex=new CbplCriteria(); plex.createCriteria() .andCbpl07EqualTo(DeleteFlagEnum.NOT_DELETE.getCode()) .andCbpk01EqualTo(cbpk.getCbpk01()); List<Cbpl> cbpls = cbplMapper.selectByExample(plex); Cbpm cbpm=null; for (Cbpl cbpl : cbpls) { //先入先出 并且未占用 //查找本仓库的占用数量 GsGoodsUseCriteria usex=new GsGoodsUseCriteria(); usex.createCriteria() .andGoodsIdEqualTo(cbpl.getCbpl08()) .andWhIdEqualTo(cbpk.getCbpk10()) .andOrderNoEqualTo(cbpk.getSaleOrderNo()) ; List<GsGoodsUse> gsGoodsUses = gsGoodsUseMapper.selectByExample(usex); if(gsGoodsUses.size()>0){ List<GsGoodsSn> list=gsGoodsSnMapper.selectOutByWhIdAndGoodsId(cbpk.getCbpk10(),cbpl.getCbpl08(),gsGoodsUses.get(0).getLockQty().intValue()); for (int i=0;i< list.size() ;i++) { GsGoodsSn gsGoodsSn = list.get(i); cbpm=new Cbpm(); cbpm.setCbpk01(cbpk.getCbpk01()); cbpm.setCbpm02(i+1); cbpm.setCbpm03(date); cbpm.setCbpm04(auditTakeOrderDto.getUserId()); cbpm.setCbpm05(date); cbpm.setCbpm06(auditTakeOrderDto.getUserId()); cbpm.setCbpm07(DeleteFlagEnum.NOT_DELETE.getCode()); cbpm.setCbpm08(cbpl.getCbpl08()); cbpm.setCbpm09(gsGoodsSn.getSn()); cbpm.setCbpm10(gsGoodsSn.getLocationId()); cbpm.setCbpm11(0); cbpmMapper.insert(cbpm); gsGoodsSn.setStatus(new Byte("2")); gsGoodsSn.setUpdateTime(date); gsGoodsSnMapper.updateByPrimaryKey(gsGoodsSn); } } } }else if(auditTakeOrderDto.getOpType().equals(2)) { //撤销 提交状态变成未提交状态 if(!SaleOrderStatusEnums.YITIJIAO.getCode().equals(cbpk.getCbpk11())){ throw new SwException("必须在待审核状态下才能撤销"); } CbpmCriteria plex=new CbpmCriteria(); plex.createCriteria() .andCbpk01EqualTo(auditTakeOrderDto.getTakeOrderId()); int i = cbpmMapper.deleteByExample(plex); cbpk.setCbpk11(SaleOrderStatusEnums.WEITIJIAO.getCode()); }else if(auditTakeOrderDto.getOpType().equals(3)){ //反审 库建议的货品改为未出库 if(!SaleOrderStatusEnums.YISHENHE.getCode().equals(cbpk.getCbpk11())){ throw new SwException("必须在已审核状态下才能撤销"); } CbpmCriteria scex=new CbpmCriteria(); scex.createCriteria() .andCbpk01EqualTo(auditTakeOrderDto.getTakeOrderId()); List<Cbpm> cbpms = cbpmMapper.selectByExample(scex); // if(cbpms.size()>0){ // throw new SwException("已有扫码的商品,不能反审"); // } cbpk.setCbpk11(SaleOrderStatusEnums.YITIJIAO.getCode()); for (Cbpm cbpm : cbpms) { if(cbpm.getCbpm11()==1){ throw new SwException("已有扫码的商品,不能反审"); } cbpmMapper.deleteByPrimaryKey(cbpm.getCbpm01()); GsGoodsSn gs=new GsGoodsSn(); gs.setStatus(new Byte("1")); GsGoodsSnCriteria example=new GsGoodsSnCriteria(); example.createCriteria() .andSnEqualTo(cbpm.getCbpm09()); int i = gsGoodsSnMapper.updateByExampleSelective(gs,example); } }else if(auditTakeOrderDto.getOpType().equals(4)){ //标记完成 if(!SaleOrderStatusEnums.YISHENHE.getCode().equals(cbpk.getCbpk11())){ throw new SwException("必须在已审核状态下才能标记完成"); } cbpk.setCbpk11(SaleOrderStatusEnums.YIWANCHENG.getCode()); CboaCriteria orderex=new CboaCriteria(); orderex.createCriteria() .andCboa07EqualTo(cbpk.getSaleOrderNo()); List<Cboa> cboas = cboaMapper.selectByExample(orderex); if(cboas.size()>0){ Cboa cboa = cboas.get(0); CbobCriteria obex=new CbobCriteria(); obex.createCriteria() .andCboa01EqualTo(cboa.getCboa01()); List<Cbob> cbobs = cbobMapper.selectByExample(obex); for (Cbob cbob : cbobs) { CbplCriteria plex=new CbplCriteria(); plex.createCriteria() .andCbpk01EqualTo(cbpk.getCbpk01()) .andCbpl08EqualTo(cbob.getCbob08()) .andCbpl07EqualTo(DeleteFlagEnum.NOT_DELETE.getCode()); List<Cbpl> cbpls = cbplMapper.selectByExample(plex); if(cbpls.size()>0){ cbob.setTakeQty(cbpls.get(0).getGoodProductQty()); } } } }else if(auditTakeOrderDto.getOpType().equals(5)){ //取消完成 if(!SaleOrderStatusEnums.YIWANCHENG.getCode().equals(cbpk.getCbpk11())){ throw new SwException("必须在已完成状态下才能取消完成"); } cbpk.setCbpk11(SaleOrderStatusEnums.YISHENHE.getCode()); }else if(auditTakeOrderDto.getOpType().equals(6)){ cbpk.setCheckStatus(new Byte("1")); List<GoodsDto> goods = auditTakeOrderDto.getGoods(); for (GoodsDto good : goods) { Cbpl cbpl=new Cbpl(); cbpl.setCbpl01(good.getPlId()); cbpl.setGoodProductQty(good.getGoodQty()); cbplMapper.updateByPrimaryKeySelective(cbpl); } } cbpk.setCbpk12(auditTakeOrderDto.getUserId()); cbpk.setCbpk05(auditTakeOrderDto.getUserId()); cbpk.setCbpk04(new Date()); cbpkMapper.updateByPrimaryKey(cbpk); return; } @Override public void mdfTakeSuggest(ChangeSuggestDto changeSuggestDto) { Date date = new Date(); List<ChangeSuggestModel> list = changeSuggestDto.getList(); for (ChangeSuggestModel changeSuggestModel : list) { //检查修改的商品是否在建议出库单中存在 CbpmCriteria example=new CbpmCriteria(); example.createCriteria() .andCbpm09EqualTo(changeSuggestModel.getCbpm09()); List<Cbpm> cbpms = cbpmMapper.selectByExample(example); if(cbpms.size()>0 && !cbpms.get(0).getCbpm01().equals(changeSuggestModel.getCbpm01())){ throw new SwException("您选择的Sn商品已经在别的出库单中存在:" + changeSuggestModel.getCbpm09()); } Cbpm cbpm=new Cbpm(); cbpm.setCbpm01(changeSuggestModel.getCbpm01()); cbpm.setCbpm07(changeSuggestModel.getCbpm07()); cbpm.setCbpm08(changeSuggestModel.getCbpm08()); cbpm.setCbpm09(changeSuggestModel.getCbpm09()); cbpm.setCbpm10(changeSuggestModel.getCbpm10()); cbpm.setCbpm05(date); cbpm.setCbpm06(changeSuggestDto.getUserId()); cbpmMapper.updateByPrimaryKey(cbpm); } } @Override public int TakeGoodsOrdersm(List<Cbpm> itemList) { if(itemList.size()==0){ throw new SwException("请选择要扫码的商品"); } SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH, false); CbpmMapper mapper = session.getMapper(CbpmMapper.class); Date date = new Date(); Long userid = SecurityUtils.getUserId(); for (int i = 0; i < itemList.size(); i++) { Cbpk cbpk = cbpkMapper.selectByPrimaryKey(itemList.get(i).getCbpk01()); if(!cbpk.getCbpk11().equals(2)){ throw new SwException("审核状态才能扫码"); } CbpmCriteria example=new CbpmCriteria(); example.createCriteria() .andCbpk01EqualTo(cbpk.getCbpk01()) .andCbpm09EqualTo(itemList.get(i).getCbpm09()); List<Cbpm> cbpms = cbpmMapper.selectByExample(example); if(cbpms.size()==0){ throw new SwException("您选择的Sn商品不在出库建议表中" ); } /*GsGoodsSnCriteria example0=new GsGoodsSnCriteria(); example0.createCriteria() .andSnEqualTo(itemList.get(i).getCbpm09()); List<GsGoodsSn> gsGoodsSnss = gsGoodsSnMapper.selectByExample(example0); if(gsGoodsSnss.size()>0){ throw new SwException("替换后sn已存在" ); }*/ CbpmCriteria sfgu=new CbpmCriteria(); sfgu.createCriteria() .andCbpm09EqualTo(itemList.get(i).getCbpm09()) .andCbpm11EqualTo(ScanStatusEnum.YISAOMA.getCode()); List<Cbpm> cbpmss = cbpmMapper.selectByExample(sfgu); if(cbpmss.size()>0){ throw new SwException("sn已扫码" ); } itemList.get(i).setCbpm05(date); itemList.get(i).setCbpm06(Math.toIntExact(userid)); itemList.get(i).setCbpm11(ScanStatusEnum.YISAOMA.getCode()); GsGoodsSnCriteria example1 = new GsGoodsSnCriteria(); example1.createCriteria() .andSnEqualTo(itemList.get(i).getCbpm09()); List<GsGoodsSn> gsGoodsSns = gsGoodsSnMapper.selectByExample(example1); if(gsGoodsSns.size()==0){ throw new SwException("您选择的Sn商品不在货物SN表中" ); } GsGoodsSnCriteria example6 = new GsGoodsSnCriteria(); example6.createCriteria() .andSnEqualTo(itemList.get(i).getCbpm09()) .andStatusEqualTo(GoodsType.yck.getCode()); List<GsGoodsSn> gsGoodsSnss = gsGoodsSnMapper.selectByExample(example6); if(gsGoodsSnss.size()>0){ throw new SwException("您选择的Sn商品已经出库" ); } GsGoodsSn goodsSn = new GsGoodsSn(); goodsSn.setId(gsGoodsSns.get(i).getId()); goodsSn.setCreateTime(gsGoodsSns.get(i).getCreateTime()); goodsSn.setCreateBy(gsGoodsSns.get(i).getCreateBy()); goodsSn.setUpdateTime(date); goodsSn.setUpdateBy(Math.toIntExact(userid)); goodsSn.setWhId(gsGoodsSns.get(i).getWhId()); goodsSn.setGoodsId(gsGoodsSns.get(i).getGoodsId()); goodsSn.setSn(itemList.get(i).getCbpm09()); goodsSn.setGroudStatus(Groudstatus.XJ.getCode()); goodsSn.setStatus(GoodsType.yck.getCode()); goodsSn.setLocationId(null); GsGoodsSnCriteria example2 = new GsGoodsSnCriteria(); example2.createCriteria() .andSnEqualTo(itemList.get(i).getCbpm09()); gsGoodsSnMapper.updateByExample(goodsSn, example2); mapper.updateByExampleSelective(itemList.get(i),example); } // Cbpk cbpk=new Cbpk(); // cbpk.setCbpk01(itemList.get(0).getCbpk01()); //cbpk.setCbpk11(TaskStatus.bjwc.getCode()); // cbpkMapper.updateByPrimaryKeySelective(cbpk); // CbpkCriteria example=new CbpkCriteria(); // example.createCriteria() // .andCbpk01EqualTo(itemList.get(0).getCbpk01()); // cbpkMapper.updateByExampleSelective(cbpk,example); session.commit(); session.clearCache(); return 1; } @Override public List<GsOutStockAdivceVo> saleOrderSuggest(GsOutStockAdivceDto gsOutStockAdivceDto) { List<GsOutStockAdivceVo> list= gsOutStockAdivceMapper.saleOrderSuggest(gsOutStockAdivceDto); Map<Integer, String> brandMap = baseCheckService.brandMap(); for (GsOutStockAdivceVo gsOutStockAdivceVo : list) { if (brandMap.get(Integer.parseInt(gsOutStockAdivceVo.getBrand())) != null) { // gsOutStockAdivceVo.setGoodsMsg((brandMap.get(gsOutStockAdivceVo.getBrand()) + "-" + gsOutStockAdivceVo.getModel() + "-" + gsOutStockAdivceVo.getDescription())); gsOutStockAdivceVo.setBrand(brandMap.get(Integer.parseInt(gsOutStockAdivceVo.getBrand()))); } } return list; } @Override public void auditOutStockEnd(GsOutStockAdivceDto gsOutStockAdivceDto) { GsOutStockAdivce gsOutStockAdivce = gsOutStockAdivceMapper.selectByPrimaryKey(gsOutStockAdivceDto.getId()); if(gsOutStockAdivce==null){ throw new SwException("没有查到该调拨建议"); } if(gsOutStockAdivce.getStatus()!=2){ throw new SwException("必须为待调拨状态才能标记完成"); } Date date = new Date(); gsOutStockAdivce.setUpdateTime(date); gsOutStockAdivce.setUpdateBy(gsOutStockAdivceDto.getUserId()); gsOutStockAdivce.setStatus(new Byte("3")); gsOutStockAdivceMapper.updateByPrimaryKey(gsOutStockAdivce); if(gsOutStockAdivce.getWhId().equals(WareHouseType.GQWWHID)){ return; } //增加占用 GsGoodsUseCriteria exeample=new GsGoodsUseCriteria(); exeample.createCriteria() //cdc仓库id .andWhIdEqualTo(WareHouseType.CDCWHID) .andOrderNoEqualTo(gsOutStockAdivce.getSaleOrderNo()) .andGoodsIdEqualTo(gsOutStockAdivce.getGoodsId()); List<GsGoodsUse> gsGoodsUses = gsGoodsUseMapper.selectByExample(exeample); if(gsGoodsUses.size()>0){ GsGoodsUse goodsUse = gsGoodsUses.get(0); goodsUse.setLockQty(goodsUse.getLockQty()+gsOutStockAdivce.getQty()); goodsUse.setUpdateTime(date); gsGoodsUseMapper.updateByPrimaryKey(goodsUse); }else { GsGoodsUse gsGoodsUse=new GsGoodsUse(); gsGoodsUse.setLockQty(gsOutStockAdivce.getQty()); gsGoodsUse.setUpdateTime(date); gsGoodsUse.setUpdateBy(gsOutStockAdivceDto.getUserId()); gsGoodsUse.setWhId(WareHouseType.CDCWHID); // gsGoodsUse.setOrderType(new Byte("1")); gsGoodsUse.setOrderNo(gsOutStockAdivce.getSaleOrderNo()); gsGoodsUse.setGoodsId(gsOutStockAdivce.getGoodsId()); gsGoodsUse.setCreateTime(date); gsGoodsUse.setCreateBy(gsOutStockAdivceDto.getUserId()); gsGoodsUse.setOrderQty(0.0); gsGoodsUseMapper.insert(gsGoodsUse); } //除CDC和GQW 减去仓库的库存占用 GsGoodsUseCriteria usex=new GsGoodsUseCriteria(); usex.createCriteria() .andWhIdEqualTo(gsOutStockAdivce.getWhId()) .andGoodsIdEqualTo(gsOutStockAdivce.getGoodsId()) .andOrderNoEqualTo(gsOutStockAdivce.getSaleOrderNo()); List<GsGoodsUse> gsGoodsUsessub = gsGoodsUseMapper.selectByExample(usex); if(gsGoodsUsessub.size()>0){ GsGoodsUse goodsUse = gsGoodsUsessub.get(0); if((goodsUse.getLockQty()-gsOutStockAdivce.getQty())>0){ goodsUse.setLockQty(goodsUse.getLockQty()-gsOutStockAdivce.getQty()); goodsUse.setUpdateTime(date); gsGoodsUseMapper.updateByPrimaryKey(goodsUse); }else { gsGoodsUseMapper.deleteByPrimaryKey(goodsUse.getId()); } } } /** *@author: zhaoguoliang *@date: Create in 2022/9/29 17:31 *根据商品id和仓库id查未被占用的sn商品 * */ @Override public List<GsGoodsSnVo> selectGoodsSnByWhIdAndGoodsId(Integer whId, Integer goodsId) { List<GsGoodsSnVo> gsGoodsSnVos = gsGoodsSnMapper.selectGoodsSnByWhIdAndGoodsId(whId,goodsId); Map<Integer, String> integerStringMap = baseCheckService.brandMap(); for (GsGoodsSnVo gsGoodsSnVo:gsGoodsSnVos) { if(gsGoodsSnVo.getCbpb10()!=null){ gsGoodsSnVo.setCbpb10(integerStringMap.get(Integer.parseInt(gsGoodsSnVo.getCbpb10()))); } } return gsGoodsSnVos; } @Override @Transactional public void mdfTakeSuggest2(CbpmDto cbpmDto) { CbpmCriteria cbpmCriteria =new CbpmCriteria(); cbpmCriteria.createCriteria().andCbpk01EqualTo(cbpmDto.getCbpk01()); //出货单中的扫码记录 List<Cbpm> cbpmList = cbpmMapper.selectByExample(cbpmCriteria); //前端传过来的参数 List<CbpmDto.CbpmDtoItem> canList = cbpmDto.getGoodsSnList(); //检查出库单中的商品是否存在,如果不存在,则说明在执行删除操作 //销售提货单主表关联的数据遍历 for(Cbpm cbpm:cbpmList){ int index =0; //前端传来的商品遍历 for (CbpmDto.CbpmDtoItem cbpmDtoItem : canList) { //商品在传来的前端传来的商品中 if(cbpm.getCbpm09().equals(cbpmDtoItem.getSn())){ index =1; } } //index为1则说明此商品未被前端删除,index为0则说明商品不在前端传来的商品集合中,已被前端删除 if(index == 0){ //判断商品是否已扫码 if(cbpm.getCbpm11() == 1){ throw new SwException("您选择删除的Sn商品已扫码:" + cbpm.getCbpm09()); } /* CbpmCriteria cbpmCriteria2 =new CbpmCriteria(); cbpmCriteria2.createCriteria() .andCbpm09EqualTo(cbpm.getCbpm09());*/ //删除CBPM表中的数据 cbpmMapper.deleteByPrimaryKey(cbpm.getCbpm01()); GsGoodsSn gsGoodsSn3 = new GsGoodsSn(); gsGoodsSn3.setStatus((byte) 1L); gsGoodsSn3.setGroudStatus((byte) 1L); GsGoodsSnCriteria gsGoodsSnCriteria =new GsGoodsSnCriteria(); gsGoodsSnCriteria.createCriteria().andSnEqualTo(cbpm.getCbpm09()); gsGoodsSnMapper.updateByExampleSelective(gsGoodsSn3,gsGoodsSnCriteria); } } for (CbpmDto.CbpmDtoItem cbpmDtoItem : canList) { int index =0; for(Cbpm cbpm:cbpmList){ if(cbpm.getCbpm09().equals(cbpmDtoItem.getSn())){ index =1; } } if(index == 0){ //检查修改的商品是否在建议出库单中存在 CbpmCriteria example=new CbpmCriteria(); example.createCriteria() .andCbpm09EqualTo(cbpmDtoItem.getSn()); List<Cbpm> cbpms = cbpmMapper.selectByExample(example); if(cbpms.size()>0){ throw new SwException("您选择的Sn商品已经在别的出库单中存在:" + cbpmDtoItem.getSn()); } Cbpm cbpm=new Cbpm(); cbpm.setCbpm07(0); cbpm.setCbpm08(cbpmDtoItem.getGoodsId()); cbpm.setCbpm09(cbpmDtoItem.getSn()); cbpm.setCbpm10(cbpmDtoItem.getLocationId()); cbpm.setCbpm05(new Date()); cbpm.setCbpk01(cbpmDto.getCbpk01()); cbpm.setCbpm06(Integer.parseInt(SecurityUtils.getUserId()+"")); cbpmMapper.insertSelective(cbpm); GsGoodsSn gsGoodsSn2 = new GsGoodsSn(); gsGoodsSn2.setId(cbpmDtoItem.getId()); gsGoodsSn2.setStatus((byte) 2L); gsGoodsSn2.setGroudStatus((byte) 2L); gsGoodsSnMapper.updateByPrimaryKeySelective(gsGoodsSn2); } /* //检查修改的商品是否在建议出库单中存在 CbpmCriteria example=new CbpmCriteria(); example.createCriteria() .andCbpm09EqualTo(changeSuggestModel.getCbpm09()); List<Cbpm> cbpms = cbpmMapper.selectByExample(example); if(cbpms.size()>0 && !cbpms.get(0).getCbpm01().equals(changeSuggestModel.getCbpm01())){ throw new SwException("您选择的Sn商品已经在别的出库单中存在:" + changeSuggestModel.getCbpm09()); } Cbpm cbpm=new Cbpm(); cbpm.setCbpm01(changeSuggestModel.getCbpm01()); cbpm.setCbpm07(changeSuggestModel.getCbpm07()); cbpm.setCbpm08(changeSuggestModel.getCbpm08()); cbpm.setCbpm09(changeSuggestModel.getCbpm09()); cbpm.setCbpm10(changeSuggestModel.getCbpm10()); cbpm.setCbpm05(date); cbpm.setCbpm06(changeSuggestDto.getUserId()); cbpmMapper.updateByPrimaryKey(cbpm);*/ } } }
1.4 Mapper部分
package com.ruoyi.system.mapper; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.system.domain.SysUserCriteria; import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @Mapper public interface SysUserMapper { long countByExample(SysUserCriteria example); int deleteByExample(SysUserCriteria example); int deleteByPrimaryKey(Long userId); int insert(SysUser record); int insertSelective(SysUser record); List<SysUser> selectByExample(SysUserCriteria example); SysUser selectByPrimaryKey(Long userId); int updateByExampleSelective(@Param("record") SysUser record, @Param("example") SysUserCriteria example); int updateByExample(@Param("record") SysUser record, @Param("example") SysUserCriteria example); int updateByPrimaryKeySelective(SysUser record); int updateByPrimaryKey(SysUser record); }
略
1.2 文件处理工具类
package com.ruoyi.common.utils.file; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.ArrayUtils; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.uuid.IdUtils; import org.apache.commons.io.FilenameUtils; /** * 文件处理工具类 * * @author ruoyi */ public class FileUtils { public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+"; /** * 输出指定文件的byte数组 * * @param filePath 文件路径 * @param os 输出流 * @return */ public static void writeBytes(String filePath, OutputStream os) throws IOException { FileInputStream fis = null; try { File file = new File(filePath); if (!file.exists()) { throw new FileNotFoundException(filePath); } fis = new FileInputStream(file); byte[] b = new byte[1024]; int length; while ((length = fis.read(b)) > 0) { os.write(b, 0, length); } } catch (IOException e) { throw e; } finally { IOUtils.close(os); IOUtils.close(fis); } } /** * 写数据到文件中 * * @param data 数据 * @return 目标文件 * @throws IOException IO异常 */ public static String writeImportBytes(byte[] data) throws IOException { return writeBytes(data, RuoYiConfig.getImportPath()); } /** * 写数据到文件中 * * @param data 数据 * @param uploadDir 目标文件 * @return 目标文件 * @throws IOException IO异常 */ public static String writeBytes(byte[] data, String uploadDir) throws IOException { FileOutputStream fos = null; String pathName = ""; try { String extension = getFileExtendName(data); pathName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension; File file = FileUploadUtils.getAbsoluteFile(uploadDir, pathName); fos = new FileOutputStream(file); fos.write(data); } finally { IOUtils.close(fos); } return FileUploadUtils.getPathFileName(uploadDir, pathName); } /** * 删除文件 * * @param filePath 文件 * @return */ public static boolean deleteFile(String filePath) { boolean flag = false; File file = new File(filePath); // 路径为文件且不为空则进行删除 if (file.isFile() && file.exists()) { file.delete(); flag = true; } return flag; } /** * 文件名称验证 * * @param filename 文件名称 * @return true 正常 false 非法 */ public static boolean isValidFilename(String filename) { return filename.matches(FILENAME_PATTERN); } /** * 检查文件是否可下载 * * @param resource 需要下载的文件 * @return true 正常 false 非法 */ public static boolean checkAllowDownload(String resource) { // 禁止目录上跳级别 if (StringUtils.contains(resource, "..")) { return false; } // 检查允许下载的文件规则 if (ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(resource))) { return true; } // 不在允许下载的文件规则 return false; } /** * 下载文件名重新编码 * * @param request 请求对象 * @param fileName 文件名 * @return 编码后的文件名 */ public static String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException { final String agent = request.getHeader("USER-AGENT"); String filename = fileName; if (agent.contains("MSIE")) { // IE浏览器 filename = URLEncoder.encode(filename, "utf-8"); filename = filename.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐浏览器 filename = new String(fileName.getBytes(), "ISO8859-1"); } else if (agent.contains("Chrome")) { // google浏览器 filename = URLEncoder.encode(filename, "utf-8"); } else { // 其它浏览器 filename = URLEncoder.encode(filename, "utf-8"); } return filename; } /** * 下载文件名重新编码 * * @param response 响应对象 * @param realFileName 真实文件名 */ public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException { String percentEncodedFileName = percentEncode(realFileName); StringBuilder contentDispositionValue = new StringBuilder(); contentDispositionValue.append("attachment; filename=") .append(percentEncodedFileName) .append(";") .append("filename*=") .append("utf-8''") .append(percentEncodedFileName); response.addHeader("Access-Control-Expose-Headers", "Content-Disposition,download-filename"); response.setHeader("Content-disposition", contentDispositionValue.toString()); response.setHeader("download-filename", percentEncodedFileName); } /** * 百分号编码工具方法 * * @param s 需要百分号编码的字符串 * @return 百分号编码后的字符串 */ public static String percentEncode(String s) throws UnsupportedEncodingException { String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString()); return encode.replaceAll("\\+", "%20"); } /** * 获取图像后缀 * * @param photoByte 图像数据 * @return 后缀名 */ public static String getFileExtendName(byte[] photoByte) { String strFileExtendName = "jpg"; if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56) && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) { strFileExtendName = "gif"; } else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) { strFileExtendName = "jpg"; } else if ((photoByte[0] == 66) && (photoByte[1] == 77)) { strFileExtendName = "bmp"; } else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) { strFileExtendName = "png"; } return strFileExtendName; } /** * 获取文件名称 /profile/upload/2022/04/16/ruoyi.png -- ruoyi.png * * @param fileName 路径名称 * @return 没有文件路径的名称 */ public static String getName(String fileName) { if (fileName == null) { return null; } int lastUnixPos = fileName.lastIndexOf('/'); int lastWindowsPos = fileName.lastIndexOf('\\'); int index = Math.max(lastUnixPos, lastWindowsPos); return fileName.substring(index + 1); } /** * 获取不带后缀文件名称 /profile/upload/2022/04/16/ruoyi.png -- ruoyi * * @param fileName 路径名称 * @return 没有文件路径和后缀的名称 */ public static String getNameNotSuffix(String fileName) { if (fileName == null) { return null; } String baseName = FilenameUtils.getBaseName(fileName); return baseName; } }
三.Vue部分
<div style="margin-left: 5%" v-if="edit == 0"> <el-button v-if="status == 1" type="primary" @click="PrintRows">审 核</el-button> <el-button v-else-if="status == 2" type="primary" @click="PrintRowss">反 审</el-button> <el-button v-else type="primary" @click="PrintRow">质 检</el-button> <el-button type="primary" @click="exportDetail">导出</el-button> <el-button type="primary" @click="printTakeOrderOrder">销售订单打印</el-button> <el-button type="primary" @click="printTakeOrderScanLog">扫码记录打印</el-button> <el-button type="primary" @click="printTakeOrderSuggest">出库建议打印</el-button> <el-button type="primary" @click="handlefanhui">返 回</el-button> </div>
// 销售订单打印 printTakeOrderOrder() { const userId = this.$route.params && this.$route.params.cbpc01; this.download( "/whmanagement/printTakeOrderOrder?id=" + userId, {}, `销售提货订单表—_${new Date().toLocaleDateString()}.xls` ); }, // 出库建议表 printTakeOrderSuggest() { const userId = this.$route.params && this.$route.params.cbpc01; this.download( "/whmanagement/printTakeOrderSuggest?id=" + userId, {}, `出库建议表—_${new Date().toLocaleDateString()}.pdf` ); }, // 扫描记录表 printTakeOrderScanLog() { const userId = this.$route.params && this.$route.params.cbpc01; this.download( "/whmanagement/printTakeOrderScanLog?id=" + userId, {}, `扫描记录表—_${new Date().toLocaleDateString()}.pdf` ); },