Bläddra i källkod

aps-作业报工事务化

sucheng 1 år sedan
förälder
incheckning
345a5a3464

+ 6 - 4
bs-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java

@@ -1,9 +1,6 @@
 package com.rongwei.safecommon.utils;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 public class SaveConstans {
 
@@ -699,4 +696,9 @@ public class SaveConstans {
          */
         public static final String WAITING = "备料中";
     }
+
+    /**
+     * 初始化月份代号
+     */
+    public static final List<String> MONTH_CODE_LIST = Arrays.asList("1","2","3","4","5","6","7","8","9","X","Y","Z");
 }

+ 12 - 2
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsReportRecordsDao.java

@@ -5,6 +5,7 @@ import com.rongwei.bsentity.domain.ApsCheckParameterDo;
 import com.rongwei.bsentity.domain.ApsParameterDo;
 import com.rongwei.bsentity.domain.ApsReportRecordsDo;
 import com.rongwei.bsentity.vo.OrganizationCodeAndDeviceCodeVo;
+import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
@@ -34,8 +35,17 @@ public interface ApsReportRecordsDao extends BaseMapper<ApsReportRecordsDo> {
     @Select("select acp.ID AS 'id',acp.CKECKPARAMETER AS 'checkparameter' from aps_production_processes app LEFT JOIN aps_check_parameter acp ON app.ID = acp.MAINID AND acp.DELETED = 0 where app.PRODUCTPROCESSNAME = #{process}")
     List<ApsCheckParameterDo> selectApsCheckParameterByProcess(@Param("process") String process);
 
-//    @Select("select aci.EQUIPMENTCODE AS 'deviceCode',so.ROPTION AS 'organizationCode',aci.WAITREPORTID AS 'waitReportId' from asp_check_items aci LEFT JOIN sys_organization so ON aci.USEDEPTID = so.ID AND so.DELETED = 0 where aci.ID = #{processdeviceid} limit 1")
-//    OrganizationCodeAndDeviceCodeVo selectOrganizationCodeAndDeviceCode(@Param("processdeviceid") String processdeviceid);
+    @Update("update aps_process_operation set REPORTROLL = REPORTROLL+1 where ID = #{id}")
+    void updateProcessReportRoll(@Param("id") String id);
+
+    @Update("update asp_check_items set WAITREPORTID = null where ID = #{processdeviceid}")
+    void updateDeviceWorkId(@Param("processdeviceid") String processdeviceid);
+
+    @Delete("DELETE from aps_report_output where MAINID = #{id}")
+    void deleteOutputmaterialbyMainId(@Param("id") String id);
+
+    @Select("select aci.EQUIPMENTCODE AS 'deviceCode',so.ROPTION AS 'organizationCode',aci.WAITREPORTID AS 'waitReportId',aci.OWNEDFACTORY AS 'ownedFactory' from asp_check_items aci LEFT JOIN sys_organization so ON aci.USEDEPTID = so.ID AND so.DELETED = 0 where aci.ID = #{processdeviceid} limit 1")
+    OrganizationCodeAndDeviceCodeVo selectOrganizationCodeAndDeviceCode(@Param("processdeviceid") String processdeviceid);
 }
 
 

+ 3 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsReportRecordsService.java

@@ -2,6 +2,7 @@ package com.rongwei.bscommon.sys.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.rongwei.bsentity.domain.ApsReportRecordsDo;
+import com.rongwei.bsentity.vo.SaveReportReq;
 import com.rongwei.bsentity.vo.StartRePortReq;
 import com.rongwei.rwcommon.base.R;
 
@@ -15,4 +16,6 @@ public interface ApsReportRecordsService extends IService<ApsReportRecordsDo> {
     R cancelRecord(Map<String, String> req);
 
     R startReport(StartRePortReq req);
+
+    R saveReport(SaveReportReq req);
 }

+ 4 - 2
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProcessOperationProcessEquServiceImpl.java

