From 502ea2ec134d0678457d16f1df58b49944a5f375 Mon Sep 17 00:00:00 2001 From: z Date: Thu, 16 Apr 2026 09:56:21 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=80=E5=94=AE=E8=AE=A2=E5=8D=95=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-dev.yml | 4 +- .../src/main/resources/application.yml | 6 +- .../jnpf/service/ExampleOrderService.java | 16 +- .../java/jnpf/service/OrderDetailService.java | 2 +- .../service/impl/ExampleOrderServiceImpl.java | 256 ++++++- .../service/impl/OrderDetailServiceImpl.java | 2 +- .../controller/ExampleOrderController.java | 260 ++++++- .../controller/OrderDetailController.java | 24 +- .../java/jnpf/entity/ExampleOrderEntity.java | 12 +- .../java/jnpf/entity/OrderDetailEntity.java | 17 +- .../{OrderForm.java => ExampleOrderForm.java} | 11 +- ...ation.java => ExampleOrderPagination.java} | 6 +- .../model/orderdetail/OrderDetailForm.java | 2 +- .../vue-simple-uploader/fileUploader.vue | 2 +- .../jnpf-web/src/views/example/order/form.vue | 676 +++++++++++++----- .../src/views/example/order/index.vue | 220 ++---- .../src/views/example/shiftResult/index.vue | 3 +- 17 files changed, 1115 insertions(+), 404 deletions(-) rename jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/order/{OrderForm.java => ExampleOrderForm.java} (94%) rename jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/order/{OrderPagination.java => ExampleOrderPagination.java} (89%) diff --git a/jnpf-java-boot/jnpf-admin/src/main/resources/application-dev.yml b/jnpf-java-boot/jnpf-admin/src/main/resources/application-dev.yml index f363e38..3ee8863 100644 --- a/jnpf-java-boot/jnpf-admin/src/main/resources/application-dev.yml +++ b/jnpf-java-boot/jnpf-admin/src/main/resources/application-dev.yml @@ -154,6 +154,8 @@ springdoc: # password: 123456 config: + kkFileUrl: http://222.75.128.58:93/FileServer/ #kkfile文件预览服务地址 + # ===================== 是否开启测试环境 ===================== TestVersion: false # ===================== ApacheShardingSphere 配置开关 ===================== @@ -167,7 +169,7 @@ config: enable-storage: true #启用存储 enable-access: true #启用访问(线上请使用 Nginx 配置,效率更高) domain: "" # 访问域名,例如:“http://127.0.0.1:8030/”,注意后面要和 path-patterns 保持一致,“/”结尾,本地存储建议使用相对路径,方便后期更换域名 - base-path: C:/project/jnpf-resources/ # 基础路径 + base-path: D:/project/jnpf-resources/ # 基础路径 path-patterns: /** # 访问路径 storage-path: # 存储路径 aliyun-oss: # 阿里云 OSS ,不使用的情况下可以不写 diff --git a/jnpf-java-boot/jnpf-admin/src/main/resources/application.yml b/jnpf-java-boot/jnpf-admin/src/main/resources/application.yml index 3592871..604f2a8 100644 --- a/jnpf-java-boot/jnpf-admin/src/main/resources/application.yml +++ b/jnpf-java-boot/jnpf-admin/src/main/resources/application.yml @@ -43,9 +43,9 @@ config: AllowUploadFileType: jpg,gif,png,bmp,jpeg,doc,docx,ppt,pptx,xls,xlsx,pdf,txt,rar,zip,csv,mp3 #允许上传文件类型 AllowPreviewFileType: doc,docx,xls,xlsx,ppt,pptx,pdf,jpg,gif,png,bmp,jpeg #允许预览文件类型 PreviewType: kkfile #文件预览方式 (1.yozo 2.kkfile)默认使用kkfile - kkFileUrl: http://183.129.248.194:90/FileServer/ #kkfile文件预览服务地址 - ApiDomain: http://127.0.0.1:5558 #后端域名(文档预览中使用) - FrontDomain: http://127.0.0.1:5558 #前端域名(文档预览中使用) + kkFileUrl: http://222.75.128.58:93/FileServer/ #kkfile文件预览服务地址 + ApiDomain: http://127.0.0.1:5559 #后端域名(文档预览中使用) + FrontDomain: http://127.0.0.1:5559 #前端域名(文档预览中使用) AppDomain: http://127.0.0.1:8080 #app/h5端域名配置(文档预览中使用) CodeAreasName: example #代码生成器模块命名 diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/ExampleOrderService.java b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/ExampleOrderService.java index 6480222..4c92ef0 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/ExampleOrderService.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/ExampleOrderService.java @@ -1,11 +1,14 @@ package jnpf.service; import com.baomidou.mybatisplus.extension.service.IService; +import jnpf.base.entity.DictionaryDataEntity; import jnpf.entity.ExampleOrderEntity; -import jnpf.model.order.OrderForm; -import jnpf.model.order.OrderPagination; +import jnpf.model.order.ExampleOrderForm; +import jnpf.model.order.ExampleOrderPagination; +import jnpf.permission.entity.UserEntity; import java.util.List; +import java.util.Map; /** * 示例业务订单 Service @@ -18,7 +21,7 @@ import java.util.List; public interface ExampleOrderService extends IService { - List getList(OrderPagination orderPagination); + List getList(ExampleOrderPagination exampleOrderPagination); ExampleOrderEntity getInfo(String id); void delete(ExampleOrderEntity entity); @@ -26,7 +29,10 @@ public interface ExampleOrderService extends IService { void create(ExampleOrderEntity entity); boolean update(String id, ExampleOrderEntity entity); - String checkForm(OrderForm form, int i); - void saveOrUpdate(OrderForm orderForm,String id, boolean isSave) throws Exception; + String checkForm(ExampleOrderForm form, int i); + void saveOrUpdate(ExampleOrderForm orderForm, String id, boolean isSave) throws Exception; + List getByDeptId(String id); + List> convertAttFileToAttachment(String attFile); + void convertFields(Map map,List dictionaryDataEntities); } diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/OrderDetailService.java b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/OrderDetailService.java index 8149c69..386f0a1 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/OrderDetailService.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/OrderDetailService.java @@ -30,6 +30,6 @@ public interface OrderDetailService extends IService { * @param saleOrdId 销售订单ID * @return 订单明细列表 */ - List getListByOrderId(String saleOrdId); + List getListByOrderId(Long saleOrdId); } diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/ExampleOrderServiceImpl.java b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/ExampleOrderServiceImpl.java index 381e59f..1859e5e 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/ExampleOrderServiceImpl.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/ExampleOrderServiceImpl.java @@ -1,17 +1,20 @@ package jnpf.service.impl; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import jnpf.base.UserInfo; +import jnpf.base.entity.DictionaryDataEntity; import jnpf.entity.OrderDetailEntity; import jnpf.entity.ExampleOrderEntity; import jnpf.mapper.ExampleOrderMapper; -import jnpf.model.order.OrderForm; -import jnpf.model.order.OrderPagination; +import jnpf.model.order.ExampleOrderForm; +import jnpf.model.order.ExampleOrderPagination; import jnpf.permission.entity.UserEntity; import jnpf.permission.service.UserService; import jnpf.service.ExampleOrderService; @@ -21,8 +24,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -45,29 +51,29 @@ public class ExampleOrderServiceImpl extends ServiceImpl getList(OrderPagination orderPagination) { + public List getList(ExampleOrderPagination exampleOrderPagination) { LambdaQueryWrapper OrderWrapper=new LambdaQueryWrapper<>(); - if(ObjectUtil.isNotEmpty(orderPagination.getOrdDate())){ - List inParkTimeList = JsonUtil.getJsonToList(orderPagination.getOrdDate(),String.class); + if(ObjectUtil.isNotEmpty(exampleOrderPagination.getOrdDate())){ + List inParkTimeList = JsonUtil.getJsonToList(exampleOrderPagination.getOrdDate(),String.class); Long fir = Long.valueOf(String.valueOf(inParkTimeList.get(0))); Long sec = Long.valueOf(String.valueOf(inParkTimeList.get(1))); OrderWrapper.ge(ExampleOrderEntity::getOrdDate, new Date(fir)) .le(ExampleOrderEntity::getOrdDate, DateUtil.stringToDate(DateUtil.daFormatYmd(sec) + " 23:59:59")); } - if(ObjectUtil.isNotEmpty(orderPagination.getSaleOrdNo())){ - OrderWrapper.like(ExampleOrderEntity::getSaleOrdNo,orderPagination.getSaleOrdNo()); + if(ObjectUtil.isNotEmpty(exampleOrderPagination.getSaleOrdNo())){ + OrderWrapper.like(ExampleOrderEntity::getSaleOrdNo, exampleOrderPagination.getSaleOrdNo()); } - if(ObjectUtil.isNotEmpty(orderPagination.getProjectName())){ - OrderWrapper.like(ExampleOrderEntity::getProjectName,orderPagination.getProjectName()); + if(ObjectUtil.isNotEmpty(exampleOrderPagination.getOrdType())){ + OrderWrapper.eq(ExampleOrderEntity::getOrdType, exampleOrderPagination.getOrdType()); } - if(ObjectUtil.isNotEmpty(orderPagination.getIsUrgent())){ - OrderWrapper.eq(ExampleOrderEntity::getIsUrgent,orderPagination.getIsUrgent()); + if(ObjectUtil.isNotEmpty(exampleOrderPagination.getIsUrgent())){ + OrderWrapper.eq(ExampleOrderEntity::getIsUrgent, exampleOrderPagination.getIsUrgent()); } - if(ObjectUtil.isNotEmpty(orderPagination.getOrdStatus())){ - OrderWrapper.eq(ExampleOrderEntity::getOrdStatus,orderPagination.getOrdStatus()); + if(ObjectUtil.isNotEmpty(exampleOrderPagination.getOrdStatus())){ + OrderWrapper.eq(ExampleOrderEntity::getOrdStatus, exampleOrderPagination.getOrdStatus()); } - if(ObjectUtil.isNotEmpty(orderPagination.getSaleManName())){ - List userList = userService.getUserByName(orderPagination.getSaleManName()); + if(ObjectUtil.isNotEmpty(exampleOrderPagination.getSaleManName())){ + List userList = userService.getUserByName(exampleOrderPagination.getSaleManName()); List ids = userList.stream().map(UserEntity::getId).collect(Collectors.toList()); if (ObjectUtil.isNotEmpty(ids)){ OrderWrapper.in(ExampleOrderEntity::getSaleMan,ids); @@ -75,10 +81,10 @@ public class ExampleOrderServiceImpl extends ServiceImpl page=new Page<>(orderPagination.getCurrentPage(), orderPagination.getPageSize()); + if("0".equals(exampleOrderPagination.getDataType())){ + Page page=new Page<>(exampleOrderPagination.getCurrentPage(), exampleOrderPagination.getPageSize()); IPage userIPage=this.page(page, OrderWrapper); - return orderPagination.setData(userIPage.getRecords(),userIPage.getTotal()); + return exampleOrderPagination.setData(userIPage.getRecords(),userIPage.getTotal()); }else { return this.list(OrderWrapper); } @@ -105,7 +111,7 @@ public class ExampleOrderServiceImpl extends ServiceImpl orderDetailEntityWrapper = new QueryWrapper<>(); - orderDetailEntityWrapper.lambda().eq(OrderDetailEntity::getSaleOrdId, entity.getId()); - orderDetailService.remove(orderDetailEntityWrapper); - } if (ObjectUtil.isNotEmpty(OrderForm.getOrderDetailList())){ List orderDetailEntityList = JsonUtil.getJsonToList(OrderForm.getOrderDetailList(),OrderDetailEntity.class); for(OrderDetailEntity entitys : orderDetailEntityList){ - entitys.setId(RandomUtil.uuId()); entitys.setSaleOrdId(entity.getId()); - if(isSave){ - }else{ - } orderDetailService.saveOrUpdate(entitys); } } } + @Override + public List getByDeptId(String id) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(UserEntity::getOrganizeId, id); + queryWrapper.lambda().ne(UserEntity::getIsAdministrator, 1); + return userService.list(queryWrapper); + } + + /** + * 生成订单编号 + * @param ordType 订单类型:1-备库订单,2-销售订单 + * @return 订单编号 + */ + private String generateSaleOrdNo(String ordType) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM"); + String ym = sdf.format(new Date()); + + String prefix; + if ("1".equals(ordType)) { + prefix = "BK"; + } else if ("2".equals(ordType)) { + prefix = "SO"; + } else { + prefix = "SO"; + } + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ExampleOrderEntity::getOrdType, ordType); + queryWrapper.eq(ExampleOrderEntity::getDeleteMark, null); + queryWrapper.likeRight(ExampleOrderEntity::getSaleOrdNo, prefix + ym); + queryWrapper.orderByDesc(ExampleOrderEntity::getSaleOrdNo); + queryWrapper.last("LIMIT 1"); + + ExampleOrderEntity lastOrder = this.getOne(queryWrapper); + + if (lastOrder == null || lastOrder.getSaleOrdNo() == null) { + return prefix + ym + "001"; + } + + String lastSaleOrdNo = lastOrder.getSaleOrdNo(); + if (lastSaleOrdNo.length() < 9) { + return prefix + ym + "001"; + } + + String lastYm = lastSaleOrdNo.substring(2, 8); + if (!ym.equals(lastYm)) { + return prefix + ym + "001"; + } + + String lastSeq = lastSaleOrdNo.substring(8); + try { + int seq = Integer.parseInt(lastSeq); + seq++; + String newSeq = String.format("%03d", seq); + return prefix + ym + newSeq; + } catch (NumberFormatException e) { + return prefix + ym + "001"; + } + } + /** + * 转换 attFile 为 attachment + * @param attFile attFile 字符串 + * @return attachment 数组 + */ + public List> convertAttFileToAttachment(String attFile) { + if (attFile == null || attFile.isEmpty()) { + return new ArrayList<>(); + } + try { + JSONArray jsonArray = JSON.parseArray(attFile); + List> result = new ArrayList<>(); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jsonObject = jsonArray.getJSONObject(i); + result.add(jsonObject); + } + return result; + } catch (Exception e) { + return new ArrayList<>(); + } + } + + /** + * 转换订单字段 + * @param map 订单数据Map + */ + @Override + public void convertFields(Map map,List dictionaryDataEntities) { + if (map == null) { + return; + } + + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + + //格式化业务人员 + Object saleMan = map.get("saleMan"); + + if (ObjectUtil.isNotEmpty(saleMan)){ + UserEntity byId = userService.getById(Long.parseLong(saleMan.toString())); + if (ObjectUtil.isNotEmpty(byId)){ + map.put("saleManName", byId.getRealName()); + } + } + Object ordStatus = map.get("ordStatus"); +if (ObjectUtil.isNotEmpty(ordStatus)){ + DictionaryDataEntity entity = dictionaryDataEntities.stream().filter(t -> t.getEnCode().equals(ordStatus.toString())).findFirst().orElse(null); + if (ObjectUtil.isNotEmpty( entity)) { + map.put("ordStatus", entity.getFullName()); + } +} + // 格式化下单日期 + Object ordDate = map.get("ordDate"); + if (ordDate != null) { + if (ordDate instanceof Date) { + map.put("ordDate", dateFormat.format((Date) ordDate)); + } + } + + // 格式化要求交货日期 + Object reqDeliveryDate = map.get("reqDeliveryDate"); + if (reqDeliveryDate != null) { + if (reqDeliveryDate instanceof Date) { + map.put("reqDeliveryDate", dateFormat.format((Date) reqDeliveryDate)); + } + } + + // 转换订单类型 + Object ordType = map.get("ordType"); + if (ordType != null) { + String typeStr = String.valueOf(ordType); + if ("1".equals(typeStr)) { + map.put("ordType", "备库订单"); + } else if ("2".equals(typeStr)) { + map.put("ordType", "销售订单"); + } + } + + // 转换是否急单 + Object isUrgent = map.get("isUrgent"); + if (isUrgent != null) { + String urgentStr = String.valueOf(isUrgent); + if ("0".equals(urgentStr)) { + map.put("isUrgent", "是"); + } else if ("1".equals(urgentStr)) { + map.put("isUrgent", "否"); + } + } + + // 转换是否变更 + Object isChange = map.get("isChange"); + if (isChange != null) { + String changeStr = String.valueOf(isChange); + if ("0".equals(changeStr)) { + map.put("isChange", "是"); + } else if ("1".equals(changeStr)) { + map.put("isChange", "否"); + } + } + + // 转换生产状态 + Object proStatus = map.get("proStatus"); + if (proStatus != null) { + String statusStr = String.valueOf(proStatus); + if ("0".equals(statusStr)) { + map.put("proStatus", "正常"); + } else if ("1".equals(statusStr)) { + map.put("proStatus", "部分转生产"); + } else if ("2".equals(statusStr)) { + map.put("proStatus", "全部转生产"); + } + } + + // 转换发货状态 + Object deliveryStatus = map.get("deliveryStatus"); + if (deliveryStatus != null) { + String statusStr = String.valueOf(deliveryStatus); + if ("0".equals(statusStr) || "".equals(statusStr)) { + map.put("deliveryStatus", "未发货"); + } else if ("1".equals(statusStr)) { + map.put("deliveryStatus", "部分发货"); + } else if ("2".equals(statusStr)) { + map.put("deliveryStatus", "全部发货"); + } + } + } + + + } diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/OrderDetailServiceImpl.java b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/OrderDetailServiceImpl.java index a47e30c..2a38a7b 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/OrderDetailServiceImpl.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-biz/src/main/java/jnpf/service/impl/OrderDetailServiceImpl.java @@ -27,7 +27,7 @@ public class OrderDetailServiceImpl extends ServiceImpl getListByOrderId(String saleOrdId) { + public List getListByOrderId(Long saleOrdId) { QueryWrapper query = new QueryWrapper<>(); query.lambda().eq(OrderDetailEntity::getSaleOrdId, saleOrdId); query.lambda().orderByDesc(OrderDetailEntity::getCreatorTime); diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-controller/src/main/java/jnpf/controller/ExampleOrderController.java b/jnpf-java-boot/jnpf-example/jnpf-example-controller/src/main/java/jnpf/controller/ExampleOrderController.java index 2ff36fd..0e5f845 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-controller/src/main/java/jnpf/controller/ExampleOrderController.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-controller/src/main/java/jnpf/controller/ExampleOrderController.java @@ -1,42 +1,59 @@ package jnpf.controller; +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.hutool.core.util.ObjectUtil; +import cn.xuyanwu.spring.file.storage.FileInfo; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; 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.base.entity.DictionaryDataEntity; +import jnpf.base.model.ColumnDataModel; import jnpf.base.service.DictionaryDataService; +import jnpf.base.util.VisualUtils; +import jnpf.base.vo.DownloadVO; import jnpf.base.vo.PageListVO; import jnpf.base.vo.PaginationVO; +import jnpf.config.ConfigValueUtil; import jnpf.entity.ExampleOrderEntity; import jnpf.entity.OrderDetailEntity; -import jnpf.model.order.OrderForm; -import jnpf.model.order.OrderPagination; +import jnpf.model.order.ExampleOrderForm; +import jnpf.model.order.ExampleOrderPagination; +import jnpf.model.visualJson.config.HeaderModel; import jnpf.permission.entity.UserEntity; import jnpf.permission.service.UserService; import jnpf.service.ExampleOrderService; import jnpf.service.OrderDetailService; -import jnpf.util.JsonUtil; -import jnpf.util.StringUtil; +import jnpf.util.*; +import lombok.Cleanup; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.validation.Valid; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; +import java.io.IOException; +import java.util.*; /** * 业务订单 控制类 * */ +@Slf4j @Tag(name = "业务订单", description = "exampleOrder") @RestController @RequestMapping("/api/example/exampleOrder") @@ -49,15 +66,24 @@ public class ExampleOrderController { @Resource private OrderDetailService orderDetailService; + + @Resource + private ConfigValueUtil configValueUtil; + + @Resource + private UserProvider userProvider; + @Resource + private DictionaryDataService dictionaryDataService; + /** * 列表 - * @param orderPagination 分页查询对象 + * @param exampleOrderPagination 分页查询对象 * @return 列表结果集 */ @Operation(summary = "获取订单列表") @PostMapping("/getList") - public ActionResult getList(@RequestBody OrderPagination orderPagination) { - List list= orderService.getList(orderPagination); + public ActionResult getList(@RequestBody ExampleOrderPagination exampleOrderPagination) { + List list= orderService.getList(exampleOrderPagination); List> realList =new ArrayList<>(); for (ExampleOrderEntity entity : list) { Map ExampleOrderMap=JsonUtil.entityToMap(entity); @@ -70,16 +96,39 @@ public class ExampleOrderController { ExampleOrderMap.put("saleManName", byId.getRealName()); } } + + + realList.add(ExampleOrderMap); } //返回对象 PageListVO vo = new PageListVO(); vo.setList(realList); - PaginationVO page = JsonUtil.getJsonToBean(orderPagination, PaginationVO.class); + PaginationVO page = JsonUtil.getJsonToBean(exampleOrderPagination, PaginationVO.class); vo.setPagination(page); return ActionResult.success(vo); } - + /** + * 创建 + * + * @param orderForm + * @return + */ + @PostMapping() + @Operation(summary = "创建") + public ActionResult create(@RequestBody @Valid ExampleOrderForm orderForm) { + String b = orderService.checkForm(orderForm,0); + if (StringUtil.isNotEmpty(b)){ + return ActionResult.fail(b ); + } + try{ + orderService.saveOrUpdate(orderForm, null ,true); + }catch(Exception e){ + e.printStackTrace(); + return ActionResult.fail("新增数据失败"); + } + return ActionResult.success("创建成功"); + } /** * 编辑 * @param id @@ -88,7 +137,7 @@ public class ExampleOrderController { */ @PutMapping("/{id}") @Operation(summary = "更新") - public ActionResult update(@PathVariable("id") String id,@RequestBody @Valid OrderForm orderForm, + public ActionResult update(@PathVariable("id") String id,@RequestBody @Valid ExampleOrderForm orderForm, @RequestParam(value = "isImport", required = false) boolean isImport){ orderForm.setId(id); if (!isImport) { @@ -102,6 +151,7 @@ public class ExampleOrderController { try{ orderService.saveOrUpdate(orderForm,id,false); }catch(Exception e){ + e.printStackTrace(); return ActionResult.fail("修改数据失败"); } return ActionResult.success("更新成功"); @@ -114,17 +164,17 @@ public class ExampleOrderController { * @param id * @return */ - @Operation(summary = "删除") + @Operation(summary = "作废") @DeleteMapping("/{id}") @Transactional public ActionResult delete(@PathVariable("id") String id){ ExampleOrderEntity entity = orderService.getInfo(id); if (entity != null) { //假删除 - entity.setDeleteMark(1); + entity.setOrdStatus("9"); orderService.update(id, entity); } - return ActionResult.success("删除成功"); + return ActionResult.success("作废成功"); } /** @@ -143,7 +193,19 @@ public class ExampleOrderController { Map ExampleOrderMap=JsonUtil.entityToMap(entity); ExampleOrderMap.put("id", ExampleOrderMap.get("id")); List orderDetailList = orderDetailService.getListByOrderId(entity.getId()); + for (OrderDetailEntity orderDetailEntity : orderDetailList) { + orderDetailEntity.setUnitName("1".equals(orderDetailEntity.getUnit())?"kg":"T"); + } ExampleOrderMap.put("orderDetailList",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(orderDetailList))); + ExampleOrderMap.put("saleMan",String.valueOf(entity.getSaleMan())); + ExampleOrderMap.put("saleDeptId",String.valueOf(entity.getSaleDeptId())); + ExampleOrderMap.put("custId",Integer.valueOf(entity.getCustId())); + if (entity.getAttFile() != null && !entity.getAttFile().isEmpty()) { + List> attFile = orderService.convertAttFileToAttachment(entity.getAttFile()); + ExampleOrderMap.put("attFile", attFile); + } + + //副表数据 //子表数据 @@ -165,10 +227,174 @@ public class ExampleOrderController { Map ExampleOrderMap=JsonUtil.entityToMap(entity); ExampleOrderMap.put("id", ExampleOrderMap.get("id")); List orderDetailList = orderDetailService.getListByOrderId(entity.getId()); + for (OrderDetailEntity orderDetailEntity : orderDetailList) { + orderDetailEntity.setUnitName("1".equals(orderDetailEntity.getUnit())?"kg":"T"); + } ExampleOrderMap.put("orderDetailList",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(orderDetailList))); + ExampleOrderMap.put("saleMan",String.valueOf(entity.getSaleMan())); + ExampleOrderMap.put("saleDeptId",String.valueOf(entity.getSaleDeptId())); + ExampleOrderMap.put("custId",Integer.valueOf(entity.getCustId())); + + if (entity.getAttFile() != null && !entity.getAttFile().isEmpty()) { + List> attFile = orderService.convertAttFileToAttachment(entity.getAttFile()); + ExampleOrderMap.put("attFile", attFile); + } //副表数据 //子表数据 return ActionResult.success(ExampleOrderMap); } + /** + * 获取详情(编辑页) + * 编辑页面使用-不转换数据 + * @param id + * @return + */ + @Operation(summary = "信息") + @GetMapping("/getByDeptId/{id}") + public ActionResult getByDeptId(@PathVariable("id") String id){ + List userEntities=orderService.getByDeptId( id); + //子表数据 + return ActionResult.success(userEntities); + } + + /** + * 导出Excel + * + * @return + */ + @Operation(summary = "导出Excel") + @PostMapping("/Actions/Export") + public ActionResult Export(@RequestBody ExampleOrderPagination exampleOrderPagination) throws IOException { + if (StringUtil.isEmpty(exampleOrderPagination.getSelectKey())){ + return ActionResult.fail("请选择导出字段"); + } + List dictionaryDataEntities= dictionaryDataService.getList("811520443046428805", false); + + List list= orderService.getList(exampleOrderPagination); + List> realList=new ArrayList<>(); + for (ExampleOrderEntity entity : list) { + Map exampleOrderMap=JsonUtil.entityToMap(entity); + exampleOrderMap.put("id", exampleOrderMap.get("id")); + + orderService.convertFields(exampleOrderMap,dictionaryDataEntities); + //子表数据 + realList.add(exampleOrderMap); + } + //数据转换 + String[]keys=!StringUtil.isEmpty(exampleOrderPagination.getSelectKey())?exampleOrderPagination.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){ + for(String key:keys){ + switch(key){ + case "saleOrdNo" : + entitys.add(new ExcelExportEntity("订单编码" ,"saleOrdNo")); + break; + case "ordDate" : + entitys.add(new ExcelExportEntity("下单日期" ,"ordDate")); + break; + case "custName" : + entitys.add(new ExcelExportEntity("客户名称" ,"custName")); + break; + case "ordType" : + entitys.add(new ExcelExportEntity("订单类型" ,"ordType")); + break; + case "reqDeliveryDate" : + entitys.add(new ExcelExportEntity("要求交货日期" ,"reqDeliveryDate")); + break; + case "isUrgent" : + entitys.add(new ExcelExportEntity("是否急单" ,"isUrgent")); + break; + case "contractNo" : + entitys.add(new ExcelExportEntity("合同编号" ,"contractNo")); + break; + case "saleManName" : + entitys.add(new ExcelExportEntity("业务人员" ,"saleManName")); + break; + case "isChange" : + entitys.add(new ExcelExportEntity("是否变更" ,"isChange")); + break; + case "proStatus" : + entitys.add(new ExcelExportEntity("生产状态" ,"proStatus")); + break; + case "qualityReq" : + entitys.add(new ExcelExportEntity("质量要求" ,"qualityReq")); + break; + case "packReq" : + entitys.add(new ExcelExportEntity("包装要求" ,"packReq")); + break; + case "ordStatus" : + entitys.add(new ExcelExportEntity("订单状态" ,"ordStatus")); + break; + case "deliveryStatus" : + entitys.add(new ExcelExportEntity("发货状态" ,"deliveryStatus")); + break; + default: + break; + } + } + } + + 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); + } + } + + workbook = ExcelExportUtil.exportExcel(exportParams, entitys, dataList); + } + String fileName = "销售订单信息_" + DateUtil.dateNow("yyyyMMddHHmmss") + ".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; + } } diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-controller/src/main/java/jnpf/controller/OrderDetailController.java b/jnpf-java-boot/jnpf-example/jnpf-example-controller/src/main/java/jnpf/controller/OrderDetailController.java index 201e2ab..ba7498a 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-controller/src/main/java/jnpf/controller/OrderDetailController.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-controller/src/main/java/jnpf/controller/OrderDetailController.java @@ -1,6 +1,7 @@ package jnpf.controller; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.hutool.core.util.ObjectUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameters; @@ -31,7 +32,7 @@ import java.util.List; */ @Tag(name = "业务订单明细", description = "example") @RestController -@RequestMapping("/api/example/OrderDetail") +@RequestMapping("/api/example/orderDetail") public class OrderDetailController { @Autowired @@ -60,7 +61,7 @@ public class OrderDetailController { @Operation(summary = "根据订单ID获取明细列表") @Parameter(name = "saleOrdId", description = "销售订单ID", required = true) @GetMapping("/byOrder/{saleOrdId}") - public ActionResult> getListByOrderId(@PathVariable String saleOrdId) { + public ActionResult> getListByOrderId(@PathVariable Long saleOrdId) { List entityList = orderDetailService.getListByOrderId(saleOrdId); List voList = JsonUtil.getJsonToList(entityList, OrderDetailVO.class); return ActionResult.success(new ListVO<>(voList)); @@ -124,19 +125,18 @@ public class OrderDetailController { * @return */ @Operation(summary = "删除订单明细") - @SaCheckPermission("example.orderDetail") - @Parameters({ - @Parameter(name = "id", description = "主键", required = true) - }) - @DeleteMapping("/{id}") - public ActionResult delete(@PathVariable Integer id) { + @DeleteMapping("/delete/{id}") + public ActionResult delete(@PathVariable("id")Integer id) { + OrderDetailEntity byId = orderDetailService.getById(id); // 对象存在判断 - if (orderDetailService.getById(id) != null) { + if (ObjectUtil.isNotEmpty(byId )) { + if (!"1".equals(byId.getOrdItemStatus())) return ActionResult.fail("该产品已转生产订单不允许删除,请确认!"); orderDetailService.removeById(id); - return ActionResult.success(MsgCode.SU003.get()); - } else { - return ActionResult.fail(MsgCode.FA003.get()); + return ActionResult.success("删除成功"); } + return ActionResult.success("该产品数据不存在,请刷新界面!"); } + + } diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/entity/ExampleOrderEntity.java b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/entity/ExampleOrderEntity.java index ace0934..4032d8d 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/entity/ExampleOrderEntity.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/entity/ExampleOrderEntity.java @@ -14,7 +14,7 @@ import java.util.Date; @TableName("tso_order") public class ExampleOrderEntity { @TableId(value = "id", type = IdType.AUTO) - private String id; + private Long id; @TableField(value = "f_creator_user_id", fill = FieldFill.INSERT) private String creatorUserId; @TableField(value = "f_creator_time", fill = FieldFill.INSERT) @@ -41,8 +41,8 @@ public class ExampleOrderEntity { private String custId; @TableField("cust_name") private String custName; - @TableField("project_name") - private String projectName; +// @TableField("project_name") +// private String projectName; @TableField("contact") private String contact; @TableField("con_phone") @@ -79,7 +79,11 @@ public class ExampleOrderEntity { private String auditId; @TableField("audit_time") private Date auditTime; - @TableField(value = "att_file", updateStrategy = FieldStrategy.IGNORED) + @TableField("att_file") private String attFile; + @TableField("pro_status") + private String proStatus; + @TableField("delivery_status") + private String deliveryStatus; } diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/entity/OrderDetailEntity.java b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/entity/OrderDetailEntity.java index f1ba0f3..01e54f3 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/entity/OrderDetailEntity.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/entity/OrderDetailEntity.java @@ -15,10 +15,10 @@ import java.util.Date; * @日期: 2024-02-04 */ @Data -@TableName("tso_order_detail") +@TableName("tso_order_item") public class OrderDetailEntity { @TableId(value = "id", type = IdType.AUTO) - private String id; + private Long id; @TableField(value = "f_creator_user_id", fill = FieldFill.INSERT) private String creatorUserId; @TableField(value = "f_creator_time", fill = FieldFill.INSERT) @@ -38,7 +38,7 @@ public class OrderDetailEntity { @TableField(value = "f_flow_task_id") private String flowTaskId; @TableField(value = "sale_ord_id", updateStrategy = FieldStrategy.IGNORED) - private String saleOrdId; + private Long saleOrdId; @TableField(value = "material_id", updateStrategy = FieldStrategy.IGNORED) private Integer materialId; @TableField("material_code") @@ -55,9 +55,14 @@ public class OrderDetailEntity { private BigDecimal priceTax; @TableField("material_use") private String materialUse; - @TableField("delivered_qty") - private BigDecimal deliveredQty; + @TableField("deliveried_qty") + private BigDecimal deliveriedQty; @TableField(value = "remark", updateStrategy = FieldStrategy.IGNORED) private String remark; - + @TableField("produce_qty") + private BigDecimal produceQty; + @TableField("ord_item_status") + private String ordItemStatus; + @TableField(exist = false) + private String unitName; } diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/order/OrderForm.java b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/order/ExampleOrderForm.java similarity index 94% rename from jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/order/OrderForm.java rename to jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/order/ExampleOrderForm.java index 912f4d7..5603d9b 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/order/OrderForm.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/order/ExampleOrderForm.java @@ -5,7 +5,6 @@ import io.swagger.v3.oas.annotations.media.Schema; import jnpf.entity.OrderDetailEntity; import lombok.Data; -import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -19,7 +18,7 @@ import java.util.List; * @日期: 2024-02-04 */ @Data -public class OrderForm { +public class ExampleOrderForm { @Schema(description = "主键") private String id; @@ -94,7 +93,7 @@ public class OrderForm { private Date auditTime; @Schema(description = "附件信息") - private String attFile; + private Object attFile; @Schema(description = "创建时间") private Date creatorTime; @@ -125,4 +124,10 @@ public class OrderForm { @JsonProperty("orderDetailList") private List orderDetailList; + + + @Schema(description = "发货状态") + @JsonProperty("deliveryStatus") + private String deliveryStatus; + } diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/order/OrderPagination.java b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/order/ExampleOrderPagination.java similarity index 89% rename from jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/order/OrderPagination.java rename to jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/order/ExampleOrderPagination.java index e16c421..3a605c3 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/order/OrderPagination.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/order/ExampleOrderPagination.java @@ -4,8 +4,6 @@ import jnpf.base.Pagination; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import java.util.Date; - /** * 业务订单分页查询 * @@ -15,7 +13,7 @@ import java.util.Date; * @日期: 2024-02-04 */ @Data -public class OrderPagination extends Pagination { +public class ExampleOrderPagination extends Pagination { /** 查询key */ private String[] selectKey; /** json */ @@ -45,4 +43,6 @@ public class OrderPagination extends Pagination { private String saleManName; @Schema(description = "下单日期") private Object ordDate; + @Schema(description = "订单类型") + private String ordType; } diff --git a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/orderdetail/OrderDetailForm.java b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/orderdetail/OrderDetailForm.java index 8d9fa98..2f7d7b4 100644 --- a/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/orderdetail/OrderDetailForm.java +++ b/jnpf-java-boot/jnpf-example/jnpf-example-entity/src/main/java/jnpf/model/orderdetail/OrderDetailForm.java @@ -20,7 +20,7 @@ import java.util.Date; public class OrderDetailForm implements Serializable { @Schema(description = "主键") - private String id; + private Long id; @Schema(description = "销售订单主表ID") private Integer saleOrdId; diff --git a/jnpf-java-boot/jnpf-web/src/components/Jnpf/Upload/vue-simple-uploader/fileUploader.vue b/jnpf-java-boot/jnpf-web/src/components/Jnpf/Upload/vue-simple-uploader/fileUploader.vue index b650f2c..44ae4d9 100644 --- a/jnpf-java-boot/jnpf-web/src/components/Jnpf/Upload/vue-simple-uploader/fileUploader.vue +++ b/jnpf-java-boot/jnpf-web/src/components/Jnpf/Upload/vue-simple-uploader/fileUploader.vue @@ -182,4 +182,4 @@ export default { position: absolute; clip: rect(0, 0, 0, 0); } - \ No newline at end of file + diff --git a/jnpf-java-boot/jnpf-web/src/views/example/order/form.vue b/jnpf-java-boot/jnpf-web/src/views/example/order/form.vue index 25c1029..aba2b67 100644 --- a/jnpf-java-boot/jnpf-web/src/views/example/order/form.vue +++ b/jnpf-java-boot/jnpf-web/src/views/example/order/form.vue @@ -5,12 +5,6 @@ -
- 保 - 存 - - 取 消 -
- - - + + + - - - - - + + + + - - - - - - - - + + + + + + + + + + + + - @@ -91,21 +91,11 @@ - - - - - - @@ -113,34 +103,44 @@ + :disabled="isDetail=='detail'":style='{ "width": "100%" }' format="yyyy-MM-dd" > + + + + + + - - + + - - - + + + - @@ -150,33 +150,34 @@ - + - - - + + + - @@ -185,6 +186,8 @@
产品信息 + 新增 +
@@ -196,50 +199,61 @@ > + +
- + + + + + + + + + + + + + + + + + + + + + + {{ $t('common.search') }} + + {{ $t('common.reset') }} + + + + + + + + + + + + + + + 保存 + 取消 + +
+ @@ -342,6 +431,11 @@ export default { props: [], data() { return { + listLoading: false, + list: [], + selectedData: [], + selectedIds: [], + itemVisible:false, dataFormSubmitType: 0, continueBtnLoading: false, index: 0, @@ -353,57 +447,72 @@ export default { btnLoading: false, formRef: 'formRef', setting: {}, + total: 0, eventType: '', userBoxVisible: false, selectDialogVisible: false, currTableConf: {}, dataValueAll: {}, addTableConf: {}, + materialOptions: [ + { label: '产品编码', value: 'matCode' }, + { label: '产品名称', value: 'matName' }, + { label: '规格型号', value: 'spec' }, + { label: '单位', value: 'unitName' }, + { label: '物料类型', value: 'matType' }, + ], + isDetail:'', //可选范围默认值 ableAll: {}, tableRows: {}, Vmodel: '', currVmodel: '', dataForm: { + id: undefined, + saleOrdNo: undefined, contractNo: undefined, saleDeptId: undefined, custId: undefined, + custName: undefined, + projectName: undefined, + contact: undefined, + conPhone: undefined, reqDeliveryDate: undefined, ordType: undefined, paymentTerms: undefined, totalAmount: undefined, - isChange: undefined, + isChange: "1", packReq: undefined, qualityReq: undefined, taxRate: undefined, saleMan: undefined, attFile:undefined, + isUrgent:"1", version: 0, + deliveryStatus:"1", + ordDate:undefined, + ordStatus: undefined, + remark: undefined, orderDetailList:[] }, + saleDeptIdLabel: '', tableRequiredData: {}, dataRule: { ordDate: [ { required: true, message: '请选择下单日期', trigger: 'change' } ], - ordStatus: [ - { required: true, message: '请选择订单状态', trigger: 'change' } - ], + // ordStatus: [ + // { required: true, message: '请选择订单状态', trigger: 'change' } + // ], saleDeptId: [ { required: true, message: '请选择业务部门', trigger: 'change' } ], saleMan: [ { required: true, message: '请选择业务人员', trigger: 'change' } ], - custId: [ - { required: true, message: '请选择客户名称', trigger: 'change' } - ], isUrgent: [ { required: true, message: '请选择是否急单', trigger: 'change' } ], - projectName: [ - { required: true, message: '请输入项目名称', trigger: 'blur' } - ], reqDeliveryDate: [ { required: true, message: '请选择交货日期', trigger: 'change' } ], @@ -418,16 +527,16 @@ export default { ], ordStatusProps: { label: "fullName", value: "enCode" }, saleDeptIdOptions: [], - saleDeptIdProps: { 'label': 'name', 'value': 'id' }, + saleDeptIdProps: { 'label': 'name', 'value': 'id', 'children': 'children', 'emitPath': false, 'checkStrictly': true }, userIdOptions: [], - userIdProps: { 'label': 'name', 'value': 'id' }, + userIdProps: { 'label': 'realName', 'value': 'id' }, custIdOptions: [], custIdProps: { 'label': 'name', 'value': 'id' }, materialIdOptions: [], materialIdProps: { 'label': 'mat_name', 'labels':"mat_code", 'value': 'id' }, ordTypeOptions: [ - { fullName: "常规", id: "1" }, - { fullName: "定制", id: "2" }, + { fullName: "备库订单", id: "1" }, + { fullName: "销售订单", id: "2" }, ], ordTypeProps: { label: "fullName", value: "id" }, paymentTermsOptions: [ @@ -436,6 +545,12 @@ export default { { fullName: "承兑", id: "3" }, ], paymentTermsProps: { label: "fullName", value: "id" }, + deliveryStatusOptions: [ + { fullName: "未发货", id: "1" }, + { fullName: "部分发货", id: "2" }, + { fullName: "全部发货", id: "3" }, + ], + deliveryStatusProps: { label: "fullName", value: "id" }, isUrgentOptions: [ { fullName: "是", id: "0" }, { fullName: "否", id: "1" }, @@ -446,17 +561,28 @@ export default { ], specProps: { label: "fullName", value: "id" }, unitOptions: [ - { fullName: "kg", id: "kg" } + { fullName: "kg", id: "1" }, + { fullName: "T", id: "2" } ], unitProps: { label: "fullName", value: "id" }, + matTypeOptions: [ + { fullName: "原材料", id: "1" }, + { fullName: "半成品", id: "2" }, + { fullName: "成品", id: "3" }, + ], materialUseOptions: [ - { fullName: "脱硫", id: "1" }, - { fullName: "脱销", id: "2" }, - { fullName: "脱硫脱硝一体", id: "3" }, - { fullName: "净水", id: "4" } + { fullName: "用途1", id: "1" }, + { fullName: "用途2", id: "2" }, + { fullName: "用途3", id: "3" } ], materialUseProps: { label: "fullName", value: "id" }, - + listQuery: { + currentPage: 1, + pageSize: 20, + matCode:undefined, + matName:undefined, + spec:undefined, + }, childIndex: -1, isEdit: false, interfaceRes: { @@ -496,6 +622,69 @@ export default { this.ordStatusOptions = res.data.list; }); }, + selectCancel() { + this.initDefaultDatas() + this.itemVisible = false + }, + add() { + let newArr = this.selectedData.filter(o => { + return this.dataForm.orderDetailList.every(item => { + return o.id !== item.materialId + }) + }) + + newArr.forEach(o => { + + let item = { + materialId: o.id, + materialCode:o.matCode, + materialName:o.matName, + spec: o.spec, + unit: o.unit, + unitName: o.unitName, + } + this.dataForm.orderDetailList.push(item) + }) + this.initDefaultDatas() + this.itemVisible = false + }, + search() { + this.listQuery.currentPage = 1 + this.listQuery.pageSize = this.pageSize + this.initData() + }, + initData() { + this.listLoading = true + let _query = { + ...this.listQuery, + matType:"3", + enabledStatus:1, + } + request({ + url: `/api/example/material/getList`, + method: 'post', + data: _query, + }).then(res => { + this.list = res.data.list.map(item => ({ + ...item, + unitName: this.getEnumLabel(this.unitOptions, item.unit), + matType: this.getEnumLabel(this.matTypeOptions, item.matType) + })) + + this.total = this.list.length + this.listLoading = false + }) + .catch(() => { + this.listLoading = false + }) + + }, + + getEnumLabel(options, value) { + if (value === undefined || value === null || value === '') return value; + const item = options.find(opt => opt.id == value); + return item ? item.fullName : value; + }, handleNumberInput(fieldName) { let value = this.dataForm[fieldName]; if (value === undefined || value === null || value === '') { @@ -504,21 +693,19 @@ export default { // 移除非数字字符(保留小数点) value = value.toString().replace(/[^\d.]/g, ''); // 只允许一个小数点 - const dotIndex = value.indexOf('.'); - if (dotIndex > -1) { - const dotLastIndex = value.lastIndexOf('.'); - if (dotIndex !== dotLastIndex) { - value = value.substring(0, dotLastIndex) + value.substring(dotLastIndex + 1); - } + const parts = value.split('.'); + if (parts.length > 2) { + value = parts[0] + '.' + parts.slice(1).join(''); } // 限制小数点后两位 if (value.includes('.')) { - const parts = value.split('.'); - if (parts[1] && parts[1].length > 2) { - value = parts[0] + '.' + parts[1].substring(0, 2); + const newParts = value.split('.'); + if (newParts[1] && newParts[1].length > 2) { + value = newParts[0] + '.' + newParts[1].substring(0, 2); } } this.dataForm[fieldName] = value; + this.$forceUpdate(); }, handleTableNumberInput(scope, fieldName) { let value = scope.row[fieldName]; @@ -532,28 +719,59 @@ export default { value = value.replace(/^0+/, ''); if (value === '') value = '0'; } - scope.row[fieldName] = value; + this.$set(scope.row, fieldName, value); }, delOrderDetailListList(index) { + const row = this.dataForm.orderDetailList[index] this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', { type: 'warning' }).then(() => { - this.dataForm.orderDetailList.splice(index, 1); + if (row.id) { + request({ + url: `/api/example/orderDetail/delete/${row.id}`, + method: 'DELETE', + }).then(res => { + if (res.msg=='删除成功'){ + this.$message({ + type: 'success', + message: res.msg + }) + this.dataForm.orderDetailList.splice(index, 1) + }else { + this.$message({ + type: 'error', + message: res.msg + }) + } + }).catch(() => {}) + } else { + this.dataForm.orderDetailList.splice(index, 1) + } }).catch(() => { }); }, + rowClickMultiple(row) { + const boo = this.selectedIds.includes(row.id) + if (boo) { + this.selectedData = this.selectedData.filter(o => o.id !== row.id) + this.selectedIds = this.selectedIds.filter(o => o !== row.id) + } else { + + this.selectedData.push(row) + this.selectedIds.push(row.id) + } + }, addOrderDetailListList() { - const newItem = { - materialId: undefined, - spec: undefined, - unit: undefined, - ordQty: undefined, - priceTax: undefined, - materialUse: undefined, - deliveriedQty: undefined, - remark: undefined - }; - this.dataForm.orderDetailList.push(newItem); + this.listQuery.currentPage=1, + this.listQuery.pageSize=20, + this.listQuery.matCode='', + this.listQuery.matName='', + this.listQuery.spec='' , + this.dataForm.orderDetailList.forEach(o => { + this.selectedIds.push(o.materialId) + }) + this.itemVisible = true + this.initData() }, prev() { this.index @@ -590,7 +808,7 @@ export default { }) }, goBack() { - this.$emit('refresh') + this.$emit('refresh', true) }, changeData(model, index) { this.isEdit = false @@ -619,22 +837,69 @@ export default { dataAll() { this.getOrdStatusOptions() this.getSaleDeptIdOptions() - this.getUserIdOptions() + // this.getUserIdOptions() this.getCustIdOptions() this.getMaterialIdOptions() }, getSaleDeptIdOptions() { - getDataInterfaceRes('811583643129479301').then(res => { + return getDataInterfaceRes('811583643129479301').then(res => { let data = res.data - this.saleDeptIdOptions = data + this.saleDeptIdOptions = this.buildTree(data) + return this.saleDeptIdOptions }) }, - getUserIdOptions() { - getDataInterfaceRes('811594014137516101').then(res => { - let data = res.data - this.userIdOptions = data + buildTree(list) { + if (!list || !list.length) return [] + const tree = [] + const map = {} + list.forEach(item => { + map[item.id] = { ...item, children: [] } + }) + list.forEach(item => { + if (item.parentId && map[item.parentId]) { + map[item.parentId].children.push(map[item.id]) + } else { + tree.push(map[item.id]) + } + }) + return tree + }, + handleDeptSelect(data) { + this.dataForm.saleDeptId = data.id + this.saleDeptIdLabel = data.name + if (this.$refs.saleDeptSelect) { + this.$refs.saleDeptSelect.visible = false + } + this.getUserList() + }, + getUserList(){ + request({ + url: '/api/example/exampleOrder/getByDeptId/' + this.dataForm.saleDeptId, + method: 'get' + }).then(res => { + this.userIdOptions=res.data; }) }, + + findDeptNameById(id, list) { + if (!id || !list || !list.length) return '' + for (let item of list) { + if (item.id === id) { + return item.name + } + if (item.children && item.children.length) { + const found = this.findDeptNameById(id, item.children) + if (found) return found + } + } + return '' + }, + // getUserIdOptions() { + // getDataInterfaceRes('811594014137516101').then(res => { + // let data = res.data + // this.userIdOptions = data + // }) + // }, getCustIdOptions() { getDataInterfaceRes('811594631945912389').then(res => { let data = res.data @@ -648,12 +913,23 @@ export default { }) }, + handleCustChange(value) { + if (value) { + const customer = this.custIdOptions.find(item => item.id === value) + if (customer) { + this.dataForm.custName = customer.name + } + } else { + this.dataForm.custName = undefined + } + }, clearData() { this.dataForm = JSON.parse(JSON.stringify(this.dataValueAll)) }, init(id, isDetail, allList) { this.prevDis = false this.nextDis = false + this.isDetail = isDetail this.allList = allList || [] if (allList.length) { this.index = this.allList.findIndex(item => item.id === id) @@ -669,14 +945,16 @@ export default { } this.dataForm.id = id || 0 this.visible = true + this.$nextTick(() => { if (this.dataForm.id) { this.loading = true request({ - url: '/api/scm/InventoryLog/' + this.dataForm.id, + url: '/api/example/exampleOrder/' + this.dataForm.id, method: 'get' }).then(res => { this.dataInfo(res.data) + this.getUserList() this.loading = false }) } else { @@ -688,7 +966,18 @@ export default { }, //初始化默认数据 initDefaultData() { - + if (!this.dataForm.ordDate) { + const today = new Date() + today.setHours(0, 0, 0, 0) + this.dataForm.ordDate = today.getTime() + } + }, + initDefaultDatas() { + this.selectedIds = [] + this.selectedData = [] + this.listQuery.matCode = '' + this.listQuery.matName = '' + this.listQuery.spec = '' }, // 表单提交 dataFormSubmit(type) { @@ -700,7 +989,52 @@ export default { }) }, request() { - let _data = this.dataList() + if (!this.dataForm.orderDetailList || this.dataForm.orderDetailList.length === 0){ + this.$message({ + type: 'error', + message: "订单产品信息不能为空,请确认!" + }) + return + } + if (this.dataForm.ordType == '2' && !this.dataForm.custId){ + this.$message({ + type: 'error', + message: "订单类型是销售订单必须选择客户名称,请确认!" + }) + return + } + // 校验订单详情必填字段 + for (let i = 0; i < this.dataForm.orderDetailList.length; i++) { + const row = this.dataForm.orderDetailList[i] + const rowNumber = i + 1 + if (!row.ordQty || row.ordQty === '') { + this.$message({ + type: 'error', + message: `第${rowNumber}行的订单数量不能为空!` + }) + return + } + if (!row.priceTax || row.priceTax === '') { + this.$message({ + type: 'error', + message: `第${rowNumber}行的含税单价不能为空!` + }) + return + } + if (!row.materialUse || row.materialUse === '') { + this.$message({ + type: 'error', + message: `第${rowNumber}行的用途不能为空!` + }) + return + } + } + let _data = this.dataForm + if (this.dataFormSubmitType == 0) { + _data.ordStatus=1 + }else { + _data.ordStatus=2 + } if (this.dataFormSubmitType == 2) { this.continueBtnLoading = true } else { @@ -708,7 +1042,7 @@ export default { } if (!this.dataForm.id) { request({ - url: '/api/scm/InventoryLog', + url: '/api/example/exampleOrder', method: 'post', data: _data }).then((res) => { @@ -736,7 +1070,7 @@ export default { }) } else { request({ - url: '/api/scm/InventoryLog/' + this.dataForm.id, + url: '/api/example/exampleOrder/' + this.dataForm.id, method: 'PUT', data: _data }).then((res) => { @@ -844,10 +1178,32 @@ export default { let _dataAll = dataAll this.dataForm = _dataAll this.isEdit = true - this.dataAll() + const deptPromise = this.getSaleDeptIdOptions() + this.getOrdStatusOptions() + this.getCustIdOptions() + this.getMaterialIdOptions() + + deptPromise.then(() => { + this.$nextTick(() => { + this.saleDeptIdLabel = this.findDeptNameById(this.dataForm.saleDeptId, this.saleDeptIdOptions) + }) + }) this.childIndex = -1 } } } + + + diff --git a/jnpf-java-boot/jnpf-web/src/views/example/order/index.vue b/jnpf-java-boot/jnpf-web/src/views/example/order/index.vue index d962a68..029a96e 100644 --- a/jnpf-java-boot/jnpf-web/src/views/example/order/index.vue +++ b/jnpf-java-boot/jnpf-web/src/views/example/order/index.vue @@ -15,18 +15,14 @@ - - - - - - - + + + - - - + + + + @@ -50,57 +48,63 @@
- 新建 + 新建 导出 + >导出
- - - - - + :span-method="arraySpanMethod" @selection-change="handleSelectionChange" :hasNOFixed="true" border> + + + + + - - + + - + + + + + - + + + + + + + @@ -114,7 +118,6 @@ -
@@ -139,7 +142,7 @@ import jnpf from "@/utils/jnpf"; export default { - name: "zpzj_new", + name: "order", components: { JNPFForm, Detail, @@ -160,7 +163,11 @@ export default { mergeList: [], exportList: [], columnList, - + ordTypeOptions: [ + { fullName: "备库订单", id: "1" }, + { fullName: "销售订单", id: "2" }, + ], + ordTypeProps: { label: "fullName", value: "id" }, superQueryVisible: false, superQueryJson, uploadBoxVisible: false, @@ -260,17 +267,12 @@ export default { - handleSelectionChange() { }, - - - treeRefresh() { - this.keyword = ""; - this.treeActiveId = ""; - this.leftTreeActiveInfo = {}; - this.$refs.treeBox.setCurrentKey(null); - this.getTreeView(); + handleSelectionChange(val) { + this.multipleSelection = val; }, + + toDetail(defaultValue, modelId) { if (!defaultValue) return; getConfigData(modelId).then((res) => { @@ -464,12 +466,12 @@ export default { }); }, handleDel(id) { - this.$confirm("此操作将永久删除该数据, 是否继续?", "提示", { + this.$confirm("此操作将作废该数据, 是否继续?", "提示", { type: "warning", }) .then(() => { request({ - url: `/api/example/QaProMaterialCheck/${id}`, + url: `/api/example/exampleOrder/${id}`, method: "DELETE", }).then((res) => { this.$message({ @@ -483,28 +485,7 @@ export default { }) .catch(() => { }); }, - handelUpload() { - this.uploadBoxVisible = true; - this.$nextTick(() => { - this.$refs.UploadBox.init( - "", - "example/QaFinalCheckData", - 0, - this.flowList - ); - }); - }, - openSuperQuery() { - this.superQueryVisible = true; - this.$nextTick(() => { - this.$refs.SuperQuery.init(); - }); - }, - superQuery(queryJson) { - this.listQuery.superQueryJson = queryJson; - this.listQuery.currentPage = 1; - this.initData(); - }, + addOrUpdateHandle(row, isDetail) { let id = row ? row.id : ""; this.formVisible = true; @@ -520,16 +501,23 @@ export default { ); }); }, + exportData() { let temp = [ - { label: "产品名称", prop: "productName" }, - { label: "产品货号", prop: "productNumber" }, - { label: "生产批号", prop: "productLot" }, - { label: "检验人员", prop: "checkUserName" }, - { label: "检验日期", prop: "checkDate" }, - { label: "抽检数量(件)", prop: "sampleQty" }, - { label: "检验结果", prop: "checkResult" }, - { label: "备注", prop: "remark" }, + { label: "订单编码", prop: "saleOrdNo" }, + { label: "下单日期", prop: "ordDate" }, + { label: "客户名称", prop: "custName" }, + { label: "订单类型", prop: "ordType" }, + { label: "要求交货日期", prop: "reqDeliveryDate" }, + { label: "是否急单", prop: "isUrgent" }, + { label: "合同编号", prop: "contractNo" }, + { label: "业务人员", prop: "saleManName" }, + { label: "是否变更", prop: "isChange" }, + { label: "生产状态", prop: "proStatus" }, + { label: "质量要求", prop: "qualityReq" }, + { label: "包装要求", prop: "packReq" }, + { label: "订单状态", prop: "ordStatus" }, + { label: "发货状态", prop: "deliveryStatus" }, ]; this.exportBoxVisible = true; this.$nextTick(() => { @@ -544,7 +532,7 @@ export default { menuId: this.menuId, }; request({ - url: `/api/example/QaFinalCheckData/Actions/Export`, + url: `/api/example/exampleOrder/Actions/Export`, method: "post", data: query, }).then((res) => { @@ -568,73 +556,9 @@ export default { this.query = JSON.parse(JSON.stringify(this.queryData)); this.search(); }, - colseFlow(isrRefresh) { - this.flowVisible = false; - if (isrRefresh) this.reset(); - }, - //以下排序相关方法 - handleHeaderClass({ column }) { - column.order = column.multiOrder; - }, - handleTableSort({ column }) { - if (column.sortable !== "custom") return; - column.multiOrder = - column.multiOrder === "descending" - ? "ascending" - : column.multiOrder - ? "" - : "descending"; - this.handleOrderChange(column.property, column.multiOrder); - }, - handleOrderChange(orderColumn, orderState) { - let index = this.ordersList.findIndex((e) => e.field === orderColumn); - let sort = - orderState === "ascending" - ? "asc" - : orderState === "descending" - ? "desc" - : ""; - if (index > -1) { - this.ordersList[index].sort = orderState; - } else { - this.ordersList.push({ field: orderColumn, sort }); - } - this.ordersList = this.ordersList.filter((e) => e.sort); - this.ordersList.length - ? this.setDefaultQuery(this.ordersList) - : this.setDefaultQuery(this.defaultSortConfig); - this.initData(); - }, - handleJY(row) { - this.$set(this, 'currentRow', row || {}) - this.currentRow && this.$refs.jyxm.open(row); - }, - handleSH(row) { - this.$set(this, 'currentRow', row || {}) - this.currentRow && this.$refs.sh.open(row); - }, - handleDelete(row) { - this.handleDel(row.id); - }, - handleOrderChange(row) { - if (!row || !row.id) { - this.$message.warning('请选择订单') - return - } - this.$message.info('订单变更功能开发中') - }, - handleDetail(row) { - if (!row || !row.id) { - this.$message.warning('请选择订单') - return - } - this.detailVisible = true - this.$nextTick(() => { - this.$refs.Detail.init(row.id) - }) - } + }, }; diff --git a/jnpf-java-boot/jnpf-web/src/views/example/shiftResult/index.vue b/jnpf-java-boot/jnpf-web/src/views/example/shiftResult/index.vue index 3546c12..56e195c 100644 --- a/jnpf-java-boot/jnpf-web/src/views/example/shiftResult/index.vue +++ b/jnpf-java-boot/jnpf-web/src/views/example/shiftResult/index.vue @@ -47,7 +47,6 @@ - - +