package jnpf.controller; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jnpf.base.ActionResult; import jnpf.base.UserInfo; import jnpf.exception.DataException; import jnpf.permission.entity.UserEntity; import jnpf.service.*; import jnpf.entity.*; import jnpf.util.*; import jnpf.model.deliveryorder.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.*; import jnpf.annotation.JnpfField; import jnpf.base.vo.PageListVO; import jnpf.base.vo.PaginationVO; import jnpf.base.vo.DownloadVO; import jnpf.config.ConfigValueUtil; import jnpf.base.entity.ProvinceEntity; import java.io.IOException; import java.util.stream.Collectors; import jnpf.engine.entity.FlowTaskEntity; import jnpf.exception.WorkFlowException; import org.springframework.web.multipart.MultipartFile; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; import java.io.File; import jnpf.onlinedev.model.ExcelImFieldModel; import jnpf.onlinedev.model.OnlineImport.ImportDataModel; import jnpf.onlinedev.model.OnlineImport.ImportFormCheckUniqueModel; import jnpf.onlinedev.model.OnlineImport.ExcelImportModel; import jnpf.onlinedev.model.OnlineImport.VisualImportModel; import cn.xuyanwu.spring.file.storage.FileInfo; import lombok.Cleanup; import jnpf.model.visualJson.config.HeaderModel; import jnpf.base.model.ColumnDataModel; import jnpf.base.util.VisualUtils; import org.springframework.transaction.annotation.Transactional; /** * deliveryOrder * @版本: V3.5 * @版权: 引迈信息技术有限公司(https://www.jnpfsoft.com) * @作者: JNPF开发平台组 * @日期: 2024-02-23 */ @Slf4j @RestController @Tag(name = "deliveryOrder" , description = "scm") @RequestMapping("/api/scm/DeliveryOrder") public class DeliveryOrderController { @Autowired private GeneraterSwapUtil generaterSwapUtil; @Autowired private UserProvider userProvider; @Autowired private DeliveryOrderService deliveryOrderService; @Autowired private DeliveryVoucherRelationService deliveryVoucherRelationService; @Autowired private DeliveryProductRelationService deliveryProductRelationService; @Autowired private ConfigValueUtil configValueUtil; /** * 列表 * * @param deliveryOrderPagination * @return */ @Operation(summary = "获取列表") @PostMapping("/getList") public ActionResult list(@RequestBody DeliveryOrderPagination deliveryOrderPagination)throws IOException{ List list= deliveryOrderService.getList(deliveryOrderPagination); List> realList=new ArrayList<>(); for (DeliveryOrderEntity entity : list) { Map deliveryOrderMap=JsonUtil.entityToMap(entity); deliveryOrderMap.put("id", deliveryOrderMap.get("id")); //副表数据 //子表数据 List deliveryVoucherRelationList = deliveryOrderService.getDeliveryVoucherRelationList(entity.getId(),deliveryOrderPagination); deliveryOrderMap.put("tableField128",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(deliveryVoucherRelationList))); List deliveryProductRelationList = deliveryOrderService.getDeliveryProductRelationList(entity.getId(),deliveryOrderPagination); deliveryOrderMap.put("tableField144",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(deliveryProductRelationList))); realList.add(deliveryOrderMap); } //数据转换 realList = generaterSwapUtil.swapDataList(realList, DeliveryOrderConstant.getFormData(), DeliveryOrderConstant.getColumnData(), deliveryOrderPagination.getModuleId(),false); //流程状态添加 for(Map vo:realList){ FlowTaskEntity flowTaskEntity = generaterSwapUtil.getInfoSubmit(String.valueOf(vo.get("id")), FlowTaskEntity::getStatus); if (flowTaskEntity!=null){ vo.put("flowState",flowTaskEntity.getStatus()); }else{ vo.put("flowState",null); } //添加流程id String flowId=""; if(vo.get("flowid")!=null){ flowId = String.valueOf(vo.get("flowid")); } if(vo.get("flowid".toUpperCase())!=null){ flowId = String.valueOf(vo.get("flowid".toUpperCase())); } if(StringUtil.isNotEmpty(flowId)){ vo.put("flowId" ,flowId); } } //返回对象 PageListVO vo = new PageListVO(); vo.setList(realList); PaginationVO page = JsonUtil.getJsonToBean(deliveryOrderPagination, PaginationVO.class); vo.setPagination(page); return ActionResult.success(vo); } /** * 创建 * * @param deliveryOrderForm * @return */ @PostMapping("/{id}") @Operation(summary = "创建") public ActionResult create(@PathVariable("id") String id, @RequestBody @Valid DeliveryOrderForm deliveryOrderForm) { String b = deliveryOrderService.checkForm(deliveryOrderForm,0); if (StringUtil.isNotEmpty(b)){ return ActionResult.fail(b ); } try{ deliveryOrderService.saveOrUpdate(deliveryOrderForm, id ,true); }catch(Exception e){ return ActionResult.fail("新增数据失败"); } return ActionResult.success("创建成功"); } /** * 导出Excel * * @return */ @Operation(summary = "导出Excel") @PostMapping("/Actions/Export") public ActionResult Export(@RequestBody DeliveryOrderPagination deliveryOrderPagination) throws IOException { if (StringUtil.isEmpty(deliveryOrderPagination.getSelectKey())){ return ActionResult.fail("请选择导出字段"); } List list= deliveryOrderService.getList(deliveryOrderPagination); List> realList=new ArrayList<>(); for (DeliveryOrderEntity entity : list) { Map deliveryOrderMap=JsonUtil.entityToMap(entity); deliveryOrderMap.put("id", deliveryOrderMap.get("id")); //副表数据 //子表数据 List deliveryVoucherRelationList = deliveryOrderService.getDeliveryVoucherRelationList(entity.getId(),deliveryOrderPagination); deliveryOrderMap.put("tableField128",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(deliveryVoucherRelationList))); List deliveryProductRelationList = deliveryOrderService.getDeliveryProductRelationList(entity.getId(),deliveryOrderPagination); deliveryOrderMap.put("tableField144",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(deliveryProductRelationList))); realList.add(deliveryOrderMap); } //数据转换 realList = generaterSwapUtil.swapDataList(realList, DeliveryOrderConstant.getFormData(), DeliveryOrderConstant.getColumnData(), deliveryOrderPagination.getModuleId(),false); String[]keys=!StringUtil.isEmpty(deliveryOrderPagination.getSelectKey())?deliveryOrderPagination.getSelectKey():new String[0]; UserInfo userInfo=userProvider.get(); DownloadVO vo=this.creatModelExcel(configValueUtil.getTemporaryFilePath(),realList,keys,userInfo); return ActionResult.success(vo); } /** * 导出表格方法 */ public DownloadVO creatModelExcel(String path,List>list,String[]keys,UserInfo userInfo){ DownloadVO vo=DownloadVO.builder().build(); List entitys=new ArrayList<>(); if(keys.length>0){ ExcelExportEntity tableField128ExcelEntity = new ExcelExportEntity("","tableField128"); List tableField128List = new ArrayList<>(); ExcelExportEntity tableField144ExcelEntity = new ExcelExportEntity("","tableField144"); List tableField144List = new ArrayList<>(); for(String key:keys){ switch(key){ case "deliveryType" : entitys.add(new ExcelExportEntity("业务类型" ,"deliveryType")); break; case "deliveryCode" : entitys.add(new ExcelExportEntity("订单编号" ,"deliveryCode")); break; case "preparationTime" : entitys.add(new ExcelExportEntity("制单时间" ,"preparationTime")); break; case "businessId" : entitys.add(new ExcelExportEntity("关联销售" ,"businessId")); break; case "reservedFields1" : entitys.add(new ExcelExportEntity("业务线" ,"reservedFields1")); break; case "subjectId" : entitys.add(new ExcelExportEntity("客户名称" ,"subjectId")); break; case "deliveryAddress" : entitys.add(new ExcelExportEntity("收货地址" ,"deliveryAddress")); break; case "enterpriseId" : entitys.add(new ExcelExportEntity("机构名称" ,"enterpriseId")); break; case "warehouseId" : entitys.add(new ExcelExportEntity("发货仓库" ,"warehouseId")); break; case "shippingAddress" : entitys.add(new ExcelExportEntity("发货地址" ,"shippingAddress")); break; case "remark" : entitys.add(new ExcelExportEntity("备注" ,"remark")); break; case "tableField128-voucherId": tableField128List.add(new ExcelExportEntity("凭证编号" ,"voucherId")); break; case "tableField128-documentType": tableField128List.add(new ExcelExportEntity("单据类型" ,"documentType")); break; case "tableField128-voucherType": tableField128List.add(new ExcelExportEntity("凭证类型" ,"voucherType")); break; case "tableField128-poundCode": tableField128List.add(new ExcelExportEntity("磅单编号" ,"poundCode")); break; case "tableField128-poundlistTime": tableField128List.add(new ExcelExportEntity("磅单时间" ,"poundlistTime")); break; case "tableField128-vehicleName": tableField128List.add(new ExcelExportEntity("车牌号" ,"vehicleName")); break; case "tableField128-productId": tableField128List.add(new ExcelExportEntity("商品名称" ,"productId")); break; case "tableField128-spec": tableField128List.add(new ExcelExportEntity("规格" ,"spec")); break; case "tableField128-unit": tableField128List.add(new ExcelExportEntity("单位" ,"unit")); break; case "tableField128-grossWeight": tableField128List.add(new ExcelExportEntity("毛重" ,"grossWeight")); break; case "tableField128-tareWeight": tableField128List.add(new ExcelExportEntity("皮重" ,"tareWeight")); break; case "tableField128-buckleWeight": tableField128List.add(new ExcelExportEntity("扣重" ,"buckleWeight")); break; case "tableField128-netWeight": tableField128List.add(new ExcelExportEntity("净重" ,"netWeight")); break; case "tableField128-remark": tableField128List.add(new ExcelExportEntity("备注" ,"remark")); break; case "tableField144-productId": tableField144List.add(new ExcelExportEntity("商品名称" ,"productId")); break; case "tableField144-spec": tableField144List.add(new ExcelExportEntity("规格" ,"spec")); break; case "tableField144-inventoryUnitId": tableField144List.add(new ExcelExportEntity("库存单位" ,"inventoryUnitId")); break; case "tableField144-salesMainUnitId": tableField144List.add(new ExcelExportEntity("销售单位" ,"salesMainUnitId")); break; case "tableField144-saleNum": tableField144List.add(new ExcelExportEntity("销售数量" ,"saleNum")); break; case "tableField144-deliveryUnit": tableField144List.add(new ExcelExportEntity("发货单位" ,"deliveryUnit")); break; case "tableField144-grossWeight": tableField144List.add(new ExcelExportEntity("毛重" ,"grossWeight")); break; case "tableField144-tareWeight": tableField144List.add(new ExcelExportEntity("皮重" ,"tareWeight")); break; case "tableField144-buckleWeight": tableField144List.add(new ExcelExportEntity("扣重" ,"buckleWeight")); break; case "tableField144-netWeight": tableField144List.add(new ExcelExportEntity("净重" ,"netWeight")); break; case "tableField144-cargoId": tableField144List.add(new ExcelExportEntity("货区名称" ,"cargoId")); break; case "tableField144-deliveryNum": tableField144List.add(new ExcelExportEntity("发货数量" ,"deliveryNum")); break; case "tableField144-batchNo": tableField144List.add(new ExcelExportEntity("批次号" ,"batchNo")); break; case "tableField144-produceTime": tableField144List.add(new ExcelExportEntity("生产日期" ,"produceTime")); break; case "tableField144-returnUnit": tableField144List.add(new ExcelExportEntity("退货单价" ,"returnUnit")); break; case "tableField144-tax": tableField144List.add(new ExcelExportEntity("税率" ,"tax")); break; case "tableField144-taxCount": tableField144List.add(new ExcelExportEntity("含税小计" ,"taxCount")); break; case "tableField144-notTaxPrice": tableField144List.add(new ExcelExportEntity("不含税单价" ,"notTaxPrice")); break; case "tableField144-notTaxCount": tableField144List.add(new ExcelExportEntity("不含税小计" ,"notTaxCount")); break; case "tableField144-remark": tableField144List.add(new ExcelExportEntity("备注" ,"remark")); break; default: break; } } if(tableField128List.size() > 0){ tableField128ExcelEntity.setList(tableField128List); entitys.add(tableField128ExcelEntity); } if(tableField144List.size() > 0){ tableField144ExcelEntity.setList(tableField144List); entitys.add(tableField144ExcelEntity); } } ExportParams exportParams = new ExportParams(null, "表单信息"); exportParams.setType(ExcelType.XSSF); try{ @Cleanup Workbook workbook = new HSSFWorkbook(); if (entitys.size()>0){ if (list.size()==0){ list.add(new HashMap<>()); } //去除空数据 List> dataList = new ArrayList<>(); for (Map map : list) { int i = 0; for (String key : keys) { //子表 if (key.toLowerCase().startsWith("tablefield")) { String tableField = key.substring(0, key.indexOf("-" )); String field = key.substring(key.indexOf("-" ) + 1); Object o = map.get(tableField); if (o != null) { List> childList = (List>) o; for (Map childMap : childList) { if (childMap.get(field) != null) { i++; } } } } else { Object o = map.get(key); if (o != null) { i++; } } } if (i > 0) { dataList.add(map); } } //复杂表头-表头和数据处理 ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(DeliveryOrderConstant.getColumnData(), ColumnDataModel.class); List complexHeaderList = columnDataModel.getComplexHeaderList(); if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) { entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList); dataList = VisualUtils.complexHeaderDataHandel(dataList, complexHeaderList); } workbook = ExcelExportUtil.exportExcel(exportParams, entitys, dataList); } String fileName = "表单信息" + DateUtil.dateNow("yyyyMMdd") + "_" + RandomUtil.uuId() + ".xlsx"; MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName); String temporaryFilePath = configValueUtil.getTemporaryFilePath(); FileInfo fileInfo = FileUploadUtils.uploadFile(multipartFile, temporaryFilePath, fileName); vo.setName(fileInfo.getFilename()); vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + fileName); } catch (Exception e) { log.error("信息导出Excel错误:{}", e.getMessage()); e.printStackTrace(); } return vo; } /** * 批量删除 * @param ids * @return */ @DeleteMapping("/batchRemove") @Transactional @Operation(summary = "批量删除") public ActionResult batchRemove(@RequestBody String ids){ List idList = JsonUtil.getJsonToList(ids, String.class); List columnIdList = new ArrayList<>(20); int i =0; String errInfo = ""; for (String allId : idList){ FlowTaskEntity taskEntity = generaterSwapUtil.getInfoSubmit(allId, FlowTaskEntity::getId, FlowTaskEntity::getStatus); if (taskEntity==null){ columnIdList.add(allId); this.delete(allId); }else if (taskEntity.getStatus().equals(0) || taskEntity.getStatus().equals(4)){ try { generaterSwapUtil.deleteFlowTask(taskEntity); columnIdList.add(allId); this.delete(allId); i++; } catch (WorkFlowException e) { errInfo = e.getMessage(); e.printStackTrace(); } } } if (i == 0 && columnIdList.size()==0){ return ActionResult.fail("流程已发起,无法删除"); } if (StringUtil.isNotEmpty(errInfo)){ return ActionResult.fail(errInfo); } return ActionResult.success("删除成功"); } /** * 编辑 * @param id * @param deliveryOrderForm * @return */ @PutMapping("/{id}") @Operation(summary = "更新") public ActionResult update(@PathVariable("id") String id,@RequestBody @Valid DeliveryOrderForm deliveryOrderForm, @RequestParam(value = "isImport", required = false) boolean isImport){ deliveryOrderForm.setId(id); if (!isImport) { String b = deliveryOrderService.checkForm(deliveryOrderForm,1); if (StringUtil.isNotEmpty(b)){ return ActionResult.fail(b ); } } DeliveryOrderEntity entity= deliveryOrderService.getInfo(id); if(entity!=null){ try{ deliveryOrderService.saveOrUpdate(deliveryOrderForm,id,false); }catch(Exception e){ return ActionResult.fail("修改数据失败"); } return ActionResult.success("更新成功"); }else{ return ActionResult.fail("更新失败,数据不存在"); } } /** * 删除 * @param id * @return */ @Operation(summary = "删除") @DeleteMapping("/{id}") @Transactional public ActionResult delete(@PathVariable("id") String id){ DeliveryOrderEntity entity= deliveryOrderService.getInfo(id); if(entity!=null){ FlowTaskEntity taskEntity = generaterSwapUtil.getInfoSubmit(id, FlowTaskEntity::getId, FlowTaskEntity::getStatus); if (taskEntity != null) { try { generaterSwapUtil.deleteFlowTask(taskEntity); } catch (WorkFlowException e) { e.printStackTrace(); } } //假删除 entity.setDeleteMark(1); deliveryOrderService.update(id,entity); } return ActionResult.success("删除成功"); } /** * 表单信息(详情页) * 详情页面使用-转换数据 * @param id * @return */ @Operation(summary = "表单信息(详情页)") @GetMapping("/detail/{id}") public ActionResult detailInfo(@PathVariable("id") String id){ DeliveryOrderEntity entity= deliveryOrderService.getInfo(id); if(entity==null){ return ActionResult.fail("表单数据不存在!"); } Map deliveryOrderMap=JsonUtil.entityToMap(entity); deliveryOrderMap.put("id", deliveryOrderMap.get("id")); //副表数据 //子表数据 List deliveryVoucherRelationList = deliveryOrderService.getDeliveryVoucherRelationList(entity.getId()); deliveryOrderMap.put("tableField128",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(deliveryVoucherRelationList))); List deliveryProductRelationList = deliveryOrderService.getDeliveryProductRelationList(entity.getId()); deliveryOrderMap.put("tableField144",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(deliveryProductRelationList))); deliveryOrderMap = generaterSwapUtil.swapDataDetail(deliveryOrderMap,DeliveryOrderConstant.getFormData(),"530411417380062341",false); return ActionResult.success(deliveryOrderMap); } /** * 获取详情(编辑页) * 编辑页面使用-不转换数据 * @param id * @return */ @Operation(summary = "信息") @GetMapping("/{id}") public ActionResult info(@PathVariable("id") String id){ DeliveryOrderEntity entity= deliveryOrderService.getInfo(id); if(entity==null){ return ActionResult.fail("表单数据不存在!"); } Map deliveryOrderMap=JsonUtil.entityToMap(entity); deliveryOrderMap.put("id", deliveryOrderMap.get("id")); //副表数据 //子表数据 List deliveryVoucherRelationList = deliveryOrderService.getDeliveryVoucherRelationList(entity.getId()); deliveryOrderMap.put("deliveryVoucherRelationList",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(deliveryVoucherRelationList))); List deliveryProductRelationList = deliveryOrderService.getDeliveryProductRelationList(entity.getId()); deliveryOrderMap.put("deliveryProductRelationList",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(deliveryProductRelationList))); deliveryOrderMap = generaterSwapUtil.swapDataForm(deliveryOrderMap,DeliveryOrderConstant.getFormData(),DeliveryOrderConstant.TABLEFIELDKEY,DeliveryOrderConstant.TABLERENAMES); return ActionResult.success(deliveryOrderMap); } }