@@ -169,8 +169,10 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         ApsProcessOperationDo processOperationDo = apsProcessOperationService.getById(processId);
         //已开工卷数
         Integer startingroll = processOperationDo.getStartingroll();
+        //计划加工卷数
+        Integer planprocessrall = processOperationDo.getPlanprocessrall();
         //未完工卷数
-        Integer unfinishroll = processOperationDo.getUnfinishroll();
+        Integer unfinishroll = planprocessrall - startingroll;
         //计算作业状态
         /**
          * 如果已开工卷数=0,则=待开工;
@@ -185,7 +187,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         if (startingroll > 0 && apsProcessOperationDo.getClosestatus().equals("未完工")) {
             apsProcessOperationDo.setWorkstatus("加工中");
         }
-        if (unfinishroll == 0 && apsProcessOperationDo.getClosestatus().equals("已完工")) {
+        if (unfinishroll <= 0 && apsProcessOperationDo.getClosestatus().equals("已完工")) {
             apsProcessOperationDo.setWorkstatus("已完工");
         }
 

+ 217 - 5
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsReportRecordsServiceImpl.java

@@ -8,14 +8,14 @@ import com.rongwei.bscommon.sys.dao.*;
 import com.rongwei.bscommon.sys.service.*;
 import com.rongwei.bsentity.domain.*;
 
-import com.rongwei.bsentity.vo.CommonUpdateProductionStatusReq;
-import com.rongwei.bsentity.vo.InsertMyReportOutputReq;
-import com.rongwei.bsentity.vo.OrganizationCodeAndDeviceCodeVo;
-import com.rongwei.bsentity.vo.StartRePortReq;
+import com.rongwei.bsentity.vo.*;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.utils.SecurityUtil;
+import com.rongwei.rwcommonentity.commonservers.vo.SysSerialVo;
+import com.rongwei.safecommon.fegin.CXAdminFeginClient;
 import com.rongwei.safecommon.utils.CXCommonUtils;
+import com.rongwei.safecommon.utils.SaveConstans;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -60,6 +60,8 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
     private ApsAlloyCompositionService apsAlloyCompositionService;
     @Autowired
     private ApsReportBlankCompentService apsReportBlankCompentService;
+    @Resource
+    private CXAdminFeginClient cxAdminFeginClient;
 
     @Override
     @Transactional
@@ -207,6 +209,7 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         apsReportRecordsDo.setReportworktime(DateUtil.date());
         //报工状态
         apsReportRecordsDo.setReportworkstatus("已开工");
+        apsReportRecordsDo.setCheckstatus("待检验");
 
         //保存主表
         this.save(apsReportRecordsDo);
@@ -311,7 +314,7 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             } else {//查询国标
                 List<ApsAlloyDo> collect1 = apsAlloyDoList.stream().filter(item -> ObjectUtil.isEmpty(item.getCustomerid())).collect(Collectors.toList());
                 if (ObjectUtil.isNotEmpty(collect1)) {
-                    alloyId = collect.get(0).getId();
+                    alloyId = collect1.get(0).getId();
                 }
             }
         }
@@ -348,6 +351,215 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         return R.ok(apsReportRecordsDo);
     }
 
+    @Override
+    @Transactional
+    public R saveReport(SaveReportReq req) {
+        //报工主表
+        ApsReportRecordsDo apsReportRecordsDo = req.getApsReportRecordsDo();
+        //报工输出物料
+        List<ApsReportOutputDo> apsReportOutputDoList = req.getApsReportOutputDoList();
+        //报工加工参数
+        List<ApsReportMachiningDo> apsReportMachiningDoList = req.getApsReportMachiningDoList();
+
+        //没有新增,只会更新
+        apsReportRecordsDo.setCheckstatus("待检验");
+
+        if (ObjectUtil.isNotEmpty(apsReportOutputDoList)) {
+            apsReportOutputService.updateBatchById(apsReportOutputDoList);
+        }
+        if (ObjectUtil.isNotEmpty(apsReportMachiningDoList)) {
+            apsReportMachiningService.updateBatchById(apsReportMachiningDoList);
+        }
+
+        //查询当前的报工记录信息
+        ApsReportRecordsDo nowReportRecordsDo = this.getById(apsReportRecordsDo.getId());
+
+        //查询对应的工序作业信息
+        ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(nowReportRecordsDo.getProcessoperationid());
+        //查询对应的工序作业明细信息
+        ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = apsProcessOperationProcessEquService.getById(nowReportRecordsDo.getProcessequid());
+        //查询对应的坯料计划信息
+        ApsBlankOrderDo apsBlankOrderDo = apsBlankOrderService.getById(apsProcessOperationDo.getBlankid());
+        //查询对应的订单评审信息
+        ApsProductionOrderDo apsProductionOrderDo = apsProductionOrderService.getById(apsBlankOrderDo.getProductionorderid());
+
+        //=============更新作业明细信息=============
+        //更新待报工记录ID、已报工卷数
+        //已报工卷数
+        Integer reportroll = apsProcessOperationProcessEquDo.getReportroll();
+        ApsProcessOperationProcessEquDo needUpdateProcessOperationProcessEquDo = new ApsProcessOperationProcessEquDo();
+        needUpdateProcessOperationProcessEquDo.setId(apsProcessOperationProcessEquDo.getId());
+        //已报工卷数+1
+        needUpdateProcessOperationProcessEquDo.setReportroll(reportroll + 1);
+        /**
+         * 更新作业明细的完工状态
+         * 如果未完工卷数=0,或者工序作业已完工状态=已完工,则=已完工
+         * 如果未完工卷数>0,并且工序作业已完工状态=未完工,则=未完工
+         */
+        //计划加工卷数
+        Integer planprocessrall = apsProcessOperationProcessEquDo.getPlanprocessrall();
+        //未完工卷数=计划加工卷数-已报工卷数
+        int unfinishroll = planprocessrall - needUpdateProcessOperationProcessEquDo.getReportroll();
+        if(unfinishroll <= 0 || apsProcessOperationDo.getClosestatus().equals("已完工")){
+            needUpdateProcessOperationProcessEquDo.setClosestatus("已完工");
+        }
+        if(unfinishroll > 0 && apsProcessOperationDo.getClosestatus().equals("未完工")){
+            needUpdateProcessOperationProcessEquDo.setClosestatus("未完工");
+        }
+
+        //带报工记录ID清空
+        needUpdateProcessOperationProcessEquDo.setWaitreportid("");
+        if (apsProcessOperationProcessEquDo.getClosestatus().equals("未完工") && apsProcessOperationProcessEquDo.getStartingroll() > 0) {
+            needUpdateProcessOperationProcessEquDo.setWorkstatus("加工中");
+        }
+        apsProcessOperationProcessEquService.updateById(needUpdateProcessOperationProcessEquDo);
+
+        //==============更新工序作业信息==============
+        this.baseMapper.updateProcessReportRoll(apsProcessOperationDo.getId());
+
+        //=============更新设备的报工记录ID===========
+        this.baseMapper.updateDeviceWorkId(apsProcessOperationProcessEquDo.getProcessdeviceid());
+
+        //============保存(报工)时,生成炉号和批次号=============
+        //获取设备/炉 的炉号(每月、每个设备/炉 更新)
+        String heatNumber;//初始化炉号
+        //调用通用接口生成炉号
+        SysSerialVo vo = new SysSerialVo();
+        vo.setModulecode("aps_report_output_heat_" + apsProcessOperationProcessEquDo.getProcessdeviceid());
+        vo.setRuleTemplateStr("@{serialNumber:#000}");
+        vo.setResetrule("date:yyyyMM");
+        vo.setIfautomaticreset("y");
+        vo.setInitValue(0L);
+        Map<String, Object> codeData = cxAdminFeginClient.getSerialNumberCode(vo).getData();
+        heatNumber = codeData.get("code").toString();
+
+        apsReportRecordsDo.setHeatnumber(heatNumber);
+        //报工状态
+        apsReportRecordsDo.setReportworkstatus("已报工");
+        this.updateById(apsReportRecordsDo);
+
+        //物理删除原来的报工记录输出物料
+        this.baseMapper.deleteOutputmaterialbyMainId(apsReportRecordsDo.getId());
+
+        OrganizationCodeAndDeviceCodeVo organizationCodeAndDeviceCodeVo = this.baseMapper.selectOrganizationCodeAndDeviceCode(apsProcessOperationProcessEquDo.getProcessdeviceid());
+        if (ObjectUtil.isEmpty(organizationCodeAndDeviceCodeVo)) {
+            return R.error("未找到对应的车间代号和设备代号");
+        }
+        InsertMyReportOutputReq insertMyReportOutputReq = new InsertMyReportOutputReq();
+        insertMyReportOutputReq.setMainId(apsReportRecordsDo.getId());
+        insertMyReportOutputReq.setProcessId(apsProcessOperationDo.getId());
+        insertMyReportOutputReq.setIfBlankProcess(apsProcessOperationDo.getIfblankprocess());
+        insertMyReportOutputReq.setDeviceId(apsProcessOperationProcessEquDo.getProcessdeviceid());
+        insertMyReportOutputReq.setMark(organizationCodeAndDeviceCodeVo.getOrganizationCode());
+        insertMyReportOutputReq.setYearCode((DateUtil.year(DateUtil.date()) % 100) + "");
+        insertMyReportOutputReq.setMonthCode(SaveConstans.MONTH_CODE_LIST.get(DateUtil.month(DateUtil.date())));
+        insertMyReportOutputReq.setEquipmentCode(organizationCodeAndDeviceCodeVo.getDeviceCode());
+        insertMyReportOutputReq.setHeatNumber(heatNumber);
+        insertMyReportOutputReq.setInputBatchNumber(apsReportRecordsDo.getBatchnumber());
+        insertMyReportOutputReq.setBlankType(apsBlankOrderDo.getBlanktype());
+
+        R r = apsReportOutputService.insertMyReportOutput(insertMyReportOutputReq);
+        if (!r.getCode().equals("200")) {
+            return R.error(r.getMsg());
+        }
+
+        //=================新增在制品库存=================
+        //查询报工记录对应的物料子表
+        List<ApsReportOutputDo> apsReportOutputDos = apsReportOutputService.list(new QueryWrapper<ApsReportOutputDo>().lambda().eq(ApsReportOutputDo::getMainid, apsReportRecordsDo.getId()));
+
+        if (ObjectUtil.isNotEmpty(apsReportOutputDos)) {
+            //如果主表的批次号不为空,查找 在制品库存中是否有此 批次号 的数据,有 复制并删除原数据,坯料批次号 等坯料数据不变,其余数据变更
+            if (ObjectUtil.isNotEmpty(apsReportRecordsDo.getBatchnumber())) {
+                ApsWorkInProgressInventoryDo apsWorkInProgressInventoryDo = apsWorkInProgressInventoryService.getOne(new QueryWrapper<ApsWorkInProgressInventoryDo>().lambda().eq(ApsWorkInProgressInventoryDo::getDeleted, "0").eq(ApsWorkInProgressInventoryDo::getBatchnumber, apsReportRecordsDo.getBatchnumber()));
+                //不为空,则删除数据(逻辑删除)
+                if(ObjectUtil.isNotEmpty(apsWorkInProgressInventoryDo)){
+                    apsWorkInProgressInventoryService.removeById(apsWorkInProgressInventoryDo.getId());
+                }
+                //增加或者复制在制品库存
+                addOrCopyWorkInProgress(apsReportOutputDos,
+                        apsWorkInProgressInventoryDo,
+                        apsProcessOperationProcessEquDo,
+                        apsProcessOperationDo,
+                        organizationCodeAndDeviceCodeVo,
+                        apsProductionOrderDo);
+            } else {
+                addOrCopyWorkInProgress(apsReportOutputDos,
+                        null,
+                        apsProcessOperationProcessEquDo,
+                        apsProcessOperationDo,
+                        organizationCodeAndDeviceCodeVo,
+                        apsProductionOrderDo);
+            }
+        }
+
+        //=========更新生产状态等=============
+        //更新生产状态
+        CommonUpdateProductionStatusReq req3 = new CommonUpdateProductionStatusReq();
+        req3.setProcessOperationEquId(apsProcessOperationProcessEquDo.getId());
+        R r2 = apsProcessOperationProcessEquService.updateProductionStatus(req3);
+        if (!r2.getCode().equals("200")) {
+            return R.error(r2.getMsg());
+        }
+
+        return R.ok();
+    }
+
+    private void addOrCopyWorkInProgress(List<ApsReportOutputDo> apsReportOutputDos,
+                                         ApsWorkInProgressInventoryDo apsWorkInProgressInventoryDo,
+                                         ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo,
+                                         ApsProcessOperationDo apsProcessOperationDo,
+                                         OrganizationCodeAndDeviceCodeVo organizationCodeAndDeviceCodeVo,
+                                         ApsProductionOrderDo apsProductionOrderDo) {
+        List<ApsWorkInProgressInventoryDo> needAddWorkInProgressInventoryList = new LinkedList<>();
+        for (ApsReportOutputDo apsReportOutputDo : apsReportOutputDos) {
+            ApsWorkInProgressInventoryDo workInProgressInventoryDo = new ApsWorkInProgressInventoryDo();
+            workInProgressInventoryDo.setId(SecurityUtil.getUUID());
+            //报工输出物料的批次号
+            workInProgressInventoryDo.setBlankbatchnumber(apsReportOutputDo.getOutputnumber());
+            //报工输出物料的主键ID
+            workInProgressInventoryDo.setBlankid(apsReportOutputDo.getId());
+            //报工输出物料的报工物料描述
+            workInProgressInventoryDo.setBlankname(apsReportOutputDo.getOutputmaterial());
+            if (ObjectUtil.isNotEmpty(apsWorkInProgressInventoryDo)) {
+                workInProgressInventoryDo.setBlankbatchnumber(apsWorkInProgressInventoryDo.getBlankbatchnumber());
+                workInProgressInventoryDo.setBlankid(apsWorkInProgressInventoryDo.getBlankid());
+                workInProgressInventoryDo.setBlankname(apsWorkInProgressInventoryDo.getBlankname());
+            }
+            //报工记录对应的作业明细ID
+            workInProgressInventoryDo.setProcessoperationequid(apsProcessOperationProcessEquDo.getId());
+            //报工记录对应的工序作业ID
+            workInProgressInventoryDo.setProcessoperationid(apsProcessOperationDo.getId());
+            //报工记录ID
+            workInProgressInventoryDo.setWorkreportrecordid(apsProcessOperationProcessEquDo.getWaitreportid());
+            //报工记录输出物料对应的工序作业输出物料的主键ID
+            workInProgressInventoryDo.setJoboutputmaterialid(apsReportOutputDo.getOutputid());
+            //报工记录输出物料的主键ID
+            workInProgressInventoryDo.setReportoutputmaterialid(apsReportOutputDo.getId());
+            //输出物料的批次号
+            workInProgressInventoryDo.setBatchnumber(apsReportOutputDo.getOutputnumber());
+            //报工记录输出物料的报工物料描述
+            workInProgressInventoryDo.setWorkinprocess(apsReportOutputDo.getOutputmaterial());
+            //报工记录的报工日期
+            workInProgressInventoryDo.setProductdate(DateUtil.date());
+            //报工记录对应工序作业的加工设备所属工厂名称
+            workInProgressInventoryDo.setProductfactory(organizationCodeAndDeviceCodeVo.getOwnedFactory());
+            //报工记录对应工序作业明细的加工车间
+            workInProgressInventoryDo.setProductworkshop(apsProcessOperationProcessEquDo.getProcessworkshop());
+            //报工记录对应工序作业明细的加工设备
+            workInProgressInventoryDo.setProductdevice(apsProcessOperationProcessEquDo.getProcessdevice());
+            //工序作业的客户名称
+            workInProgressInventoryDo.setCustomername(apsProductionOrderDo.getCustomname());
+            //报工记录对应工序作业的订单号
+            workInProgressInventoryDo.setOrdernumber(apsProductionOrderDo.getOrderno());
+            workInProgressInventoryDo.setWorkinprocessstatus("待检验");
+
+            needAddWorkInProgressInventoryList.add(workInProgressInventoryDo);
+        }
+        if (ObjectUtil.isNotEmpty(needAddWorkInProgressInventoryList)) {
+            apsWorkInProgressInventoryService.saveBatch(needAddWorkInProgressInventoryList);
+        }
+    }
+
 }
 
 

