yuansh 1 mēnesi atpakaļ
vecāks
revīzija
5ec2245519
39 mainītis faili ar 2449 papildinājumiem un 73 dzēšanām
  1. 385 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/controller/AfterSchedulingController.java
  2. 382 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/controller/AfterServiceLogsController.java
  3. 127 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/entity/AfterScheduling.java
  4. 87 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/entity/AfterSchedulingShip.java
  5. 126 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/entity/AfterServiceLogs.java
  6. 281 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/entity/AfterServiceLogsDetails.java
  7. 17 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/mapper/AfterSchedulingMapper.java
  8. 31 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/mapper/AfterSchedulingShipMapper.java
  9. 31 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/mapper/AfterServiceLogsDetailsMapper.java
  10. 17 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/mapper/AfterServiceLogsMapper.java
  11. 5 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/mapper/xml/AfterSchedulingMapper.xml
  12. 16 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/mapper/xml/AfterSchedulingShipMapper.xml
  13. 16 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/mapper/xml/AfterServiceLogsDetailsMapper.xml
  14. 5 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/mapper/xml/AfterServiceLogsMapper.xml
  15. 48 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/service/IAfterSchedulingService.java
  16. 22 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/service/IAfterSchedulingShipService.java
  17. 22 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/service/IAfterServiceLogsDetailsService.java
  18. 48 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/service/IAfterServiceLogsService.java
  19. 77 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/service/impl/AfterSchedulingServiceImpl.java
  20. 27 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/service/impl/AfterSchedulingShipServiceImpl.java
  21. 27 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/service/impl/AfterServiceLogsDetailsServiceImpl.java
  22. 77 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/service/impl/AfterServiceLogsServiceImpl.java
  23. 124 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/vo/AfterSchedulingPage.java
  24. 125 0
      srm-module-code/src/main/java/org/jeecg/modules/afterCode/vo/AfterServiceLogsPage.java
  25. 4 3
      srm-module-code/src/main/java/org/jeecg/modules/purCode/controller/PurOrderController.java
  26. 175 2
      srm-module-code/src/main/java/org/jeecg/modules/purCode/controller/PurPaymentController.java
  27. 2 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurAdvanceCommission.java
  28. 3 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurAdvancePayment.java
  29. 4 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurCommissionRequest.java
  30. 3 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurPaymentRequest.java
  31. 13 9
      srm-module-code/src/main/java/org/jeecg/modules/purCode/service/impl/PurPaymentRequestServiceImpl.java
  32. 3 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurAdvancePaymentPage.java
  33. 3 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurCommissionRequestPage.java
  34. 3 0
      srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurPaymentRequestPage.java
  35. 4 4
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/controller/SaleDeliveryController.java
  36. 35 6
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/controller/SaleInvoiceController.java
  37. 17 3
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/controller/SaleOrderController.java
  38. 2 2
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/controller/SaleQuotationController.java
  39. 55 44
      srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleInvoicePage.java

+ 385 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/controller/AfterSchedulingController.java

