diff --git a/lms/nladmin-system/pom.xml b/lms/nladmin-system/pom.xml index 470acd41e..31885a1f6 100644 --- a/lms/nladmin-system/pom.xml +++ b/lms/nladmin-system/pom.xml @@ -380,6 +380,13 @@ jcifs 1.3.17 + + + + com.alibaba + easyexcel + 2.2.6 + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/CheckOutBillService.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/CheckOutBillService.java index 3e88d2db8..8cbd99c80 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/CheckOutBillService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/CheckOutBillService.java @@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.springframework.data.domain.Pageable; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.Map; public interface CheckOutBillService { @@ -168,4 +170,10 @@ public interface CheckOutBillService { * 发货信息保存 */ void moneySubmit(JSONObject whereJson); + + /** + * 下载发货单Excel + * @param whereJson / + */ + void downloadExcel(HttpServletResponse response, Map whereJson) throws IOException; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java index 85600eb57..b4dcb58aa 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java @@ -12,6 +12,8 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.Map; @RestController @@ -201,4 +203,12 @@ public class CheckOutBillController { checkOutBillService.moneySubmit(whereJson); return new ResponseEntity<>(HttpStatus.OK); } + + @Log("下载发货单Excel") + @ApiOperation("下载发货单Excel") + @GetMapping(value = "/downloadExcel") + public ResponseEntity downloadExcel(HttpServletResponse response, @RequestParam Map whereJson) throws IOException { + checkOutBillService.downloadExcel(response,whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java index d5f9e6ca5..88504f844 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java @@ -3,15 +3,19 @@ package org.nl.wms.st.outbill.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillWrapper; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.utils.SecurityUtils; -import org.nl.modules.system.domain.Param; import org.nl.modules.system.service.impl.ParamServiceImpl; import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.WQL; @@ -22,19 +26,23 @@ import org.nl.wms.ext.mes.service.impl.LmsToMesServiceImpl; import org.nl.wms.ext.sap.service.impl.LmsToSapServiceImpl; import org.nl.wms.pda.mps.eum.RegionTypeEnum; import org.nl.wms.sch.manage.TaskStatusEnum; -import org.nl.wms.sch.service.dto.TaskDto; import org.nl.wms.sch.tasks.OutTask; import org.nl.wms.st.inbill.service.CheckOutBillService; import org.nl.wms.st.inbill.service.RawAssistIStorService; import org.nl.wms.st.inbill.service.StorPublicService; import org.nl.wms.st.instor.service.HandMoveStorService; -import org.nl.wms.st.instor.service.impl.HandMoveStorServiceImpl; import org.nl.wms.st.instor.task.HandMoveStorAcsTask; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.math.BigDecimal; import java.util.*; /** @@ -2113,12 +2121,94 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { @Override @Transactional(rollbackFor = Exception.class) public void moneySubmit(JSONObject whereJson) { - WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_IOStorInv"); mstTab.update(whereJson); } + @Override + @Transactional(rollbackFor = Exception.class) + public void downloadExcel(HttpServletResponse response, Map whereJson) throws IOException { + + WQLObject custTab = WQLObject.getWQLObject("MD_CS_CustomerBase"); // 客户基本信息表 + WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_IOStorInv"); // 出入库主表 + + JSONObject jsonMst = mstTab.query("iostorinv_id = '" + MapUtil.getStr(whereJson, "iostorinv_id") + "'").uniqueResult(0); + String cust_code = jsonMst.getString("cust_code"); + + JSONObject jsonCust = custTab.query("cust_code = '" + cust_code + "'").uniqueResult(0); + + //1.根据出入库主表中 收货单位 查询客户表中的模板路径 + String code_template = jsonCust.getString("shd_print_no"); + // 2.获取输出流 + ServletOutputStream outputStream = response.getOutputStream(); + // 3.创建模板工作簿 + ExcelWriter workBook = EasyExcel.write(outputStream, null).withTemplate(code_template).build(); + // 4.获取第一个sheet +// WriteSheet sheet = EasyExcel.writerSheet().build(); + // 5.多组填充 + JSONArray dtlArr = WQL.getWO("ST_OUTIVT02").addParam("flag", "3").addParam("iostorinv_id", MapUtil.getStr(whereJson, "iostorinv_id")).process().getResultJSONArray(0); + + int shd_dtl_num = jsonCust.getIntValue("shd_dtl_num"); // 送货单明细数 + ArrayList> flData = new ArrayList<>(); + + if (shd_dtl_num > dtlArr.size()) { + WriteSheet sheet = EasyExcel.writerSheet().build(); + for (int i = 0; i < dtlArr.size(); i++) { + JSONObject json = dtlArr.getJSONObject(i); + HashMap mapFL = new HashMap<>(); + + mapFL.put("index", i + 1); + mapFL.put("source_bill_code", json.getString("source_bill_code")); + mapFL.put("material_name", json.getString("material_name")); + mapFL.put("material_spec", json.getString("material_spec")); + mapFL.put("qty", json.getString("real_qty")); + mapFL.put("remark", json.getString("remark")); + flData.add(mapFL); + } + workBook.fill(new FillWrapper("data", flData), sheet); + workBook.finish(); + } else { + double div = NumberUtil.div(dtlArr.size(), shd_dtl_num); + double ceil = Math.ceil(div); + Integer integer = Integer.valueOf(String.valueOf(NumberUtil.round(ceil, 0))); + + + for (int j = 0; j < integer; j++) { + HashMap mapFL = new HashMap<>(); + + for (int i = j*shd_dtl_num; i < (j+1)*shd_dtl_num; i++) { + if (i == dtlArr.size()) { + break; + } + JSONObject json = dtlArr.getJSONObject(i); + mapFL.put("index", i + 1); + mapFL.put("source_bill_code", json.getString("source_bill_code")); + mapFL.put("material_name", json.getString("material_name")); + mapFL.put("material_spec", json.getString("material_spec")); + mapFL.put("qty", json.getString("real_qty")); + mapFL.put("remark", json.getString("remark")); + flData.add(mapFL); + + } + WriteSheet sheet = EasyExcel.writerSheet(j+1).build(); + workBook.fill(new FillWrapper("data", flData), sheet); + workBook.finish(); + } + } + + +// workBook.fill(oneMap, sheet); +// workBook.fill(ylData, sheet); + } + + public static void main(String[] args) { + double ceil = Math.ceil(2.2); + Integer integer = Integer.valueOf(String.valueOf(NumberUtil.round(ceil, 0))); + System.out.println(integer); + + } + /** * 更新主表状态 * diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_OUTIVT02.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_OUTIVT02.wql index 8be8013da..61ae56fae 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_OUTIVT02.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_OUTIVT02.wql @@ -77,6 +77,27 @@ dis.iostorinv_id = 输入.iostorinv_id ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + dtl.*, + mater.material_code, + mater.material_name, + mater.material_spec + FROM + ST_IVT_IOStorInvDtl dtl + LEFT JOIN md_me_materialbase mater ON mater.material_id = dtl.material_id + WHERE + 1 = 1 + + OPTION 输入.iostorinv_id <> "" + dtl.iostorinv_id = 输入.iostorinv_id + ENDOPTION + ENDSELECT ENDQUERY ENDIF \ No newline at end of file diff --git a/lms/nladmin-ui/src/views/wms/st/outbill/index.vue b/lms/nladmin-ui/src/views/wms/st/outbill/index.vue index 487e4f499..f0faf3d26 100644 --- a/lms/nladmin-ui/src/views/wms/st/outbill/index.vue +++ b/lms/nladmin-ui/src/views/wms/st/outbill/index.vue @@ -180,7 +180,7 @@ 打印 @@ -234,6 +234,8 @@ import TaskDialog from '@/views/wms/st/outbill/TaskDialog' import ViewDialog from '@/views/wms/st/outbill/ViewDialog' import crudStorattr from '@/views/wms/basedata/st/stor/storattr' import { getLodop } from '@/assets/js/lodop/LodopFuncs' +import { download } from '@/api/data' +import { downloadFile } from '@/utils' export default { name: 'Checkoutbill', @@ -546,6 +548,14 @@ export default { } arr.push('') return strStyle + arr.join('') + }, + printExcel(jo) { + download('/api/checkoutbill/downloadExcel', { 'iostorinv_id': jo.iostorinv_id }).then(result => { + downloadFile(result, '', 'xlsx') + crud.downloadLoading = false + }).catch(() => { + crud.downloadLoading = false + }) } } }