+ 5 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsReportRecordsDo.java

@@ -113,6 +113,11 @@ public class ApsReportRecordsDo extends BaseDo implements Serializable {
      */
     private String processequid;
 
+    /**
+     * 炉次/炉号
+     */
+    private String heatnumber;
+
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 }

+ 5 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsWorkInProgressInventoryDo.java

@@ -48,6 +48,11 @@ public class ApsWorkInProgressInventoryDo extends BaseDo implements Serializable
      */
     private String blankname;
 
+    /**
+     * 工序作业明细ID
+     */
+    private String processoperationequid;
+
     /**
      * 工序作业ID
      */

+ 2 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/OrganizationCodeAndDeviceCodeVo.java

@@ -14,4 +14,6 @@ public class OrganizationCodeAndDeviceCodeVo {
     private String deviceCode;
     //此设备带报工记录ID
     private String waitReportId;
+    //设备所属工厂
+    private String ownedFactory;
 }

+ 22 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/SaveReportReq.java

@@ -0,0 +1,22 @@
+package com.rongwei.bsentity.vo;
+
+import com.rongwei.bsentity.domain.ApsReportMachiningDo;
+import com.rongwei.bsentity.domain.ApsReportOutputDo;
+import com.rongwei.bsentity.domain.ApsReportRecordsDo;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author :sc
+ * @since :2024/5/10
+ */
+@Data
+public class SaveReportReq {
+    //报工记录主表
+    private ApsReportRecordsDo apsReportRecordsDo;
+    //报工记录物料子表
+    private List<ApsReportOutputDo> apsReportOutputDoList;
+    //报工记录加工参数子表
+    private List<ApsReportMachiningDo> apsReportMachiningDoList;
+}

+ 8 - 0
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsReportRecordController.java

@@ -2,6 +2,7 @@ package com.rongwei.bsserver.controller;
 
 
 import com.rongwei.bscommon.sys.service.ApsReportRecordsService;
+import com.rongwei.bsentity.vo.SaveReportReq;
 import com.rongwei.bsentity.vo.StartRePortReq;
 import com.rongwei.rwcommon.base.R;
 import lombok.extern.slf4j.Slf4j;
@@ -52,5 +53,12 @@ public class ApsReportRecordController {
         return apsReportRecordsService.startReport(req);
     }
 
+    /**
+     * 报工保存
+     */
+    @PostMapping("/saveReport")
+    public R saveReport(@RequestBody SaveReportReq req){
+        return apsReportRecordsService.saveReport(req);
+    }
 }