@@ -0,0 +1,385 @@
+package org.jeecg.modules.afterCode.controller;
+
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.HashMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.vo.LoginUser;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.query.QueryRuleEnum;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.afterCode.entity.AfterSchedulingShip;
+import org.jeecg.modules.afterCode.entity.AfterScheduling;
+import org.jeecg.modules.afterCode.vo.AfterSchedulingPage;
+import org.jeecg.modules.afterCode.service.IAfterSchedulingService;
+import org.jeecg.modules.afterCode.service.IAfterSchedulingShipService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+
+ /**
+ * @Description: 运维排班(service scheduling)
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+@Api(tags="运维排班(service scheduling)")
+@RestController
+@RequestMapping("/afterCode/afterScheduling")
+@Slf4j
+public class AfterSchedulingController {
+	@Autowired
+	private IAfterSchedulingService afterSchedulingService;
+	@Autowired
+	private IAfterSchedulingShipService afterSchedulingShipService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param afterScheduling
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "运维排班(service scheduling)-分页列表查询")
+	@ApiOperation(value="运维排班(service scheduling)-分页列表查询", notes="运维排班(service scheduling)-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<AfterScheduling>> queryPageList(AfterScheduling afterScheduling,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+//        // 自定义查询规则
+//        Map<String, QueryRuleEnum> customeRuleMap = new HashMap<>();
+//        // 自定义多选的查询规则为:LIKE_WITH_OR
+//        customeRuleMap.put("submit", QueryRuleEnum.LIKE_WITH_OR);
+//        QueryWrapper<AfterScheduling> queryWrapper = QueryGenerator.initQueryWrapper(afterScheduling, req.getParameterMap(),customeRuleMap);
+        QueryWrapper<AfterScheduling> queryWrapper = QueryGenerator.initQueryWrapper(afterScheduling, req.getParameterMap());
+		Page<AfterScheduling> page = new Page<AfterScheduling>(pageNo, pageSize);
+		IPage<AfterScheduling> pageList = afterSchedulingService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param afterSchedulingPage
+	 * @return
+	 */
+	@AutoLog(value = "运维排班(service scheduling)-添加")
+	@ApiOperation(value="运维排班(service scheduling)-添加", notes="运维排班(service scheduling)-添加")
+    @RequiresPermissions("afterCode:after_scheduling:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody AfterSchedulingPage afterSchedulingPage) {
+		AfterScheduling afterScheduling = new AfterScheduling();
+		BeanUtils.copyProperties(afterSchedulingPage, afterScheduling);
+		afterSchedulingService.saveMain(afterScheduling, afterSchedulingPage.getAfterSchedulingShipList());
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param afterSchedulingPage
+	 * @return
+	 */
+	@AutoLog(value = "运维排班(service scheduling)-编辑")
+	@ApiOperation(value="运维排班(service scheduling)-编辑", notes="运维排班(service scheduling)-编辑")
+    @RequiresPermissions("afterCode:after_scheduling:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody AfterSchedulingPage afterSchedulingPage) {
+		AfterScheduling afterScheduling = new AfterScheduling();
+		BeanUtils.copyProperties(afterSchedulingPage, afterScheduling);
+		AfterScheduling afterSchedulingEntity = afterSchedulingService.getById(afterScheduling.getId());
+		if(afterSchedulingEntity==null) {
+			return Result.error("未找到对应数据");
+		}
+		afterSchedulingService.updateMain(afterScheduling, afterSchedulingPage.getAfterSchedulingShipList());
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "运维排班(service scheduling)-通过id删除")
+	@ApiOperation(value="运维排班(service scheduling)-通过id删除", notes="运维排班(service scheduling)-通过id删除")
+    @RequiresPermissions("afterCode:after_scheduling:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		AfterScheduling afterScheduling = afterSchedulingService.getById(id);
+		if(afterScheduling==null) {
+			return Result.error("未找到对应数据");
+		}
+		// 1-已提交,0-未提交
+		Integer submit = afterScheduling.getStatus();
+		if (submit != null && submit.equals(1)) {
+			return Result.error("已提交的单据不能删除!");
+		}
+		afterSchedulingService.delMain(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "运维排班(service scheduling)-批量删除")
+	@ApiOperation(value="运维排班(service scheduling)-批量删除", notes="运维排班(service scheduling)-批量删除")
+    @RequiresPermissions("afterCode:after_scheduling:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		for (String o : ids.split(",")) {
+
+			AfterScheduling afterScheduling = afterSchedulingService.getById(o);
+			if(afterScheduling==null) {
+				return Result.error("未找到对应数据");
+			}
+			// 1-已提交,0-未提交
+			Integer submit = afterScheduling.getStatus();
+			if (submit != null && submit.equals(1)) {
+				return Result.error("已提交的单据不能删除!");
+			}
+		}
+		this.afterSchedulingService.delBatchMain(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+
+
+	 /**
+	  * 批量提交
+	  *
+	  * @param ids
+	  * @return
+	  */
+	 @AutoLog(value = "运维排班-批量提交")
+	 @ApiOperation(value = "运维排班-批量提交", notes = "运维排班-批量提交")
+	 @GetMapping(value = "/submitBatch")
+	 public Result<String> submitBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+		 QueryWrapper<AfterScheduling> queryWrapper = new QueryWrapper<>();
+		 queryWrapper.in("id", Arrays.asList(ids.split(",")));
+
+		 List<AfterScheduling> list = afterSchedulingService.list(queryWrapper);
+		 if (list.size() == 0) {
+			 return Result.error("数据为空!");
+		 }
+
+		 StringBuffer sb = new StringBuffer();
+		 for (AfterScheduling o : list) {
+			 // 1-已提交,0-未提交
+			 Integer submit = o.getStatus();
+			 String code = o.getProjectName();
+
+			 if (submit != null && submit.equals(1)) {
+				 sb.append("项目" + code).append("已提交,请勿再次提交;");
+				 continue;
+			 }
+		 }
+
+		 if (StringUtils.isNotBlank(sb.toString())) {
+
+			 return Result.error(sb.toString());
+		 }
+
+		 AfterScheduling ent = new AfterScheduling();
+		 ent.setStatus(1);
+		 afterSchedulingService.update(ent, queryWrapper);
+
+		 return Result.OK("提交成功!");
+	 }
+
+	 /**
+	  * 批量取消提交
+	  *
+	  * @param ids
+	  * @return
+	  */
+	 @AutoLog(value = "运维排班-批量取消提交")
+	 @ApiOperation(value = "运维排班-批量取消提交", notes = "运维排班-批量取消提交")
+	 @GetMapping(value = "/returnSubmitBatch")
+	 public Result<String> returnSubmitBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+		 QueryWrapper<AfterScheduling> queryWrapper = new QueryWrapper<>();
+		 queryWrapper.in("id", Arrays.asList(ids.split(",")));
+
+		 List<AfterScheduling> list = afterSchedulingService.list(queryWrapper);
+		 if (list.size() == 0) {
+			 return Result.error("数据为空!");
+		 }
+
+		 StringBuffer sb = new StringBuffer();
+		 for (AfterScheduling o : list) {
+			 //提交(1-是 ,0-否)
+			 Integer submit = o.getStatus();
+			 String code = o.getProjectName();
+
+			 if (submit == null || submit.equals(0)) {
+				 sb.append("单号" + code).append("已取消提交,请勿再次取消提交;");
+				 continue;
+			 }
+
+		 }
+		 if (StringUtils.isNotBlank(sb.toString())) {
+
+			 return Result.error(sb.toString());
+		 }
+
+		 AfterScheduling ent = new AfterScheduling();
+		 ent.setStatus(0);
+		 afterSchedulingService.update(ent, queryWrapper);
+
+		 return Result.OK("取消提交成功!");
+	 }
+
+
+
+	 /**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "运维排班(service scheduling)-通过id查询")
+	@ApiOperation(value="运维排班(service scheduling)-通过id查询", notes="运维排班(service scheduling)-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<AfterScheduling> queryById(@RequestParam(name="id",required=true) String id) {
+		AfterScheduling afterScheduling = afterSchedulingService.getById(id);
+		if(afterScheduling==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(afterScheduling);
+
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "运维排班-船明细通过主表ID查询")
+	@ApiOperation(value="运维排班-船明细主表ID查询", notes="运维排班-船明细-通主表ID查询")
+	@GetMapping(value = "/queryAfterSchedulingShipByMainId")
+	public Result<List<AfterSchedulingShip>> queryAfterSchedulingShipListByMainId(@RequestParam(name="id",required=true) String id) {
+		List<AfterSchedulingShip> afterSchedulingShipList = afterSchedulingShipService.selectByMainId(id);
+		return Result.OK(afterSchedulingShipList);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param afterScheduling
+    */
+    @RequiresPermissions("afterCode:after_scheduling:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, AfterScheduling afterScheduling) {
+      // Step.1 组装查询条件查询数据
+      QueryWrapper<AfterScheduling> queryWrapper = QueryGenerator.initQueryWrapper(afterScheduling, request.getParameterMap());
+      LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+      //配置选中数据查询条件
+      String selections = request.getParameter("selections");
+      if(oConvertUtils.isNotEmpty(selections)) {
+         List<String> selectionList = Arrays.asList(selections.split(","));
+         queryWrapper.in("id",selectionList);
+      }
+      //Step.2 获取导出数据
+      List<AfterScheduling> afterSchedulingList = afterSchedulingService.list(queryWrapper);
+
+      // Step.3 组装pageList
+      List<AfterSchedulingPage> pageList = new ArrayList<AfterSchedulingPage>();
+      for (AfterScheduling main : afterSchedulingList) {
+          AfterSchedulingPage vo = new AfterSchedulingPage();
+          BeanUtils.copyProperties(main, vo);
+          List<AfterSchedulingShip> afterSchedulingShipList = afterSchedulingShipService.selectByMainId(main.getId());
+          vo.setAfterSchedulingShipList(afterSchedulingShipList);
+          pageList.add(vo);
+      }
+
+      // Step.4 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      mv.addObject(NormalExcelConstants.FILE_NAME, "运维排班(service scheduling)列表");
+      mv.addObject(NormalExcelConstants.CLASS, AfterSchedulingPage.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("运维排班(service scheduling)数据", "导出人:"+sysUser.getRealname(), "运维排班(service scheduling)"));
+      mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+      return mv;
+    }
+
+    /**
+    * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequiresPermissions("afterCode:after_scheduling:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+          // 获取上传文件对象
+          MultipartFile file = entity.getValue();
+          ImportParams params = new ImportParams();
+          params.setTitleRows(2);
+          params.setHeadRows(1);
+          params.setNeedSave(true);
+          try {
+              List<AfterSchedulingPage> list = ExcelImportUtil.importExcel(file.getInputStream(), AfterSchedulingPage.class, params);
+              for (AfterSchedulingPage page : list) {
+                  AfterScheduling po = new AfterScheduling();
+                  BeanUtils.copyProperties(page, po);
+                  afterSchedulingService.saveMain(po, page.getAfterSchedulingShipList());
+              }
+              return Result.OK("文件导入成功!数据行数:" + list.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.OK("文件导入失败!");
+    }
+
+}

+ 382 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/controller/AfterServiceLogsController.java

@@ -0,0 +1,382 @@
+package org.jeecg.modules.afterCode.controller;
+
+import java.io.UnsupportedEncodingException;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.HashMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.modules.afterCode.entity.AfterServiceLogs;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.vo.LoginUser;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.query.QueryRuleEnum;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.afterCode.entity.AfterServiceLogsDetails;
+import org.jeecg.modules.afterCode.entity.AfterServiceLogs;
+import org.jeecg.modules.afterCode.vo.AfterServiceLogsPage;
+import org.jeecg.modules.afterCode.service.IAfterServiceLogsService;
+import org.jeecg.modules.afterCode.service.IAfterServiceLogsDetailsService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+
+ /**
+ * @Description: 运维日志(service logs)
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+@Api(tags="运维日志(service logs)")
+@RestController
+@RequestMapping("/afterCode/afterServiceLogs")
+@Slf4j
+public class AfterServiceLogsController {
+	@Autowired
+	private IAfterServiceLogsService afterServiceLogsService;
+	@Autowired
+	private IAfterServiceLogsDetailsService afterServiceLogsDetailsService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param afterServiceLogs
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "运维日志(service logs)-分页列表查询")
+	@ApiOperation(value="运维日志(service logs)-分页列表查询", notes="运维日志(service logs)-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<AfterServiceLogs>> queryPageList(AfterServiceLogs afterServiceLogs,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+        QueryWrapper<AfterServiceLogs> queryWrapper = QueryGenerator.initQueryWrapper(afterServiceLogs, req.getParameterMap());
+		Page<AfterServiceLogs> page = new Page<AfterServiceLogs>(pageNo, pageSize);
+		IPage<AfterServiceLogs> pageList = afterServiceLogsService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param afterServiceLogsPage
+	 * @return
+	 */
+	@AutoLog(value = "运维日志(service logs)-添加")
+	@ApiOperation(value="运维日志(service logs)-添加", notes="运维日志(service logs)-添加")
+    @RequiresPermissions("afterCode:after_service_logs:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody AfterServiceLogsPage afterServiceLogsPage) {
+		AfterServiceLogs afterServiceLogs = new AfterServiceLogs();
+		BeanUtils.copyProperties(afterServiceLogsPage, afterServiceLogs);
+		afterServiceLogsService.saveMain(afterServiceLogs, afterServiceLogsPage.getAfterServiceLogsDetailsList());
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param afterServiceLogsPage
+	 * @return
+	 */
+	@AutoLog(value = "运维日志(service logs)-编辑")
+	@ApiOperation(value="运维日志(service logs)-编辑", notes="运维日志(service logs)-编辑")
+    @RequiresPermissions("afterCode:after_service_logs:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody AfterServiceLogsPage afterServiceLogsPage) {
+		AfterServiceLogs afterServiceLogs = new AfterServiceLogs();
+		BeanUtils.copyProperties(afterServiceLogsPage, afterServiceLogs);
+		AfterServiceLogs afterServiceLogsEntity = afterServiceLogsService.getById(afterServiceLogs.getId());
+		if(afterServiceLogsEntity==null) {
+			return Result.error("未找到对应数据");
+		}
+		afterServiceLogsService.updateMain(afterServiceLogs, afterServiceLogsPage.getAfterServiceLogsDetailsList());
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "运维日志(service logs)-通过id删除")
+	@ApiOperation(value="运维日志(service logs)-通过id删除", notes="运维日志(service logs)-通过id删除")
+    @RequiresPermissions("afterCode:after_service_logs:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		AfterServiceLogs afterServiceLogs = afterServiceLogsService.getById(id);
+		if(afterServiceLogs==null) {
+			return Result.error("未找到对应数据");
+		}
+		// 1-已提交,0-未提交
+		Integer submit = afterServiceLogs.getStatus();
+		if (submit != null && submit.equals(1)) {
+			return Result.error("已提交的单据不能删除!");
+		}
+		afterServiceLogsService.delMain(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "运维日志(service logs)-批量删除")
+	@ApiOperation(value="运维日志(service logs)-批量删除", notes="运维日志(service logs)-批量删除")
+    @RequiresPermissions("afterCode:after_service_logs:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		
+		for (String o : ids.split(",")) {
+
+			AfterServiceLogs afterServiceLogs = afterServiceLogsService.getById(o);
+			if(afterServiceLogs==null) {
+				return Result.error("未找到对应数据");
+			}
+			// 1-已提交,0-未提交
+			Integer submit = afterServiceLogs.getStatus();
+			if (submit != null && submit.equals(1)) {
+				return Result.error("已提交的单据不能删除!");
+			}
+
+		}
+		this.afterServiceLogsService.delBatchMain(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+
+	 /**
+	  * 批量提交
+	  *
+	  * @param ids
+	  * @return
+	  */
+	 @AutoLog(value = "运维日志-批量提交")
+	 @ApiOperation(value = "运维日志-批量提交", notes = "运维日志-批量提交")
+	 @GetMapping(value = "/submitBatch")
+	 public Result<String> submitBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+		 QueryWrapper<AfterServiceLogs> queryWrapper = new QueryWrapper<>();
+		 queryWrapper.in("id", Arrays.asList(ids.split(",")));
+
+		 List<AfterServiceLogs> list = afterServiceLogsService.list(queryWrapper);
+		 if (list.size() == 0) {
+			 return Result.error("数据为空!");
+		 }
+
+		 StringBuffer sb = new StringBuffer();
+		 for (AfterServiceLogs o : list) {
+			 // 1-已提交,0-未提交
+			 Integer submit = o.getStatus();
+			 String code = o.getProjectName();
+
+			 if (submit != null && submit.equals(1)) {
+				 sb.append("项目" + code).append("已提交,请勿再次提交;");
+				 continue;
+			 }
+		 }
+
+		 if (StringUtils.isNotBlank(sb.toString())) {
+
+			 return Result.error(sb.toString());
+		 }
+
+		 AfterServiceLogs ent = new AfterServiceLogs();
+		 ent.setStatus(1);
+		 afterServiceLogsService.update(ent, queryWrapper);
+
+		 return Result.OK("提交成功!");
+	 }
+
+	 /**
+	  * 批量取消提交
+	  *
+	  * @param ids
+	  * @return
+	  */
+	 @AutoLog(value = "运维日志-批量取消提交")
+	 @ApiOperation(value = "运维日志-批量取消提交", notes = "运维日志-批量取消提交")
+	 @GetMapping(value = "/returnSubmitBatch")
+	 public Result<String> returnSubmitBatch(@RequestParam(name = "ids", required = true) String ids) {
+
+		 QueryWrapper<AfterServiceLogs> queryWrapper = new QueryWrapper<>();
+		 queryWrapper.in("id", Arrays.asList(ids.split(",")));
+
+		 List<AfterServiceLogs> list = afterServiceLogsService.list(queryWrapper);
+		 if (list.size() == 0) {
+			 return Result.error("数据为空!");
+		 }
+
+		 StringBuffer sb = new StringBuffer();
+		 for (AfterServiceLogs o : list) {
+			 //提交(1-是 ,0-否)
+			 Integer submit = o.getStatus();
+			 String code = o.getProjectName();
+
+			 if (submit == null || submit.equals(0)) {
+				 sb.append("单号" + code).append("已取消提交,请勿再次取消提交;");
+				 continue;
+			 }
+
+		 }
+		 if (StringUtils.isNotBlank(sb.toString())) {
+
+			 return Result.error(sb.toString());
+		 }
+
+		 AfterServiceLogs ent = new AfterServiceLogs();
+		 ent.setStatus(0);
+		 afterServiceLogsService.update(ent, queryWrapper);
+
+		 return Result.OK("取消提交成功!");
+	 }
+
+
+
+	 /**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "运维日志(service logs)-通过id查询")
+	@ApiOperation(value="运维日志(service logs)-通过id查询", notes="运维日志(service logs)-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<AfterServiceLogs> queryById(@RequestParam(name="id",required=true) String id) {
+		AfterServiceLogs afterServiceLogs = afterServiceLogsService.getById(id);
+		if(afterServiceLogs==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(afterServiceLogs);
+
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "运维日志-明细通过主表ID查询")
+	@ApiOperation(value="运维日志-明细主表ID查询", notes="运维日志-明细-通主表ID查询")
+	@GetMapping(value = "/queryAfterServiceLogsDetailsByMainId")
+	public Result<List<AfterServiceLogsDetails>> queryAfterServiceLogsDetailsListByMainId(@RequestParam(name="id",required=true) String id) {
+		List<AfterServiceLogsDetails> afterServiceLogsDetailsList = afterServiceLogsDetailsService.selectByMainId(id);
+		return Result.OK(afterServiceLogsDetailsList);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param afterServiceLogs
+    */
+    @RequiresPermissions("afterCode:after_service_logs:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, AfterServiceLogs afterServiceLogs) {
+      // Step.1 组装查询条件查询数据
+      QueryWrapper<AfterServiceLogs> queryWrapper = QueryGenerator.initQueryWrapper(afterServiceLogs, request.getParameterMap());
+      LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+      //配置选中数据查询条件
+      String selections = request.getParameter("selections");
+      if(oConvertUtils.isNotEmpty(selections)) {
+         List<String> selectionList = Arrays.asList(selections.split(","));
+         queryWrapper.in("id",selectionList);
+      }
+      //Step.2 获取导出数据
+      List<AfterServiceLogs> afterServiceLogsList = afterServiceLogsService.list(queryWrapper);
+
+      // Step.3 组装pageList
+      List<AfterServiceLogsPage> pageList = new ArrayList<AfterServiceLogsPage>();
+      for (AfterServiceLogs main : afterServiceLogsList) {
+          AfterServiceLogsPage vo = new AfterServiceLogsPage();
+          BeanUtils.copyProperties(main, vo);
+          List<AfterServiceLogsDetails> afterServiceLogsDetailsList = afterServiceLogsDetailsService.selectByMainId(main.getId());
+          vo.setAfterServiceLogsDetailsList(afterServiceLogsDetailsList);
+          pageList.add(vo);
+      }
+
+      // Step.4 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      mv.addObject(NormalExcelConstants.FILE_NAME, "运维日志(service logs)列表");
+      mv.addObject(NormalExcelConstants.CLASS, AfterServiceLogsPage.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("运维日志(service logs)数据", "导出人:"+sysUser.getRealname(), "运维日志(service logs)"));
+      mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+      return mv;
+    }
+
+    /**
+    * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequiresPermissions("afterCode:after_service_logs:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+          // 获取上传文件对象
+          MultipartFile file = entity.getValue();
+          ImportParams params = new ImportParams();
+          params.setTitleRows(2);
+          params.setHeadRows(1);
+          params.setNeedSave(true);
+          try {
+              List<AfterServiceLogsPage> list = ExcelImportUtil.importExcel(file.getInputStream(), AfterServiceLogsPage.class, params);
+              for (AfterServiceLogsPage page : list) {
+                  AfterServiceLogs po = new AfterServiceLogs();
+                  BeanUtils.copyProperties(page, po);
+                  afterServiceLogsService.saveMain(po, page.getAfterServiceLogsDetailsList());
+              }
+              return Result.OK("文件导入成功!数据行数:" + list.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.OK("文件导入失败!");
+    }
+
+}

+ 127 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/entity/AfterScheduling.java

@@ -0,0 +1,127 @@
+package org.jeecg.modules.afterCode.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 运维排班(service scheduling)
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+@ApiModel(value="after_scheduling对象", description="运维排班(service scheduling)")
+@Data
+@TableName("after_scheduling")
+public class AfterScheduling implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**所属部门*/
+    @ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+	/**删除状态(0-正常,1-已删除)*/
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**提交(submit)1是0否*/
+	@Excel(name = "提交(submit)1是0否", width = 15,dicCode = "yes_or_no")
+    @ApiModelProperty(value = "提交(submit)1是0否")
+    @Dict(dicCode = "yes_or_no")
+    private Integer submit;
+	/**单据日期*/
+	@Excel(name = "单据日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "单据日期")
+    private Date billDate;
+	/**单据编码*/
+//	@Excel(name = "单据编码", width = 15)
+    @ApiModelProperty(value = "单据编码")
+    private String billCode;
+	/**项目*/
+    @ApiModelProperty(value = "项目")
+    private String project;
+	/**项目名称*/
+	@Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+	/**其他项目*/
+	@Excel(name = "其他项目", width = 15)
+    @ApiModelProperty(value = "其他项目")
+    private String otherProject;
+	/**客户*/
+    @ApiModelProperty(value = "客户")
+    private String customer;
+	/**客户名称*/
+	@Excel(name = "客户名称", width = 15)
+    @ApiModelProperty(value = "客户名称")
+    private String customerName;
+	/**地点(address)*/
+	@Excel(name = "地点(address)", width = 15)
+    @ApiModelProperty(value = "地点(address)")
+    private String address;
+	/**排班日期(scheduling date)开始*/
+	@Excel(name = "排班日期(scheduling date)开始", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "排班日期(scheduling date)开始")
+    private Date schedulingDateBegin;
+	/**排班日期(scheduling date)结束*/
+	@Excel(name = "排班日期(scheduling date)结束", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "排班日期(scheduling date)结束")
+    private Date schedulingDateEnd;
+	/**排班人员(scheduling man)*/
+	@Excel(name = "排班人员(scheduling man)", width = 15)
+    @ApiModelProperty(value = "排班人员(scheduling man)")
+    private String schedulingMan;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String notes;
+	/**船IMO(imo)*/
+//	@Excel(name = "船IMO(imo)", width = 15)
+    @ApiModelProperty(value = "船IMO(imo)")
+    private String imo;
+	/**船(shipName)*/
+//	@Excel(name = "船(shipName)", width = 15)
+    @ApiModelProperty(value = "船(shipName)")
+    private String shipName;
+}

+ 87 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/entity/AfterSchedulingShip.java

@@ -0,0 +1,87 @@
+package org.jeecg.modules.afterCode.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @Description: 运维排班-船明细
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+@ApiModel(value="after_scheduling_ship对象", description="运维排班-船明细")
+@Data
+@TableName("after_scheduling_ship")
+public class AfterSchedulingShip implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**删除状态(0-正常,1-已删除)*/
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**表头主键(运维排班)*/
+    @ApiModelProperty(value = "表头主键(运维排班)")
+    private String headId;
+	/**船id*/
+    @ApiModelProperty(value = "船id")
+    private String shipId;
+	/**船名*/
+	@Excel(name = "船名", width = 15)
+    @ApiModelProperty(value = "船名")
+    private String shipName;
+	/**主机号*/
+	@Excel(name = "主机号", width = 15)
+    @ApiModelProperty(value = "主机号")
+    private String hostNumber;
+	/**工程编号*/
+	@Excel(name = "工程编号", width = 15)
+    @ApiModelProperty(value = "工程编号")
+    private String projectNo;
+	/**船厂*/
+	@Excel(name = "船厂", width = 15)
+    @ApiModelProperty(value = "船厂")
+    private String shipFactory;
+	/**船东*/
+	@Excel(name = "船东", width = 15)
+    @ApiModelProperty(value = "船东")
+    private String shipowner;
+	/**所属部门*/
+    @ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+}

+ 126 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/entity/AfterServiceLogs.java

@@ -0,0 +1,126 @@
+package org.jeecg.modules.afterCode.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 运维日志(service logs)
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+@ApiModel(value="after_service_logs对象", description="运维日志(service logs)")
+@Data
+@TableName("after_service_logs")
+public class AfterServiceLogs implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**所属部门*/
+    @ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+	/**删除状态(0-正常,1-已删除)*/
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**提交(submit)1是0否*/
+	@Excel(name = "提交(submit)", width = 15,dicCode = "yes_or_no")
+    @ApiModelProperty(value = "提交(submit)1是0否")
+    @Dict(dicCode = "yes_or_no")
+    private Integer submit;
+	/**单据日期*/
+	@Excel(name = "单据日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "单据日期")
+    private Date billDate;
+	/**单据编码*/
+//	@Excel(name = "单据编码", width = 15)
+    @ApiModelProperty(value = "单据编码")
+    private String billCode;
+	/**项目主管*/
+	@Excel(name = "项目主管", width = 15)
+    @ApiModelProperty(value = "项目主管")
+    private String projectManager;
+	/**项目*/
+    @ApiModelProperty(value = "项目")
+    private String project;
+	/**项目名称*/
+	@Excel(name = "项目名称", width = 15)
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+	/**其他项目*/
+	@Excel(name = "其他项目", width = 15)
+    @ApiModelProperty(value = "其他项目")
+    private String otherProject;
+	/**客户*/
+    @ApiModelProperty(value = "客户")
+    private String customer;
+	/**客户名称*/
+	@Excel(name = "客户名称", width = 15)
+    @ApiModelProperty(value = "客户名称")
+    private String customerName;
+	/**地点(address)*/
+	@Excel(name = "地点(address)", width = 15)
+    @ApiModelProperty(value = "地点(address)")
+    private String address;
+	/**排班日期(scheduling date)开始*/
+	@Excel(name = "排班日期(scheduling date)开始", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "排班日期(scheduling date)开始")
+    private Date schedulingDateBegin;
+	/**排班日期(scheduling date)结束*/
+	@Excel(name = "排班日期(scheduling date)结束", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "排班日期(scheduling date)结束")
+    private Date schedulingDateEnd;
+	/**排班人员(scheduling man)*/
+	@Excel(name = "排班人员(scheduling man)", width = 15)
+    @ApiModelProperty(value = "排班人员(scheduling man)")
+    private String schedulingMan;
+	/**运维日志(maintenance log)*/
+	@Excel(name = "运维日志(maintenance log)", width = 15)
+    @ApiModelProperty(value = "运维日志(maintenance log)")
+    private String maintenanceLog;
+	/**附件(attsch)*/
+    @ApiModelProperty(value = "附件(attsch)")
+    private String attsch;
+}

+ 281 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/entity/AfterServiceLogsDetails.java

@@ -0,0 +1,281 @@
+package org.jeecg.modules.afterCode.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @Description: 运维日志-明细
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+@ApiModel(value="after_service_logs_details对象", description="运维日志-明细")
+@Data
+@TableName("after_service_logs_details")
+public class AfterServiceLogsDetails implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+    @ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**删除状态(0-正常,1-已删除)*/
+    @ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+	/**表头主键(销售合同)*/
+    @ApiModelProperty(value = "表头主键(销售合同)")
+    private String headId;
+	/**所属部门*/
+    @ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+	/**运维日期(scheduling date)*/
+	@Excel(name = "运维日期(scheduling date)", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "运维日期(scheduling date)")
+    private Date schedulingDate;
+	/**表单编号*/
+    @ApiModelProperty(value = "表单编号")
+    private String code;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+    @ApiModelProperty(value = "备注(notes)")
+    private String notes;
+	/**7-8点工作内容*/
+	@Excel(name = "7-8点工作内容", width = 15)
+    @ApiModelProperty(value = "7-8点工作内容")
+    private String time78Work;
+	/**7-8点工作重要程度*/
+	@Excel(name = "7-8点工作重要程度", width = 15)
+    @ApiModelProperty(value = "7-8点工作重要程度")
+    private String time78Degree;
+	/**7-8点工作备注*/
+	@Excel(name = "7-8点工作备注", width = 15)
+    @ApiModelProperty(value = "7-8点工作备注")
+    private String time78Notes;
+	/**8-9点工作内容*/
+	@Excel(name = "8-9点工作内容", width = 15)
+    @ApiModelProperty(value = "8-9点工作内容")
+    private String time89Work;
+	/**8-9点工作重要程度*/
+	@Excel(name = "8-9点工作重要程度", width = 15)
+    @ApiModelProperty(value = "8-9点工作重要程度")
+    private String time89Degree;
+	/**8-9点工作备注*/
+	@Excel(name = "8-9点工作备注", width = 15)
+    @ApiModelProperty(value = "8-9点工作备注")
+    private String time89Notes;
+	/**9-10点工作内容*/
+	@Excel(name = "9-10点工作内容", width = 15)
+    @ApiModelProperty(value = "9-10点工作内容")
+    private String time910Work;
+	/**9-10点工作重要程度*/
+	@Excel(name = "9-10点工作重要程度", width = 15)
+    @ApiModelProperty(value = "9-10点工作重要程度")
+    private String time910Degree;
+	/**9-10点工作备注*/
+	@Excel(name = "9-10点工作备注", width = 15)
+    @ApiModelProperty(value = "9-10点工作备注")
+    private String time910Notes;
+	/**10-11点工作内容*/
+	@Excel(name = "10-11点工作内容", width = 15)
+    @ApiModelProperty(value = "10-11点工作内容")
+    private String time1011Work;
+	/**10-11点工作重要程度*/
+	@Excel(name = "10-11点工作重要程度", width = 15)
+    @ApiModelProperty(value = "10-11点工作重要程度")
+    private String time1011Degree;
+	/**10-11点工作备注*/
+	@Excel(name = "10-11点工作备注", width = 15)
+    @ApiModelProperty(value = "10-11点工作备注")
+    private String time1011Notes;
+	/**11-12点工作内容*/
+	@Excel(name = "11-12点工作内容", width = 15)
+    @ApiModelProperty(value = "11-12点工作内容")
+    private String time1112Work;
+	/**11-12点工作重要程度*/
+	@Excel(name = "11-12点工作重要程度", width = 15)
+    @ApiModelProperty(value = "11-12点工作重要程度")
+    private String time1112Degree;
+	/**11-12点工作备注*/
+	@Excel(name = "11-12点工作备注", width = 15)
+    @ApiModelProperty(value = "11-12点工作备注")
+    private String time1112Notes;
+	/**12-13点工作内容*/
+	@Excel(name = "12-13点工作内容", width = 15)
+    @ApiModelProperty(value = "12-13点工作内容")
+    private String time1213Work;
+	/**12-13点工作重要程度*/
+	@Excel(name = "12-13点工作重要程度", width = 15)
+    @ApiModelProperty(value = "12-13点工作重要程度")
+    private String time1213Degree;
+	/**12-13点工作备注*/
+	@Excel(name = "12-13点工作备注", width = 15)
+    @ApiModelProperty(value = "12-13点工作备注")
+    private String time1213Notes;
+	/**13-14点工作内容*/
+	@Excel(name = "13-14点工作内容", width = 15)
+    @ApiModelProperty(value = "13-14点工作内容")
+    private String time1314Work;
+	/**13-14点工作重要程度*/
+	@Excel(name = "13-14点工作重要程度", width = 15)
+    @ApiModelProperty(value = "13-14点工作重要程度")
+    private String time1314Degree;
+	/**13-14点工作备注*/
+	@Excel(name = "13-14点工作备注", width = 15)
+    @ApiModelProperty(value = "13-14点工作备注")
+    private String time1314Notes;
+	/**14-15点工作内容*/
+	@Excel(name = "14-15点工作内容", width = 15)
+    @ApiModelProperty(value = "14-15点工作内容")
+    private String time1415Work;
+	/**14-15点工作重要程度*/
+	@Excel(name = "14-15点工作重要程度", width = 15)
+    @ApiModelProperty(value = "14-15点工作重要程度")
+    private String time1415Degree;
+	/**14-15点工作备注*/
+	@Excel(name = "14-15点工作备注", width = 15)
+    @ApiModelProperty(value = "14-15点工作备注")
+    private String time1415Notes;
+	/**15-16点工作内容*/
+	@Excel(name = "15-16点工作内容", width = 15)
+    @ApiModelProperty(value = "15-16点工作内容")
+    private String time1516Work;
+	/**15-16点工作重要程度*/
+	@Excel(name = "15-16点工作重要程度", width = 15)
+    @ApiModelProperty(value = "15-16点工作重要程度")
+    private String time1516Degree;
+	/**15-16点工作备注*/
+	@Excel(name = "15-16点工作备注", width = 15)
+    @ApiModelProperty(value = "15-16点工作备注")
+    private String time1516Notes;
+	/**16-17点工作内容*/
+	@Excel(name = "16-17点工作内容", width = 15)
+    @ApiModelProperty(value = "16-17点工作内容")
+    private String time1617Work;
+	/**16-17点工作重要程度*/
+	@Excel(name = "16-17点工作重要程度", width = 15)
+    @ApiModelProperty(value = "16-17点工作重要程度")
+    private String time1617Degree;
+	/**16-17点工作备注*/
+	@Excel(name = "16-17点工作备注", width = 15)
+    @ApiModelProperty(value = "16-17点工作备注")
+    private String time1617Notes;
+	/**17-18点工作内容*/
+	@Excel(name = "17-18点工作内容", width = 15)
+    @ApiModelProperty(value = "17-18点工作内容")
+    private String time1718Work;
+	/**17-18点工作重要程度*/
+	@Excel(name = "17-18点工作重要程度", width = 15)
+    @ApiModelProperty(value = "17-18点工作重要程度")
+    private String time1718Degree;
+	/**17-18点工作备注*/
+	@Excel(name = "17-18点工作备注", width = 15)
+    @ApiModelProperty(value = "17-18点工作备注")
+    private String time1718Notes;
+	/**18-19点工作内容*/
+	@Excel(name = "18-19点工作内容", width = 15)
+    @ApiModelProperty(value = "18-19点工作内容")
+    private String time1819Work;
+	/**18-19点工作重要程度*/
+	@Excel(name = "18-19点工作重要程度", width = 15)
+    @ApiModelProperty(value = "18-19点工作重要程度")
+    private String time1819Degree;
+	/**18-19点工作备注*/
+	@Excel(name = "18-19点工作备注", width = 15)
+    @ApiModelProperty(value = "18-19点工作备注")
+    private String time1819Notes;
+	/**19-20点工作内容*/
+	@Excel(name = "19-20点工作内容", width = 15)
+    @ApiModelProperty(value = "19-20点工作内容")
+    private String time1920Work;
+	/**19-20点工作重要程度*/
+	@Excel(name = "19-20点工作重要程度", width = 15)
+    @ApiModelProperty(value = "19-20点工作重要程度")
+    private String time1920Degree;
+	/**19-20点工作备注*/
+	@Excel(name = "19-20点工作备注", width = 15)
+    @ApiModelProperty(value = "19-20点工作备注")
+    private String time1920Notes;
+	/**20-21点工作内容*/
+	@Excel(name = "20-21点工作内容", width = 15)
+    @ApiModelProperty(value = "20-21点工作内容")
+    private String time2021Work;
+	/**20-21点工作重要程度*/
+	@Excel(name = "20-21点工作重要程度", width = 15)
+    @ApiModelProperty(value = "20-21点工作重要程度")
+    private String time2021Degree;
+	/**20-21点工作备注*/
+	@Excel(name = "20-21点工作备注", width = 15)
+    @ApiModelProperty(value = "20-21点工作备注")
+    private String time2021Notes;
+	/**21-22点工作内容*/
+	@Excel(name = "21-22点工作内容", width = 15)
+    @ApiModelProperty(value = "21-22点工作内容")
+    private String time2122Work;
+	/**21-22点工作重要程度*/
+	@Excel(name = "21-22点工作重要程度", width = 15)
+    @ApiModelProperty(value = "21-22点工作重要程度")
+    private String time2122Degree;
+	/**21-22点工作备注*/
+	@Excel(name = "21-22点工作备注", width = 15)
+    @ApiModelProperty(value = "21-22点工作备注")
+    private String time2122Notes;
+	/**22-23点工作内容*/
+	@Excel(name = "22-23点工作内容", width = 15)
+    @ApiModelProperty(value = "22-23点工作内容")
+    private String time2223Work;
+	/**22-23点工作重要程度*/
+	@Excel(name = "22-23点工作重要程度", width = 15)
+    @ApiModelProperty(value = "22-23点工作重要程度")
+    private String time2223Degree;
+	/**22-23点工作备注*/
+	@Excel(name = "22-23点工作备注", width = 15)
+    @ApiModelProperty(value = "22-23点工作备注")
+    private String time2223Notes;
+	/**23-24点工作内容*/
+	@Excel(name = "23-24点工作内容", width = 15)
+    @ApiModelProperty(value = "23-24点工作内容")
+    private String time2324Work;
+	/**23-24点工作重要程度*/
+	@Excel(name = "23-24点工作重要程度", width = 15)
+    @ApiModelProperty(value = "23-24点工作重要程度")
+    private String time2324Degree;
+	/**23-24点工作备注*/
+	@Excel(name = "23-24点工作备注", width = 15)
+    @ApiModelProperty(value = "23-24点工作备注")
+    private String time2324Notes;
+}

+ 17 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/mapper/AfterSchedulingMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.afterCode.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.afterCode.entity.AfterScheduling;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 运维排班(service scheduling)
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+public interface AfterSchedulingMapper extends BaseMapper<AfterScheduling> {
+
+}

+ 31 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/mapper/AfterSchedulingShipMapper.java

@@ -0,0 +1,31 @@
+package org.jeecg.modules.afterCode.mapper;
+
+import java.util.List;
+import org.jeecg.modules.afterCode.entity.AfterSchedulingShip;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @Description: 运维排班-船明细
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+public interface AfterSchedulingShipMapper extends BaseMapper<AfterSchedulingShip> {
+
+	/**
+	 * 通过主表id删除子表数据
+	 *
+	 * @param mainId 主表id
+	 * @return boolean
+	 */
+	public boolean deleteByMainId(@Param("mainId") String mainId);
+
+  /**
+   * 通过主表id查询子表数据
+   *
+   * @param mainId 主表id
+   * @return List<AfterSchedulingShip>
+   */
+	public List<AfterSchedulingShip> selectByMainId(@Param("mainId") String mainId);
+}

+ 31 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/mapper/AfterServiceLogsDetailsMapper.java

@@ -0,0 +1,31 @@
+package org.jeecg.modules.afterCode.mapper;
+
+import java.util.List;
+import org.jeecg.modules.afterCode.entity.AfterServiceLogsDetails;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @Description: 运维日志-明细
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+public interface AfterServiceLogsDetailsMapper extends BaseMapper<AfterServiceLogsDetails> {
+
+	/**
+	 * 通过主表id删除子表数据
+	 *
+	 * @param mainId 主表id
+	 * @return boolean
+	 */
+	public boolean deleteByMainId(@Param("mainId") String mainId);
+
+  /**
+   * 通过主表id查询子表数据
+   *
+   * @param mainId 主表id
+   * @return List<AfterServiceLogsDetails>
+   */
+	public List<AfterServiceLogsDetails> selectByMainId(@Param("mainId") String mainId);
+}

+ 17 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/mapper/AfterServiceLogsMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.afterCode.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.afterCode.entity.AfterServiceLogs;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 运维日志(service logs)
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+public interface AfterServiceLogsMapper extends BaseMapper<AfterServiceLogs> {
+
+}

+ 5 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/mapper/xml/AfterSchedulingMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.afterCode.mapper.AfterSchedulingMapper">
+
+</mapper>

+ 16 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/mapper/xml/AfterSchedulingShipMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.afterCode.mapper.AfterSchedulingShipMapper">
+
+	<delete id="deleteByMainId" parameterType="java.lang.String">
+		DELETE 
+		FROM  after_scheduling_ship 
+		WHERE
+			 head_id = #{mainId} 	</delete>
+	
+	<select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.afterCode.entity.AfterSchedulingShip">
+		SELECT * 
+		FROM  after_scheduling_ship
+		WHERE
+			 head_id = #{mainId} 	</select>
+</mapper>

+ 16 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/mapper/xml/AfterServiceLogsDetailsMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.afterCode.mapper.AfterServiceLogsDetailsMapper">
+
+	<delete id="deleteByMainId" parameterType="java.lang.String">
+		DELETE 
+		FROM  after_service_logs_details 
+		WHERE
+			 head_id = #{mainId} 	</delete>
+	
+	<select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.afterCode.entity.AfterServiceLogsDetails">
+		SELECT * 
+		FROM  after_service_logs_details
+		WHERE
+			 head_id = #{mainId} 	</select>
+</mapper>

+ 5 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/mapper/xml/AfterServiceLogsMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.afterCode.mapper.AfterServiceLogsMapper">
+
+</mapper>

+ 48 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/service/IAfterSchedulingService.java

@@ -0,0 +1,48 @@
+package org.jeecg.modules.afterCode.service;
+
+import org.jeecg.modules.afterCode.entity.AfterSchedulingShip;
+import org.jeecg.modules.afterCode.entity.AfterScheduling;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: 运维排班(service scheduling)
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+public interface IAfterSchedulingService extends IService<AfterScheduling> {
+
+	/**
+	 * 添加一对多
+	 *
+	 * @param afterScheduling
+	 * @param afterSchedulingShipList
+	 */
+	public void saveMain(AfterScheduling afterScheduling,List<AfterSchedulingShip> afterSchedulingShipList) ;
+	
+	/**
+	 * 修改一对多
+	 *
+   * @param afterScheduling
+   * @param afterSchedulingShipList
+	 */
+	public void updateMain(AfterScheduling afterScheduling,List<AfterSchedulingShip> afterSchedulingShipList);
+	
+	/**
+	 * 删除一对多
+	 *
+	 * @param id
+	 */
+	public void delMain (String id);
+	
+	/**
+	 * 批量删除一对多
+	 *
+	 * @param idList
+	 */
+	public void delBatchMain (Collection<? extends Serializable> idList);
+	
+}

+ 22 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/service/IAfterSchedulingShipService.java

@@ -0,0 +1,22 @@
+package org.jeecg.modules.afterCode.service;
+
+import org.jeecg.modules.afterCode.entity.AfterSchedulingShip;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
+/**
+ * @Description: 运维排班-船明细
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+public interface IAfterSchedulingShipService extends IService<AfterSchedulingShip> {
+
+	/**
+	 * 通过主表id查询子表数据
+	 *
+	 * @param mainId 主表id
+	 * @return List<AfterSchedulingShip>
+	 */
+	public List<AfterSchedulingShip> selectByMainId(String mainId);
+}

+ 22 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/service/IAfterServiceLogsDetailsService.java

@@ -0,0 +1,22 @@
+package org.jeecg.modules.afterCode.service;
+
+import org.jeecg.modules.afterCode.entity.AfterServiceLogsDetails;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
+/**
+ * @Description: 运维日志-明细
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+public interface IAfterServiceLogsDetailsService extends IService<AfterServiceLogsDetails> {
+
+	/**
+	 * 通过主表id查询子表数据
+	 *
+	 * @param mainId 主表id
+	 * @return List<AfterServiceLogsDetails>
+	 */
+	public List<AfterServiceLogsDetails> selectByMainId(String mainId);
+}

+ 48 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/service/IAfterServiceLogsService.java

@@ -0,0 +1,48 @@
+package org.jeecg.modules.afterCode.service;
+
+import org.jeecg.modules.afterCode.entity.AfterServiceLogsDetails;
+import org.jeecg.modules.afterCode.entity.AfterServiceLogs;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: 运维日志(service logs)
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+public interface IAfterServiceLogsService extends IService<AfterServiceLogs> {
+
+	/**
+	 * 添加一对多
+	 *
+	 * @param afterServiceLogs
+	 * @param afterServiceLogsDetailsList
+	 */
+	public void saveMain(AfterServiceLogs afterServiceLogs,List<AfterServiceLogsDetails> afterServiceLogsDetailsList) ;
+	
+	/**
+	 * 修改一对多
+	 *
+   * @param afterServiceLogs
+   * @param afterServiceLogsDetailsList
+	 */
+	public void updateMain(AfterServiceLogs afterServiceLogs,List<AfterServiceLogsDetails> afterServiceLogsDetailsList);
+	
+	/**
+	 * 删除一对多
+	 *
+	 * @param id
+	 */
+	public void delMain (String id);
+	
+	/**
+	 * 批量删除一对多
+	 *
+	 * @param idList
+	 */
+	public void delBatchMain (Collection<? extends Serializable> idList);
+	
+}

+ 77 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/service/impl/AfterSchedulingServiceImpl.java

@@ -0,0 +1,77 @@
+package org.jeecg.modules.afterCode.service.impl;
+
+import org.jeecg.modules.afterCode.entity.AfterScheduling;
+import org.jeecg.modules.afterCode.entity.AfterSchedulingShip;
+import org.jeecg.modules.afterCode.mapper.AfterSchedulingShipMapper;
+import org.jeecg.modules.afterCode.mapper.AfterSchedulingMapper;
+import org.jeecg.modules.afterCode.service.IAfterSchedulingService;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Collection;
+
+/**
+ * @Description: 运维排班(service scheduling)
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+@Service
+public class AfterSchedulingServiceImpl extends ServiceImpl<AfterSchedulingMapper, AfterScheduling> implements IAfterSchedulingService {
+
+	@Autowired
+	private AfterSchedulingMapper afterSchedulingMapper;
+	@Autowired
+	private AfterSchedulingShipMapper afterSchedulingShipMapper;
+	
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void saveMain(AfterScheduling afterScheduling, List<AfterSchedulingShip> afterSchedulingShipList) {
+		afterSchedulingMapper.insert(afterScheduling);
+		if(afterSchedulingShipList!=null && afterSchedulingShipList.size()>0) {
+			for(AfterSchedulingShip entity:afterSchedulingShipList) {
+				//外键设置
+				entity.setHeadId(afterScheduling.getId());
+				afterSchedulingShipMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void updateMain(AfterScheduling afterScheduling,List<AfterSchedulingShip> afterSchedulingShipList) {
+		afterSchedulingMapper.updateById(afterScheduling);
+		
+		//1.先删除子表数据
+		afterSchedulingShipMapper.deleteByMainId(afterScheduling.getId());
+		
+		//2.子表数据重新插入
+		if(afterSchedulingShipList!=null && afterSchedulingShipList.size()>0) {
+			for(AfterSchedulingShip entity:afterSchedulingShipList) {
+				//外键设置
+				entity.setHeadId(afterScheduling.getId());
+				afterSchedulingShipMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void delMain(String id) {
+		afterSchedulingShipMapper.deleteByMainId(id);
+		afterSchedulingMapper.deleteById(id);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void delBatchMain(Collection<? extends Serializable> idList) {
+		for(Serializable id:idList) {
+			afterSchedulingShipMapper.deleteByMainId(id.toString());
+			afterSchedulingMapper.deleteById(id);
+		}
+	}
+	
+}

+ 27 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/service/impl/AfterSchedulingShipServiceImpl.java

@@ -0,0 +1,27 @@
+package org.jeecg.modules.afterCode.service.impl;
+
+import org.jeecg.modules.afterCode.entity.AfterSchedulingShip;
+import org.jeecg.modules.afterCode.mapper.AfterSchedulingShipMapper;
+import org.jeecg.modules.afterCode.service.IAfterSchedulingShipService;
+import org.springframework.stereotype.Service;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description: 运维排班-船明细
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+@Service
+public class AfterSchedulingShipServiceImpl extends ServiceImpl<AfterSchedulingShipMapper, AfterSchedulingShip> implements IAfterSchedulingShipService {
+	
+	@Autowired
+	private AfterSchedulingShipMapper afterSchedulingShipMapper;
+	
+	@Override
+	public List<AfterSchedulingShip> selectByMainId(String mainId) {
+		return afterSchedulingShipMapper.selectByMainId(mainId);
+	}
+}

+ 27 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/service/impl/AfterServiceLogsDetailsServiceImpl.java

@@ -0,0 +1,27 @@
+package org.jeecg.modules.afterCode.service.impl;
+
+import org.jeecg.modules.afterCode.entity.AfterServiceLogsDetails;
+import org.jeecg.modules.afterCode.mapper.AfterServiceLogsDetailsMapper;
+import org.jeecg.modules.afterCode.service.IAfterServiceLogsDetailsService;
+import org.springframework.stereotype.Service;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description: 运维日志-明细
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+@Service
+public class AfterServiceLogsDetailsServiceImpl extends ServiceImpl<AfterServiceLogsDetailsMapper, AfterServiceLogsDetails> implements IAfterServiceLogsDetailsService {
+	
+	@Autowired
+	private AfterServiceLogsDetailsMapper afterServiceLogsDetailsMapper;
+	
+	@Override
+	public List<AfterServiceLogsDetails> selectByMainId(String mainId) {
+		return afterServiceLogsDetailsMapper.selectByMainId(mainId);
+	}
+}

+ 77 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/service/impl/AfterServiceLogsServiceImpl.java

@@ -0,0 +1,77 @@
+package org.jeecg.modules.afterCode.service.impl;
+
+import org.jeecg.modules.afterCode.entity.AfterServiceLogs;
+import org.jeecg.modules.afterCode.entity.AfterServiceLogsDetails;
+import org.jeecg.modules.afterCode.mapper.AfterServiceLogsDetailsMapper;
+import org.jeecg.modules.afterCode.mapper.AfterServiceLogsMapper;
+import org.jeecg.modules.afterCode.service.IAfterServiceLogsService;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Collection;
+
+/**
+ * @Description: 运维日志(service logs)
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+@Service
+public class AfterServiceLogsServiceImpl extends ServiceImpl<AfterServiceLogsMapper, AfterServiceLogs> implements IAfterServiceLogsService {
+
+	@Autowired
+	private AfterServiceLogsMapper afterServiceLogsMapper;
+	@Autowired
+	private AfterServiceLogsDetailsMapper afterServiceLogsDetailsMapper;
+	
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void saveMain(AfterServiceLogs afterServiceLogs, List<AfterServiceLogsDetails> afterServiceLogsDetailsList) {
+		afterServiceLogsMapper.insert(afterServiceLogs);
+		if(afterServiceLogsDetailsList!=null && afterServiceLogsDetailsList.size()>0) {
+			for(AfterServiceLogsDetails entity:afterServiceLogsDetailsList) {
+				//外键设置
+				entity.setHeadId(afterServiceLogs.getId());
+				afterServiceLogsDetailsMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void updateMain(AfterServiceLogs afterServiceLogs,List<AfterServiceLogsDetails> afterServiceLogsDetailsList) {
+		afterServiceLogsMapper.updateById(afterServiceLogs);
+		
+		//1.先删除子表数据
+		afterServiceLogsDetailsMapper.deleteByMainId(afterServiceLogs.getId());
+		
+		//2.子表数据重新插入
+		if(afterServiceLogsDetailsList!=null && afterServiceLogsDetailsList.size()>0) {
+			for(AfterServiceLogsDetails entity:afterServiceLogsDetailsList) {
+				//外键设置
+				entity.setHeadId(afterServiceLogs.getId());
+				afterServiceLogsDetailsMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void delMain(String id) {
+		afterServiceLogsDetailsMapper.deleteByMainId(id);
+		afterServiceLogsMapper.deleteById(id);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void delBatchMain(Collection<? extends Serializable> idList) {
+		for(Serializable id:idList) {
+			afterServiceLogsDetailsMapper.deleteByMainId(id.toString());
+			afterServiceLogsMapper.deleteById(id);
+		}
+	}
+	
+}

+ 124 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/vo/AfterSchedulingPage.java

@@ -0,0 +1,124 @@
+package org.jeecg.modules.afterCode.vo;
+
+import java.util.List;
+import org.jeecg.modules.afterCode.entity.AfterScheduling;
+import org.jeecg.modules.afterCode.entity.AfterSchedulingShip;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelEntity;
+import org.jeecgframework.poi.excel.annotation.ExcelCollection;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 运维排班(service scheduling)
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+@Data
+@ApiModel(value="after_schedulingPage对象", description="运维排班(service scheduling)")
+public class AfterSchedulingPage {
+
+	/**主键id*/
+	@ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+	@ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+	@ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+	@ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**所属部门*/
+	@ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+	/**删除状态(0-正常,1-已删除)*/
+	@ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    private Integer delFlag;
+	/**提交(submit)1是0否*/
+	@Excel(name = "提交(submit)", width = 15,dicCode = "yes_or_no")
+	@ApiModelProperty(value = "提交(submit)1是0否")
+	@Dict(dicCode = "yes_or_no")
+    private Integer submit;
+	/**单据日期*/
+	@Excel(name = "单据日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "单据日期")
+    private Date billDate;
+	/**单据编码*/
+	@ApiModelProperty(value = "单据编码")
+    private String billCode;
+	/**项目*/
+	@ApiModelProperty(value = "项目")
+    private String project;
+	/**项目名称*/
+	@Excel(name = "项目名称", width = 15)
+	@ApiModelProperty(value = "项目名称")
+    private String projectName;
+	/**其他项目*/
+	@Excel(name = "其他项目", width = 15)
+	@ApiModelProperty(value = "其他项目")
+    private String otherProject;
+	/**客户*/
+	@ApiModelProperty(value = "客户")
+    private String customer;
+	/**客户名称*/
+	@Excel(name = "客户名称", width = 15)
+	@ApiModelProperty(value = "客户名称")
+    private String customerName;
+	/**地点(address)*/
+	@Excel(name = "地点(address)", width = 15)
+	@ApiModelProperty(value = "地点(address)")
+    private String address;
+	/**排班日期(scheduling date)开始*/
+	@Excel(name = "排班日期(scheduling date)开始", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "排班日期(scheduling date)开始")
+    private Date schedulingDateBegin;
+	/**排班日期(scheduling date)结束*/
+	@Excel(name = "排班日期(scheduling date)结束", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "排班日期(scheduling date)结束")
+    private Date schedulingDateEnd;
+	/**排班人员(scheduling man)*/
+	@Excel(name = "排班人员(scheduling man)", width = 15)
+	@ApiModelProperty(value = "排班人员(scheduling man)")
+    private String schedulingMan;
+	/**备注(notes)*/
+	@Excel(name = "备注(notes)", width = 15)
+	@ApiModelProperty(value = "备注(notes)")
+    private String notes;
+	/**船IMO(imo)*/
+	@ApiModelProperty(value = "船IMO(imo)")
+    private String imo;
+	/**船(shipName)*/
+	@ApiModelProperty(value = "船(shipName)")
+    private String shipName;
+
+	@ExcelCollection(name="运维排班-船明细")
+	@ApiModelProperty(value = "运维排班-船明细")
+	private List<AfterSchedulingShip> afterSchedulingShipList;
+
+}

+ 125 - 0
srm-module-code/src/main/java/org/jeecg/modules/afterCode/vo/AfterServiceLogsPage.java

@@ -0,0 +1,125 @@
+package org.jeecg.modules.afterCode.vo;
+
+import java.util.List;
+import org.jeecg.modules.afterCode.entity.AfterServiceLogs;
+import org.jeecg.modules.afterCode.entity.AfterServiceLogsDetails;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelEntity;
+import org.jeecgframework.poi.excel.annotation.ExcelCollection;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecg.common.constant.ProvinceCityArea;
+import org.jeecg.common.util.SpringContextUtils;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 运维日志(service logs)
+ * @Author: jeecg-boot
+ * @Date:   2025-05-22
+ * @Version: V1.0
+ */
+@Data
+@ApiModel(value="after_service_logsPage对象", description="运维日志(service logs)")
+public class AfterServiceLogsPage {
+
+	/**主键id*/
+	@ApiModelProperty(value = "主键id")
+    private String id;
+	/**创建人*/
+	@ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**更新人*/
+	@ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**状态(1-启用,0-停用)*/
+	@ApiModelProperty(value = "状态(1-启用,0-停用)")
+    private Integer status;
+	/**所属部门*/
+	@ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+	/**删除状态(0-正常,1-已删除)*/
+	@ApiModelProperty(value = "删除状态(0-正常,1-已删除)")
+    private Integer delFlag;
+	/**提交(submit)1是0否*/
+	@Excel(name = "提交(submit)", width = 15,dicCode = "yes_or_no")
+	@ApiModelProperty(value = "提交(submit)1是0否")
+	@Dict(dicCode = "yes_or_no")
+    private Integer submit;
+	/**单据日期*/
+	@Excel(name = "单据日期", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "单据日期")
+    private Date billDate;
+	/**单据编码*/
+	@ApiModelProperty(value = "单据编码")
+    private String billCode;
+	/**项目主管*/
+	@Excel(name = "项目主管", width = 15)
+	@ApiModelProperty(value = "项目主管")
+    private String projectManager;
+	/**项目*/
+	@ApiModelProperty(value = "项目")
+    private String project;
+	/**项目名称*/
+	@Excel(name = "项目名称", width = 15)
+	@ApiModelProperty(value = "项目名称")
+    private String projectName;
+	/**其他项目*/
+	@Excel(name = "其他项目", width = 15)
+	@ApiModelProperty(value = "其他项目")
+    private String otherProject;
+	/**客户*/
+	@ApiModelProperty(value = "客户")
+    private String customer;
+	/**客户名称*/
+	@Excel(name = "客户名称", width = 15)
+	@ApiModelProperty(value = "客户名称")
+    private String customerName;
+	/**地点(address)*/
+	@Excel(name = "地点(address)", width = 15)
+	@ApiModelProperty(value = "地点(address)")
+    private String address;
+	/**排班日期(scheduling date)开始*/
+	@Excel(name = "排班日期(scheduling date)开始", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "排班日期(scheduling date)开始")
+    private Date schedulingDateBegin;
+	/**排班日期(scheduling date)结束*/
+	@Excel(name = "排班日期(scheduling date)结束", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+	@ApiModelProperty(value = "排班日期(scheduling date)结束")
+    private Date schedulingDateEnd;
+	/**排班人员(scheduling man)*/
+	@Excel(name = "排班人员(scheduling man)", width = 15)
+	@ApiModelProperty(value = "排班人员(scheduling man)")
+    private String schedulingMan;
+	/**运维日志(maintenance log)*/
+	@Excel(name = "运维日志(maintenance log)", width = 15)
+	@ApiModelProperty(value = "运维日志(maintenance log)")
+    private String maintenanceLog;
+	/**附件(attsch)*/
+	@ApiModelProperty(value = "附件(attsch)")
+    private String attsch;
+
+	@ExcelCollection(name="运维日志-明细")
+	@ApiModelProperty(value = "运维日志-明细")
+	private List<AfterServiceLogsDetails> afterServiceLogsDetailsList;
+
+}

+ 4 - 3
srm-module-code/src/main/java/org/jeecg/modules/purCode/controller/PurOrderController.java

@@ -949,7 +949,8 @@ public class PurOrderController {
             try {
                 // 折上折
                 if (oConvertUtils.isNotEmpty(purOrder.getDiscountHead())) {
-                    purOrder.setDiscountHeadText((100 - purOrder.getDiscountHead().doubleValue()) + "%");
+//                    purOrder.setDiscountHeadText((100 - purOrder.getDiscountHead().doubleValue()) + "%");
+                    purOrder.setDiscountHeadText(purOrder.getDiscountHead().doubleValue() + "%");
                     BigDecimal discountAmount = purOrder.getTotalAmount().subtract(purOrder.getDiscountAmount());
                     purOrder.setDiscountHeadMoney(discountAmount.setScale(2));
                 }
@@ -1047,7 +1048,7 @@ public class PurOrderController {
                     if (product.getTaxPriceOriginal() != null && product.getDiscount() != null) {
 
                         product.setTaxPrice(product.getTaxPriceOriginal());
-                        product.setDiscountText(product.getDiscount().intValue() + "%");
+                        product.setDiscountText(product.getDiscount().doubleValue() + "%");
 
                     } else {
 
@@ -1059,7 +1060,7 @@ public class PurOrderController {
                                 PurQuotationSelectionProduct quotationSelectionProduct = purQuotationSelectionProductList.stream().filter(e -> e.getId().equals(saleQuotationProduct.getSourceId())).findFirst().orElse(null);
 
                                 if (quotationSelectionProduct != null && oConvertUtils.isNotEmpty(quotationSelectionProduct.getDiscount())) {
-                                    product.setDiscountText(quotationSelectionProduct.getDiscount().intValue() + "%");
+                                    product.setDiscountText(quotationSelectionProduct.getDiscount().doubleValue() + "%");
                                 }
 
                                 BigDecimal dic = quotationSelectionProduct == null || quotationSelectionProduct.getDiscount() == null ? BigDecimal.ZERO : quotationSelectionProduct.getDiscount();

+ 175 - 2
srm-module-code/src/main/java/org/jeecg/modules/purCode/controller/PurPaymentController.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.purCode.controller;
 
+import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
@@ -18,9 +19,9 @@ import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.query.QueryRuleEnum;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.baseCode.service.ISerialPatternService;
+import org.jeecg.modules.purCode.entity.*;
 import org.jeecg.modules.purCode.entity.PurPayment;
-import org.jeecg.modules.purCode.entity.PurPayment;
-import org.jeecg.modules.purCode.service.IPurPaymentService;
+import org.jeecg.modules.purCode.service.*;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -57,6 +58,14 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
 public class PurPaymentController extends JeecgController<PurPayment, IPurPaymentService> {
     @Autowired
     private IPurPaymentService purPaymentService;
+    @Autowired
+    private IPurPaymentRequestService purPaymentRequestService;
+    @Autowired
+    private IPurCommissionRequestService purCommissionRequestService;
+    @Autowired
+    private IPurAdvancePaymentService purAdvancePaymentService;
+    @Autowired
+    private IPurAdvanceCommissionService purAdvanceCommissionService;
 
     @Autowired
     private ISerialPatternService serialPatternService;
@@ -116,6 +125,64 @@ public class PurPaymentController extends JeecgController<PurPayment, IPurPaymen
             purPayment.setBillCode(result.getMessage());
         }
 
+        String payType = purPayment.getPayType();
+        String applyBillId = purPayment.getApplyBillId();
+        BigDecimal paymentMoney = purPayment.getPaymentMoney();
+
+        if(StringUtils.isBlank(payType) || StringUtils.isBlank(applyBillId)){
+            return Result.error("数据异常,请刷新后重试!");
+        }
+
+        if("采购付款申请".equals(payType)){
+
+            PurPaymentRequest request = purPaymentRequestService.getById(applyBillId);
+            if(request!=null && StringUtils.isNotBlank(request.getPayment()) && request.getPayment().equals("1")){
+                return Result.error("该采购付款申请单已被占用,请刷新后重试!");
+            }
+
+            request.setId(applyBillId);
+            request.setPayment("1");
+            request.setPayMoney(paymentMoney);
+            purPaymentRequestService.updateById(request);
+
+        }else if("佣金付款申请".equals(payType)){
+
+            PurCommissionRequest request = purCommissionRequestService.getById(applyBillId);
+            if(request!=null && StringUtils.isNotBlank(request.getPayment()) && request.getPayment().equals("1")){
+                return Result.error("该佣金付款申请单已被占用,请刷新后重试!");
+            }
+//            PurCommissionRequest request = new PurCommissionRequest();
+            request.setId(applyBillId);
+            request.setPayment("1");
+            request.setPayMoney(paymentMoney);
+            purCommissionRequestService.updateById(request);
+
+        }else if("采购预付款申请".equals(payType)){
+
+            PurAdvancePayment request = purAdvancePaymentService.getById(applyBillId);
+            if(request!=null && StringUtils.isNotBlank(request.getPayment()) && request.getPayment().equals("1")){
+                return Result.error("该采购预付款申请单已被占用,请刷新后重试!");
+            }
+//            PurAdvancePayment request = new PurAdvancePayment();
+            request.setId(applyBillId);
+            request.setPayment("1");
+            request.setPayMoney(paymentMoney);
+            purAdvancePaymentService.updateById(request);
+
+        }else if("佣金预付款申请".equals(payType)){
+
+            PurAdvanceCommission request = purAdvanceCommissionService.getById(applyBillId);
+            if(request!=null && StringUtils.isNotBlank(request.getPayment()) && request.getPayment().equals("1")){
+                return Result.error("该佣金预付款申请已被占用,请刷新后重试!");
+            }
+//            PurAdvanceCommission request = new PurAdvanceCommission();
+            request.setId(applyBillId);
+            request.setPayment("1");
+            request.setPayMoney(paymentMoney);
+            purAdvanceCommissionService.updateById(request);
+
+        }
+
         purPaymentService.save(purPayment);
         return Result.OK("添加成功!");
     }
@@ -131,6 +198,112 @@ public class PurPaymentController extends JeecgController<PurPayment, IPurPaymen
     @RequiresPermissions("purCode:pur_payment:edit")
     @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
     public Result<String> edit(@RequestBody PurPayment purPayment) {
+
+        String applyBillId = purPayment.getApplyBillId();
+        BigDecimal paymentMoney = purPayment.getPaymentMoney();
+        String payType = purPayment.getPayType();
+
+        PurPayment purPaymentOld = purPaymentService.getById(purPayment.getId());
+        String applyBillIdOld = purPaymentOld.getApplyBillId();
+        String payTypeOld = purPaymentOld.getPayType();
+
+        if(StringUtils.isBlank(payType) || StringUtils.isBlank(applyBillId)){
+            return Result.error("数据异常,请刷新后重试!");
+        }
+
+        if(!applyBillId.equals(purPaymentOld)){
+
+
+            if("采购付款申请".equals(payTypeOld)){
+
+                PurPaymentRequest request = new PurPaymentRequest();
+                request.setId(applyBillIdOld);
+                request.setPayment("0");
+                request.setPayMoney(BigDecimal.ZERO);
+                purPaymentRequestService.updateById(request);
+
+            }else if("佣金付款申请".equals(payTypeOld)){
+
+                PurCommissionRequest request = new PurCommissionRequest();
+                request.setId(applyBillIdOld);
+                request.setPayment("0");
+                request.setPayMoney(BigDecimal.ZERO);
+                purCommissionRequestService.updateById(request);
+
+            }else if("采购预付款申请".equals(payTypeOld)){
+
+                PurAdvancePayment request = new PurAdvancePayment();
+                request.setId(applyBillIdOld);
+                request.setPayment("0");
+                request.setPayMoney(BigDecimal.ZERO);
+                purAdvancePaymentService.updateById(request);
+
+            }else if("佣金预付款申请".equals(payTypeOld)){
+
+                PurAdvanceCommission request = new PurAdvanceCommission();
+                request.setId(applyBillIdOld);
+                request.setPayment("0");
+                request.setPayMoney(BigDecimal.ZERO);
+                purAdvanceCommissionService.updateById(request);
+
+            }
+
+        }else{
+
+            if("采购付款申请".equals(payType)){
+
+                PurPaymentRequest request = purPaymentRequestService.getById(applyBillId);
+                if(request!=null && StringUtils.isNotBlank(request.getPayment()) && request.getPayment().equals("1")){
+                    return Result.error("该采购付款申请单已被占用,请刷新后重试!");
+                }
+
+                request.setId(applyBillId);
+                request.setPayment("1");
+                request.setPayMoney(paymentMoney);
+                purPaymentRequestService.updateById(request);
+
+            }else if("佣金付款申请".equals(payType)){
+
+                PurCommissionRequest request = purCommissionRequestService.getById(applyBillId);
+                if(request!=null && StringUtils.isNotBlank(request.getPayment()) && request.getPayment().equals("1")){
+                    return Result.error("该佣金付款申请单已被占用,请刷新后重试!");
+                }
+//            PurCommissionRequest request = new PurCommissionRequest();
+                request.setId(applyBillId);
+                request.setPayment("1");
+                request.setPayMoney(paymentMoney);
+                purCommissionRequestService.updateById(request);
+
+            }else if("采购预付款申请".equals(payType)){
+
+                PurAdvancePayment request = purAdvancePaymentService.getById(applyBillId);
+                if(request!=null && StringUtils.isNotBlank(request.getPayment()) && request.getPayment().equals("1")){
+                    return Result.error("该采购预付款申请单已被占用,请刷新后重试!");
+                }
+//            PurAdvancePayment request = new PurAdvancePayment();
+                request.setId(applyBillId);
+                request.setPayment("1");
+                request.setPayMoney(paymentMoney);
+                purAdvancePaymentService.updateById(request);
+
+            }else if("佣金预付款申请".equals(payType)){
+
+                PurAdvanceCommission request = purAdvanceCommissionService.getById(applyBillId);
+                if(request!=null && StringUtils.isNotBlank(request.getPayment()) && request.getPayment().equals("1")){
+                    return Result.error("该佣金预付款申请已被占用,请刷新后重试!");
+                }
+//            PurAdvanceCommission request = new PurAdvanceCommission();
+                request.setId(applyBillId);
+                request.setPayment("1");
+                request.setPayMoney(paymentMoney);
+                purAdvanceCommissionService.updateById(request);
+
+            }
+
+
+        }
+
+
         purPaymentService.updateById(purPayment);
         return Result.OK("编辑成功!");
     }

+ 2 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurAdvanceCommission.java

@@ -129,4 +129,6 @@ public class PurAdvanceCommission implements Serializable {
 	@Excel(name = "sourceCode", width = 15)
     @ApiModelProperty(value = "sourceCode")
     private String sourceCode;
+    @ApiModelProperty(value = "已付款金额(付款单参照)")
+    private java.math.BigDecimal payMoney;
 }

+ 3 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurAdvancePayment.java

@@ -135,4 +135,7 @@ public class PurAdvancePayment implements Serializable {
 	@Excel(name = "预付款比例", width = 15)
     @ApiModelProperty(value = "预付款比例")
     private java.math.BigDecimal prepaymentRatio;
+
+    @ApiModelProperty(value = "已付款金额(付款单参照)")
+    private java.math.BigDecimal payMoney;
 }

+ 4 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurCommissionRequest.java

@@ -136,5 +136,9 @@ public class PurCommissionRequest implements Serializable {
     @ApiModelProperty(value = "申请金额(approve money)")
     private java.math.BigDecimal approveMoney;
 
+
+    @ApiModelProperty(value = "已付款金额(付款单参照)")
+    private java.math.BigDecimal payMoney;
+
     private String sourceCode;
 }

+ 3 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/entity/PurPaymentRequest.java

@@ -128,4 +128,7 @@ public class PurPaymentRequest implements Serializable {
 	@Excel(name = "申请金额(approve money)", width = 15)
     @ApiModelProperty(value = "申请金额(approve money)")
     private java.math.BigDecimal approveMoney;
+    @Excel(name = "已付款金额(付款单参照)", width = 15)
+    @ApiModelProperty(value = "已付款金额(付款单参照)")
+    private java.math.BigDecimal payMoney;
 }

+ 13 - 9
srm-module-code/src/main/java/org/jeecg/modules/purCode/service/impl/PurPaymentRequestServiceImpl.java

@@ -75,7 +75,8 @@ public class PurPaymentRequestServiceImpl extends ServiceImpl<PurPaymentRequestM
 
 				PurOrder order = purOrderMapper.selectById(sourceId);
 				if (order != null) {
-					BigDecimal totalAmount = order.getTotalAmount() == null ? BigDecimal.ZERO : order.getTotalAmount();//订单金额
+//					BigDecimal totalAmount = order.getTotalAmount() == null ? BigDecimal.ZERO : order.getTotalAmount();//订单金额
+					BigDecimal totalAmount = order.getDiscountAmount() == null ? BigDecimal.ZERO : order.getDiscountAmount();//订单金额
 					BigDecimal totalAmountUsed = order.getTotalAmountUsed() == null ? BigDecimal.ZERO : order.getTotalAmountUsed();//已使用金额
 
 					totalAmountUsed = applyMoney.add(totalAmountUsed);
@@ -101,13 +102,16 @@ public class PurPaymentRequestServiceImpl extends ServiceImpl<PurPaymentRequestM
 
 	public static void main(String[] args) {
 
-		BigDecimal totalAmount = new BigDecimal("1230002");
-		BigDecimal totalAmountUsed = new BigDecimal("123000");
-		if(totalAmount.subtract(totalAmountUsed).abs().compareTo(BigDecimal.ONE) > 0){
-			System.out.println(11111);
-		}else{
-			System.out.println(22222);
-		}
+		BigDecimal totalAmount = new BigDecimal("0");
+
+		System.out.println(totalAmount.doubleValue()+"%");
+
+//		BigDecimal totalAmountUsed = new BigDecimal("123000");
+//		if(totalAmount.subtract(totalAmountUsed).abs().compareTo(BigDecimal.ONE) > 0){
+//			System.out.println(11111);
+//		}else{
+//			System.out.println(22222);
+//		}
 
 	}
 
@@ -183,7 +187,7 @@ public class PurPaymentRequestServiceImpl extends ServiceImpl<PurPaymentRequestM
 
 				PurOrder order = purOrderMapper.selectById(sourceId);
 				if (order != null) {
-					BigDecimal totalAmount = order.getTotalAmount() == null ? BigDecimal.ZERO : order.getTotalAmount();//订单金额
+					BigDecimal totalAmount = order.getDiscountAmount() == null ? BigDecimal.ZERO : order.getDiscountAmount();//订单金额
 					BigDecimal totalAmountUsed = order.getTotalAmountUsed() == null ? BigDecimal.ZERO : order.getTotalAmountUsed();//已使用金额
 
 					totalAmountUsed = applyMoney.add(totalAmountUsed);

+ 3 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurAdvancePaymentPage.java

@@ -127,6 +127,9 @@ public class PurAdvancePaymentPage {
 	@ApiModelProperty(value = "预付款比例")
     private java.math.BigDecimal prepaymentRatio;
 
+	@ApiModelProperty(value = "已付款金额(付款单参照)")
+	private java.math.BigDecimal payMoney;
+
 	@ExcelCollection(name="采购预付款-子表")
 	@ApiModelProperty(value = "采购预付款-子表")
 	private List<PurAdvancePaymentDetails> purAdvancePaymentDetailsList;

+ 3 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurCommissionRequestPage.java

@@ -125,6 +125,9 @@ public class PurCommissionRequestPage {
 	@Excel(name = "申请金额(approve money)", width = 15)
 	@ApiModelProperty(value = "申请金额(approve money)")
     private java.math.BigDecimal approveMoney;
+	@Excel(name = "已付款金额(付款单参照)", width = 15)
+	@ApiModelProperty(value = "已付款金额(付款单参照)")
+	private java.math.BigDecimal payMoney;
 
 	private String sourceCode;
 

+ 3 - 0
srm-module-code/src/main/java/org/jeecg/modules/purCode/vo/PurPaymentRequestPage.java

@@ -118,6 +118,9 @@ public class PurPaymentRequestPage {
 	@ApiModelProperty(value = "申请金额(approve money)")
     private java.math.BigDecimal approveMoney;
 
+	@Excel(name = "已付款金额(付款单参照)", width = 15)
+	@ApiModelProperty(value = "已付款金额(付款单参照)")
+	private java.math.BigDecimal payMoney;
 	//来源
 	private String sourceCode;
 

+ 4 - 4
srm-module-code/src/main/java/org/jeecg/modules/saleCode/controller/SaleDeliveryController.java

@@ -853,8 +853,8 @@ public class SaleDeliveryController {
 
                     SaleOrderProduct saleOrderProduct = saleOrderProductList.stream().filter(e -> e.getId().equals(o.getSourceId())).findFirst().orElse(null);
                     if (saleOrderProduct != null) {
-                        if (oConvertUtils.isNotEmpty(saleOrderProduct.getDiscount()) && saleOrderProduct.getDiscount().intValue() != 0) {
-                            o.setDiscountText(saleOrderProduct.getDiscount().intValue() + "%");
+                        if (oConvertUtils.isNotEmpty(saleOrderProduct.getDiscount()) && saleOrderProduct.getDiscount().doubleValue() != 0.0) {
+                            o.setDiscountText(saleOrderProduct.getDiscount().doubleValue() + "%");
                         }
                     }
                 }
@@ -1000,8 +1000,8 @@ public class SaleDeliveryController {
 
                     SaleOrderProduct saleOrderProduct = saleOrderProductList.stream().filter(e -> e.getId().equals(o.getSourceId())).findFirst().orElse(null);
                     if (saleOrderProduct != null) {
-                        if (oConvertUtils.isNotEmpty(saleOrderProduct.getDiscount()) && saleOrderProduct.getDiscount().intValue() != 0) {
-                            o.setDiscountText(saleOrderProduct.getDiscount().intValue() + "%");
+                        if (oConvertUtils.isNotEmpty(saleOrderProduct.getDiscount()) && saleOrderProduct.getDiscount().doubleValue() != 0.0) {
+                            o.setDiscountText(saleOrderProduct.getDiscount().doubleValue() + "%");
                         }
                     }
                 }

+ 35 - 6
srm-module-code/src/main/java/org/jeecg/modules/saleCode/controller/SaleInvoiceController.java

@@ -726,12 +726,41 @@ public class SaleInvoiceController {
         // Step.3 组装pageList
         List<SaleInvoicePage> pageList = new ArrayList<SaleInvoicePage>();
         for (SaleInvoice main : saleInvoiceList) {
+
+            main.setCreateBy(null);
+            main.setSysOrgCode(null);
+            main.setNotes(null);
+
             SaleInvoicePage vo = new SaleInvoicePage();
             BeanUtils.copyProperties(main, vo);
             List<SaleInvoiceShip> saleInvoiceShipList = saleInvoiceShipService.selectByMainId(main.getId());
-            vo.setSaleInvoiceShipList(saleInvoiceShipList);
-            List<SaleInvoiceProduct> saleInvoiceProductList = saleInvoiceProductService.selectByMainId(main.getId());
-            vo.setSaleInvoiceProductList(saleInvoiceProductList);
+            List<String> shipNames = saleInvoiceShipList.stream()
+                    .map(SaleInvoiceShip::getShipName)
+                    .collect(Collectors.toList());
+            if(shipNames.size() > 0){
+
+                String result = String.join(",", shipNames);
+                vo.setNotes(result);
+
+            }
+            String sourceCode = main.getSourceCode();
+            if(StringUtils.isNotBlank(sourceCode)){
+                SaleDelivery saleDelivery = saleDeliveryService.getByBillCode(sourceCode);
+                if(saleDelivery !=null && StringUtils.isNotBlank(saleDelivery.getSourceCode())){
+                    SaleOrder saleOrder = saleOrderService.getByBillCode(saleDelivery.getSourceCode());
+
+                    if(saleOrder !=null){
+                        vo.setCreateBy(saleOrder.getCreateBy());
+                        vo.setSysOrgCode(saleOrder.getSysOrgCode());
+                    }
+                }
+
+            }
+
+
+//            vo.setSaleInvoiceShipList(saleInvoiceShipList);
+//            List<SaleInvoiceProduct> saleInvoiceProductList = saleInvoiceProductService.selectByMainId(main.getId());
+//            vo.setSaleInvoiceProductList(saleInvoiceProductList);
             pageList.add(vo);
         }
 
@@ -943,7 +972,7 @@ public class SaleInvoiceController {
                                 SaleQuotationProduct saleQuotationProduct = saleQuotationProductList.stream().filter(e -> e.getId().equals(saleOrderProduct.getSourceId())).findFirst().orElse(null);
 
                                 if (saleQuotationProduct !=null && oConvertUtils.isNotEmpty(saleQuotationProduct.getDiscount())) {
-                                    o.setDiscountText(saleQuotationProduct.getDiscount().intValue() + "%");
+                                    o.setDiscountText(saleQuotationProduct.getDiscount().doubleValue() + "%");
                                 }
                                 if (saleQuotationProduct !=null && oConvertUtils.isNotEmpty(saleQuotationProduct.getSalePrice())) {
 
@@ -966,7 +995,7 @@ public class SaleInvoiceController {
                     saleInvoice.setInvoiceMoney(invoiceMoney.setScale(2));
 
                     if (oConvertUtils.isNotEmpty(saleOrder.getDoubleDiscount())) {
-                        saleInvoice.setDiscountText(saleOrder.getDoubleDiscount().intValue() + "%");
+                        saleInvoice.setDiscountText(saleOrder.getDoubleDiscount().doubleValue() + "%");
                     }
 
 
@@ -1192,7 +1221,7 @@ public class SaleInvoiceController {
                                 SaleQuotationProduct saleQuotationProduct = saleQuotationProductList.stream().filter(e -> e.getId().equals(saleOrderProduct.getSourceId())).findFirst().orElse(null);
 
                                 if (saleQuotationProduct !=null && oConvertUtils.isNotEmpty(saleQuotationProduct.getDiscount())) {
-                                    o.setDiscountText(saleQuotationProduct.getDiscount().intValue() + "%");
+                                    o.setDiscountText(saleQuotationProduct.getDiscount().doubleValue() + "%");
                                 }
                                 if (saleQuotationProduct !=null && oConvertUtils.isNotEmpty(saleQuotationProduct.getSalePrice())) {
 

+ 17 - 3
srm-module-code/src/main/java/org/jeecg/modules/saleCode/controller/SaleOrderController.java

@@ -930,6 +930,20 @@ public class SaleOrderController {
         return Result.OK(saleOrderProductList);
     }
 
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "销售订单子表 - 产品明细通过主表ID查询")
+    @ApiOperation(value = "销售订单子表 - 产品明细主表ID查询", notes = "销售订单子表 - 产品明细-通主表ID查询")
+    @GetMapping(value = "/querySaleOrderProductByMainIdTest")
+    public List<SaleOrderProduct> querySaleOrderProductByMainIdTest(@RequestParam(name = "id", required = true) String id) {
+        List<SaleOrderProduct> saleOrderProductList = saleOrderProductService.selectByMainId(id);
+        return saleOrderProductList;
+    }
+
     /**
      * 导出excel
      *
@@ -1106,8 +1120,8 @@ public class SaleOrderController {
                     if (o.getDeliveryTime() != null) {
                         o.setDeliverDateText(DateUtils.date2Str(o.getDeliveryTime(), DateUtils.date_sdf.get()));
                     }
-                    if (oConvertUtils.isNotEmpty(o.getDiscount()) && o.getDiscount().intValue() != 0) {
-                        o.setDiscountText(o.getDiscount().intValue() + "%");
+                    if (oConvertUtils.isNotEmpty(o.getDiscount()) && o.getDiscount().doubleValue() != 0) {
+                        o.setDiscountText(o.getDiscount().doubleValue() + "%");
                     }
                     BaseProductArchive findProduct = productArchiveList.stream().filter(e -> e.getId().equals(o.getProductId())).findFirst().orElse(null);
                     if (findProduct != null) {
@@ -1179,7 +1193,7 @@ public class SaleOrderController {
                 //
                 saleOrder.setBillDateText(DateUtils.date2Str(saleOrder.getBillDate(), DateUtils.date_sdf.get()));
                 if (oConvertUtils.isNotEmpty(saleOrder.getDoubleDiscount())) {
-                    saleOrder.setDiscountText(saleOrder.getDoubleDiscount().intValue() + "%");
+                    saleOrder.setDiscountText(saleOrder.getDoubleDiscount().doubleValue() + "%");
                     saleOrder.setDiscountMoney(orderMoney.subtract(saleOrder.getConvertedAmount()).setScale(2));
                 }
 

+ 2 - 2
srm-module-code/src/main/java/org/jeecg/modules/saleCode/controller/SaleQuotationController.java

@@ -680,8 +680,8 @@ public class SaleQuotationController {
                     if (findProduct != null){
                         o.setUnit(findProduct.getMeasurementUnit());
                     }
-                    if (o.getDiscount() != null && o.getDiscount().intValue() != 0){
-                        o.setDiscountText(String.valueOf(o.getDiscount())+"%");
+                    if (o.getDiscount() != null && o.getDiscount().doubleValue() != 0.0){
+                        o.setDiscountText(o.getDiscount().doubleValue()+"%");
                     }
 
                     BigDecimal dic = o.getDiscount() ==null?BigDecimal.ZERO:o.getDiscount();

+ 55 - 44
srm-module-code/src/main/java/org/jeecg/modules/saleCode/vo/SaleInvoicePage.java

@@ -31,10 +31,6 @@ public class SaleInvoicePage {
 	/**主键id*/
 	@ApiModelProperty(value = "主键id")
     private String id;
-	/**创建人*/
-	@ApiModelProperty(value = "创建人")
-    private String createBy;
-    private String sysOrgCode;
 	//关闭原因
 	private String closeReason;
 
@@ -79,7 +75,7 @@ public class SaleInvoicePage {
 	@ApiModelProperty(value = "项目(project)")
     private String project;
 	/**项目名称*/
-	@Excel(name = "项目名称", width = 15)
+	@Excel(name = "项目名称", width = 18)
 	@ApiModelProperty(value = "项目名称")
     private String projectName;
 	/**客户(customer)*/
@@ -87,105 +83,120 @@ public class SaleInvoicePage {
 	@ApiModelProperty(value = "客户(customer)")
     private String customer;
 	/**客户名称*/
-	@Excel(name = "客户名称", width = 15)
+	@Excel(name = "客户名称", width = 30)
 	@ApiModelProperty(value = "客户名称")
     private String customerName;
+
+	/**备注(notes)*/
+	@Excel(name = "船名", width = 25)//此处用于导出时 临时放置船名
+	@ApiModelProperty(value = "备注(notes)")
+	private String notes;
+
+	/**币种(currency)*/
+	@Excel(name = "币种(currency)", width = 15)
+	@ApiModelProperty(value = "币种(currency)")
+	private String currency;
+	/**价税合计(tax money)*/
+	@Excel(name = "价税合计(tax money)", width = 20)
+	@ApiModelProperty(value = "价税合计(tax money)")
+	private BigDecimal taxMoney;
+
+	/**F号(F number)*/
+	@Excel(name = "F号(F number)", width = 20)
+	@ApiModelProperty(value = "F号(F number)")
+	private String fnumber;
+	/**客户订单号(customer order number)*/
+	@Excel(name = "客户订单号(customer order number)", width = 25)
+	@ApiModelProperty(value = "客户订单号(customer order number)")
+	private String orderNumber;
+
 	/**业务类型(busyness type)*/
 	@Excel(name = "业务类型(busyness type)", width = 15)
 	@ApiModelProperty(value = "业务类型(busyness type)")
     private String busynessType;
+
+	/**创建人*/
+	@ApiModelProperty(value = "创建人")
+	@Excel(name = "制单人", width = 25)//此处用于导出时 临时放置制单人(销售订单的创建人)
+	private String createBy;
+	@Excel(name = "部门", width = 15,dictTable = "sys_depart", dicCode = "org_code", dicText = "depart_name")
+	private String sysOrgCode;
+
+
 	/**购方税号(buyer's tax number)*/
-	@Excel(name = "购方税号(buyer's tax number)", width = 15)
+//	@Excel(name = "购方税号(buyer's tax number)", width = 15)
 	@ApiModelProperty(value = "购方税号(buyer's tax number)")
     private String buyerTaxNumber;
 	/**购方地址(buyer's address)*/
-	@Excel(name = "购方地址(buyer's address)", width = 15)
+//	@Excel(name = "购方地址(buyer's address)", width = 15)
 	@ApiModelProperty(value = "购方地址(buyer's address)")
     private String buyerAddress;
 	/**购方电话(buyer's telphone)*/
-	@Excel(name = "购方电话(buyer's telphone)", width = 15)
+//	@Excel(name = "购方电话(buyer's telphone)", width = 15)
 	@ApiModelProperty(value = "购方电话(buyer's telphone)")
     private String buyerTelphone;
 	/**购方银行(buyer's bank)*/
-	@Excel(name = "购方银行(buyer's bank)", width = 15)
+//	@Excel(name = "购方银行(buyer's bank)", width = 15)
 	@ApiModelProperty(value = "购方银行(buyer's bank)")
     private String buyerBank;
 	/**购方银行账户(buyer's bank account)*/
-	@Excel(name = "购方银行账户(buyer's bank account)", width = 15)
+//	@Excel(name = "购方银行账户(buyer's bank account)", width = 15)
 	@ApiModelProperty(value = "购方银行账户(buyer's bank account)")
     private String buyerAccount;
 	/**开票抬头(Invoice header)*/
-	@Excel(name = "开票抬头(Invoice header)", width = 15)
+//	@Excel(name = "开票抬头(Invoice header)", width = 15)
 	@ApiModelProperty(value = "开票抬头(Invoice header)")
     private String invoiceHeader;
 	/**开票地址(invoice address)*/
-	@Excel(name = "开票地址(invoice address)", width = 15)
+//	@Excel(name = "开票地址(invoice address)", width = 15)
 	@ApiModelProperty(value = "开票地址(invoice address)")
     private String invoiceAddress;
 	/**销方(seller)*/
 	@ApiModelProperty(value = "销方(seller)")
     private String seller;
 	/**销方(seller)*/
-	@Excel(name = "销方(seller)", width = 15)
+//	@Excel(name = "销方(seller)", width = 15)
 	@ApiModelProperty(value = "销方(seller)")
     private String sellerName;
 	/**销方税号(seller's tax number)*/
-	@Excel(name = "销方税号(seller's tax number)", width = 15)
+//	@Excel(name = "销方税号(seller's tax number)", width = 15)
 	@ApiModelProperty(value = "销方税号(seller's tax number)")
     private String sellerTaxNumber;
 	/**销方地址(seller's address)*/
-	@Excel(name = "销方地址(seller's address)", width = 15)
+//	@Excel(name = "销方地址(seller's address)", width = 15)
 	@ApiModelProperty(value = "销方地址(seller's address)")
     private String sellerAddress;
 	/**销方电话(seller's telphone)*/
-	@Excel(name = "销方电话(seller's telphone)", width = 15)
+//	@Excel(name = "销方电话(seller's telphone)", width = 15)
 	@ApiModelProperty(value = "销方电话(seller's telphone)")
     private String sellerTelphone;
 	/**销方银行(seller's bank)*/
-	@Excel(name = "销方银行(seller's bank)", width = 15)
+//	@Excel(name = "销方银行(seller's bank)", width = 15)
 	@ApiModelProperty(value = "销方银行(seller's bank)")
     private String sellerBank;
 	/**销方银行账户(seller's bank account)*/
-	@Excel(name = "销方银行账户(seller's bank account)", width = 15)
+//	@Excel(name = "销方银行账户(seller's bank account)", width = 15)
 	@ApiModelProperty(value = "销方银行账户(seller's bank account)")
     private String sellerBankAccount;
-	/**F号(F number)*/
-	@Excel(name = "F号(F number)", width = 15)
-	@ApiModelProperty(value = "F号(F number)")
-    private String fnumber;
-	/**备注(notes)*/
-	@Excel(name = "备注(notes)", width = 15)
-	@ApiModelProperty(value = "备注(notes)")
-    private String notes;
+
 	/**来源*/
-	@Excel(name = "来源", width = 15)
+//	@Excel(name = "来源", width = 15)
 	@ApiModelProperty(value = "来源")
     private String sourceCode;
 	/**来源2*/
-	@Excel(name = "来源2", width = 15)
+//	@Excel(name = "来源2", width = 15)
 	@ApiModelProperty(value = "来源2")
     private String sourceCode2;
-	/**客户订单号(customer order number)*/
-	@Excel(name = "客户订单号(customer order number)", width = 15)
-	@ApiModelProperty(value = "客户订单号(customer order number)")
-    private String orderNumber;
-	/**价税合计(tax money)*/
-	@Excel(name = "价税合计(tax money)", width = 15)
-	@ApiModelProperty(value = "价税合计(tax money)")
-    private BigDecimal taxMoney;
+
 	/**盖章发票(Stamp invoice)*/
-	@Excel(name = "盖章发票(Stamp invoice)", width = 15)
+//	@Excel(name = "盖章发票(Stamp invoice)", width = 15)
 	@ApiModelProperty(value = "盖章发票(Stamp invoice)")
     private String stampInvoice;
-	/**币种(currency)*/
-	@Excel(name = "币种(currency)", width = 15)
-	@ApiModelProperty(value = "币种(currency)")
-	private String currency;
 
-	@ExcelCollection(name="销售发票子表 - 船明细")
+//	@ExcelCollection(name="销售发票子表 - 船明细")
 	@ApiModelProperty(value = "销售发票子表 - 船明细")
 	private List<SaleInvoiceShip> saleInvoiceShipList;
-	@ExcelCollection(name="销售发票子表 - 产品明细")
+//	@ExcelCollection(name="销售发票子表 - 产品明细")
 	@ApiModelProperty(value = "销售发票子表 - 产品明细")
 	private List<SaleInvoiceProduct> saleInvoiceProductList;