Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/BusinessOrderDongpinControl.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/BusinessOrderDongpinControl.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/BusinessOrderDongpinControl.java	(revision 37549)
@@ -4,9 +4,12 @@
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.TimeZone;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
@@ -20,6 +23,7 @@
 
 import com.alibaba.druid.util.StringUtils;
 import com.freshport.freight.common.constant.CommonEnum;
+import com.freshport.freight.common.constant.CommonInfo;
 import com.freshport.freight.common.entity.JsonModel;
 import com.freshport.freight.common.entity.TableData;
 import com.freshport.freight.common.exception.BaseException;
@@ -30,6 +34,7 @@
 import com.freshport.freight.customs.service.BgOrderService;
 import com.freshport.freight.customs.service.BusinessOrderService;
 import com.freshport.freight.customs.service.CustomsScheduleService;
+import com.freshport.freight.customs.service.JnQgcwConfirmResultService;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -63,6 +68,9 @@
     @Resource
     private CustomsScheduleService customsScheduleService;
 
+    @Resource
+    private JnQgcwConfirmResultService jnQgcwConfirmResultService;
+    
     private final SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
 
     /**
@@ -198,6 +206,8 @@
                 msg += v.toString();
             }
             log.error(currentUserId + "单证情况编辑(冻品列表存盘)updateDusinessdocumentList  进入数据..." + msg);
+            //查询是否已经复核确认
+            checkYwbhConfirm(sqdbhList);
             businessOrderService.saveBusinessDongpinListMain(sqdbhList, currentUserId, userName);
             model.setCode(CommonEnum.API_SUCCESS.getCode());
             model.setDes(CommonEnum.API_SUCCESS.getRes());
@@ -216,6 +226,17 @@
         return model;
     }
 
+    private void checkYwbhConfirm(List<BusinessOrderDongpinVo> sqdbhList) {
+        List<String> ywbhList = sqdbhList.stream().map(BusinessOrderDongpinVo::getYwbh).collect(Collectors.toList());
+        Map<String,Object> maps = new HashMap<String,Object>();
+        maps.put("ywbhList",ywbhList);
+        maps.put("type",CommonInfo.COMMON_YES);
+        String ywbhs =jnQgcwConfirmResultService.queryReadyConfirm(maps);
+        if(!CommonUtils.isEmpty(ywbhs)){
+            throw new BaseException("saveBusinessDongpinList","业务编号"+ywbhs+"已经复核确认，请先取消确认");
+        }
+    }
+
     /**
      * 刷新单证列表异常
      * refreshHddzException
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/BusinessOrderSeaControl.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/BusinessOrderSeaControl.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/BusinessOrderSeaControl.java	(revision 37549)
@@ -26,12 +26,14 @@
 import org.springframework.web.bind.annotation.RestController;
 
 import com.alibaba.druid.util.StringUtils;
+import com.alibaba.fastjson.JSONObject;
 import com.freshport.freight.common.constant.CommonEnum;
 import com.freshport.freight.common.entity.JsonModel;
 import com.freshport.freight.common.entity.TableData;
 import com.freshport.freight.common.exception.BaseException;
 import com.freshport.freight.common.util.CommonUtils;
 import com.freshport.freight.customs.entity.JnBgIcsHddzRelation;
+import com.freshport.freight.customs.entity.JnQgcwConfirmResult;
 import com.freshport.freight.customs.entity.YwBgSpxx;
 import com.freshport.freight.customs.entity.YwBgVo;
 import com.freshport.freight.customs.entity.vo.BusinessContainerVO;
@@ -43,6 +45,7 @@
 import com.freshport.freight.customs.service.BusinessOrderService;
 import com.freshport.freight.customs.service.JnBgIcsDelegateService;
 import com.freshport.freight.customs.service.JnBgIcsHddzRelationService;
+import com.freshport.freight.customs.service.JnQgcwConfirmResultService;
 import com.freshport.freight.customs.service.RedisService;
 import com.freshport.freight.customs.utils.CommonInfo;
 import com.freshport.freight.customs.utils.CustomsInfo;
@@ -86,6 +89,9 @@
     @Resource
     private JnBgIcsHddzRelationService jnBgIcsHddzRelationService;
 
+    @Resource
+    private JnQgcwConfirmResultService jnQgcwConfirmResultService;
+    
     private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
     private final SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
@@ -246,7 +252,8 @@
             }
             // 校验佳农流水号关系
             checkBusinessSerial(seaSaveVo);
-
+            //校验业务数据是否已经提交确认
+            checkYwbhConfirm(seaSaveVo.getYwbh());
             // 开始查询
             Map<String, String> map = businessOrderService.saveOrUpdateSeaBusinessOrder(seaSaveVo);
             model.setCode(CommonEnum.API_SUCCESS.getCode());
@@ -272,6 +279,18 @@
         return model;
     }
 
+    private void checkYwbhConfirm(String ywbh) {
+        if (!CommonUtils.isEmpty(ywbh)) {
+            Map<String,Object> maps = new HashMap<String,Object>();
+            maps.put("ywbh",ywbh);
+            maps.put("type",CommonInfo.COMMON_NO);
+            String ywbhs =jnQgcwConfirmResultService.queryReadyConfirm(maps);
+            if(!CommonUtils.isEmpty(ywbhs)){
+                throw new BaseException("saveOrUpdateSeaBusinessOrder","业务编号"+ywbhs+"已经复核确认，请先取消确认");
+            }
+        }
+    }
+
     /**    
      * checkBusinessSerial(校验佳农流水号关系) 
      * @param seaSaveVo void
@@ -467,6 +486,9 @@
                 order.setBusinessSerial(relation.getBusinessSerial());
                 order.setBusinessSerialName(relation.getBusinessSerial());
             }
+            // 根据业务编号查询复核确认状态
+           String confirmStatus = handlecheckConfirm(ywbh);
+           order.setConfirmStatus(confirmStatus);
             // 判断是否当前用户
             model.setCode(CommonEnum.API_SUCCESS.getCode());
             model.setDes(CommonEnum.API_SUCCESS.getRes());
@@ -494,6 +516,15 @@
         return model;
     }
 
+    private String handlecheckConfirm(String ywbh) {
+        String confirmStatus =CommonInfo.COMMON_NO;
+        JnQgcwConfirmResult result = jnQgcwConfirmResultService.queryConfirmStatusByYwbh(ywbh,CommonInfo.COMMON_NO);
+        if (!CommonUtils.isEmpty(result)) {
+            confirmStatus = CommonUtils.isEmpty(result.getConfirmStatus())?CommonInfo.COMMON_NO:result.getConfirmStatus();
+        }
+        return confirmStatus;
+    }
+
     /**
      * 海运单证拷贝接口
      * copyYwhddz
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/JnQgcwConfirmContorller.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/JnQgcwConfirmContorller.java	(revision 0)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/JnQgcwConfirmContorller.java	(revision 37549)
@@ -0,0 +1,161 @@
+package com.freshport.freight.customs.control;
+
+import java.net.URLDecoder;
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+import com.alibaba.fastjson.JSONObject;
+import com.freshport.freight.common.constant.CommonEnum;
+import com.freshport.freight.common.constant.CommonInfo;
+import com.freshport.freight.common.entity.JsonModel;
+import com.freshport.freight.common.exception.BaseException;
+import com.freshport.freight.common.util.CommonUtils;
+import com.freshport.freight.customs.entity.vo.JnQgcwConfirmResultVo;
+import com.freshport.freight.customs.entity.vo.TagItemVo;
+import com.freshport.freight.customs.service.JnQgcwConfirmResultService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+
+/**    
+ * 项目名称：ff-customs    
+ * 类名称：JnQgcwConfirmContorller    
+ * 类描述： 清关 船务驳船按角色进行确认    
+ * 创建人：Think    
+ * 创建时间：2024年3月21日 下午1:26:22    
+ * 修改人：Think    
+ * 修改时间：2024年3月21日 下午1:26:22    
+ * 修改备注：    
+ * @version     
+ */
+@RestController
+@Api(value = "按角色进行复核确认")
+@Slf4j
+public class JnQgcwConfirmContorller {
+
+    @Resource
+    private JnQgcwConfirmResultService  jnQgcwConfirmResultService;
+    
+    //清关也去进行选择数据及进行确认
+    //清关页面进行取消确认
+    /**
+     * icsDelegateRejectSave(清关船务复核动作)    
+     * @param rejectVO
+     * @return  
+     * @return JsonModel<Integer>  
+     * @Exception 异常对象    
+     * @author Think  
+     * @date 2024-03-21 13:31:08
+     */
+    @ApiOperation(value = "清关确认，取消确认", notes = "清关进行确认 取消确认")
+    @PostMapping("/v1/qgcwConfirm/confirmResult")
+    public JsonModel<Object> confirmResult(
+            @ApiParam(name = "清关确认", value = "清关确认") @RequestBody JnQgcwConfirmResultVo resultVo,
+            HttpServletRequest request) {
+        if(CommonUtils.isEmpty(resultVo)){
+            return JsonModel.errorForParams("参数不能为空");
+        }
+        if(CommonUtils.isEmpty(resultVo.getConfirmStatus())){
+            return JsonModel.errorForParams("确认状态不能为空");
+        }
+        try{
+            String userId = String.valueOf(request.getHeader("userId"));
+            String name = String.valueOf(request.getHeader("userName"));
+            name = URLDecoder.decode(name, "utf-8");
+            resultVo.setConfirmUser(userId);
+            resultVo.setConfirmUserName(name);
+            resultVo.setConfirmTime(new Date());
+            int rs =0;
+            if(CommonInfo.COMMON_NO.equals(resultVo.getConfirmStatus())){
+                 rs = jnQgcwConfirmResultService.confirmResult(resultVo);
+            }else{
+                 rs = jnQgcwConfirmResultService.cancleResult(resultVo);
+            }
+            return JsonModel.success(rs);
+        }catch(BaseException e){
+            e.printStackTrace();
+            log.error("confirmResult error", e);
+            return JsonModel.error(CommonEnum.API_ERROR.getCode(),e.getMessage());
+        }catch(Exception e ){
+            e.printStackTrace();
+            log.error("confirmResult error", e);
+            return JsonModel.error(CommonEnum.API_ERROR.getCode(),CommonEnum.API_ERROR.getRes());
+        }
+    }
+    /**
+     * unlockConfirmResult(报关解锁清关确认功能)    
+     * @param resultVo
+     * @param request
+     * @return JsonModel<Object>  
+     * @Exception 异常对象    
+     * @author Think  
+     * @date 2024-03-21 19:19:46
+     */
+    @ApiOperation(value = "报关申报后解锁功能", notes = "报关申报后解锁功能")
+    @PostMapping("/v1/qgcwConfirm/unlockConfirmResult")
+    public JsonModel<Object> unlockConfirmResult(
+            @ApiParam(name = "清关确认", value = "清关确认") @RequestBody JnQgcwConfirmResultVo resultVo,
+            HttpServletRequest request) {
+        if(CommonUtils.isEmpty(resultVo)){
+            return JsonModel.errorForParams("参数不能为空");
+        }
+        if(CommonUtils.isEmpty(resultVo.getType())){
+            return JsonModel.errorForParams("解锁类型不能为空");
+        }
+        try{
+            int rs  = jnQgcwConfirmResultService.unlockConfirmResult(resultVo);
+            return JsonModel.success(rs);
+        }catch(BaseException e){
+            e.printStackTrace();
+            log.error("confirmResult error", e);
+            return JsonModel.error(CommonEnum.API_ERROR.getCode(),e.getMessage());
+        }catch(Exception e ){
+            e.printStackTrace();
+            log.error("confirmResult error", e);
+            return JsonModel.error(CommonEnum.API_ERROR.getCode(),CommonEnum.API_ERROR.getRes());
+        }
+    }
+    /**
+     * queryOtherConfirmResultData(查询其他模块确认状态功能)    
+     * @param resultVo
+     * @param request
+     * @return JsonModel<Object>  
+     * @Exception 异常对象    
+     * @author Think  
+     * @date 2024-03-21 19:19:46
+     */
+    @ApiOperation(value = "查询其他模块确认状态功能", notes = "查询其他模块确认状态功能")
+    @GetMapping("/v1/qgcwConfirm/queryOtherConfirmResultData")
+    public JsonModel<Object> queryOtherConfirmResultData(@RequestParam("ywbh") String ywbh, @RequestParam("bgId") String bgId,
+            @RequestParam(name = "sendtype", required = false) String sendtype,
+            HttpServletRequest request) {
+        if(CommonUtils.isEmpty(ywbh) || CommonUtils.isEmpty(bgId)){
+            return JsonModel.errorForParams("参数不能为空");
+        }
+        try{
+            List<TagItemVo> tagItemList = jnQgcwConfirmResultService.queryOtherConfirmResultData(ywbh,bgId);
+            log.info(JSONObject.toJSONString(tagItemList));
+            return JsonModel.success(tagItemList);
+        }catch(BaseException e){
+            e.printStackTrace();
+            log.error("queryOtherConfirmResultData_error", e);
+            return JsonModel.error(CommonEnum.API_ERROR.getCode(),e.getMessage());
+        }catch(Exception e ){
+            e.printStackTrace();
+            log.error("queryOtherConfirmResultData_error", e);
+            return JsonModel.error(CommonEnum.API_ERROR.getCode(),CommonEnum.API_ERROR.getRes());
+        }
+    }
+}
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/YwHddzBcControl.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/YwHddzBcControl.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/YwHddzBcControl.java	(revision 37549)
@@ -1,6 +1,7 @@
 package com.freshport.freight.customs.control;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
@@ -288,5 +289,37 @@
 
         return model;
     }
+    @ApiOperation(value = "查询驳船是否已经报关", notes = "查询驳船是否已经报关")
+    @PostMapping("/v1/ywHddzBc/queryReadyBg")
+    public JsonModel<Object> queryReadyBg(HttpServletRequest request,
+            @RequestBody  @ApiParam(name = "业务编号", required = true) List<String> ywbhList) {
+        JsonModel<Object> model = new JsonModel<Object>();
 
+        if (CommonUtils.isEmpty(ywbhList)) {
+            return JsonModel.errorForParams(CommonEnum.PARAM_ERROR.getRes());
+        }
+        try {
+           List<String> list =ywHddzBcService.queryReadyBg(ywbhList);
+            // 删除驳船信息
+            model.setCode(CommonEnum.API_SUCCESS.getCode());
+            model.setDes(CommonEnum.API_SUCCESS.getRes());
+            if(list !=null){
+                String ywbhs = list.stream().collect(Collectors.joining(","));
+                model.setResult(ywbhs);
+            }
+        } catch (BaseException e) {// 自定义异常
+            log.error("queryReadyBg_error", e);
+
+            model.setCode(CommonEnum.API_ERROR.getCode());
+            model.setDes(e.getMessage());
+        } catch (Exception e) {// 其他异常
+            log.error("queryReadyBg_error", e);
+            model.setCode(CommonEnum.API_ERROR.getCode());
+            model.setDes(CommonEnum.API_ERROR.getRes());
+        }
+
+        return model;
+    }
+    
+
 }
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/docreview/JnBusMainController.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/docreview/JnBusMainController.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/docreview/JnBusMainController.java	(revision 37549)
@@ -25,7 +25,6 @@
 
 import javax.servlet.http.HttpServletRequest;
 import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
 import java.util.List;
 
 /**
@@ -146,9 +145,9 @@
      * @return
      */
     private JsonModel<Integer> updateEditInfo(String id, Integer editType, HttpServletRequest request) {
-        String userName =request.getHeader("userName");
+        String userName = request.getHeader("userName");
         userName = URLDecoder.decode(userName);
-        return JsonModel.success(jnBusDataService.updateBusMainEditInfo(id, editType,request.getHeader("userId"), userName));
+        return JsonModel.success(jnBusDataService.updateBusMainEditInfo(id, editType, request.getHeader("userId"), userName));
     }
 
     /**
@@ -396,4 +395,16 @@
     public JsonModel<Integer> claimBusMainData(@PathVariable("checkNo") String checkNo, HttpServletRequest request) {
         return JsonModel.success(jnBusDataService.claimBusMainData(checkNo));
     }
+
+    /**
+     * 更新数据
+     *
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "更新数据", notes = "更新数据")
+    @PostMapping("/v1/docreview/busMain/update")
+    public JsonModel<Integer> updatePort(@RequestBody JnBusMain jnBusMain, HttpServletRequest request) {
+        return JsonModel.success(jnBusDataService.updateBusMainData(jnBusMain));
+    }
 }
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/docreview/JnDataController.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/docreview/JnDataController.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/control/docreview/JnDataController.java	(revision 37549)
@@ -1,8 +1,7 @@
 package com.freshport.freight.customs.control.docreview;
 
 import com.freshport.freight.common.entity.JsonModel;
-import com.freshport.freight.customs.entity.docreview.JnDataDimension;
-import com.freshport.freight.customs.entity.docreview.JnDataDoc;
+import com.freshport.freight.customs.entity.docreview.*;
 import com.freshport.freight.customs.entity.vo.docreview.JnRulesSpecRule;
 import com.freshport.freight.customs.service.docreview.JnDataService;
 import com.freshport.freight.customs.service.docreviewrule.impl.SpecialCheckNewService;
@@ -36,6 +35,42 @@
      * @param request
      * @return
      */
+    @ApiOperation(value = "口岸列表", notes = "口岸列表")
+    @GetMapping("/v1/docreview/data/port")
+    public JsonModel<List<Map<String, Object>>> findPortList(HttpServletRequest request) {
+        return JsonModel.success(EPort.convertKeyValue());
+    }
+
+    /**
+     * 条件列表
+     *
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "条件列表", notes = "条件列表")
+    @GetMapping("/v1/docreview/data/rules/condition")
+    public JsonModel<List<Map<String, Object>>> findConditionList(HttpServletRequest request) {
+        return JsonModel.success(ERulesCondition.convertKeyValue());
+    }
+
+    /**
+     * 多判断类型
+     *
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "多判断类型", notes = "多判断类型")
+    @GetMapping("/v1/docreview/data/rules/multipleJudge")
+    public JsonModel<List<Map<String, Object>>> multipleJudge(HttpServletRequest request) {
+        return JsonModel.success(EMultipleJudge.convertKeyValue());
+    }
+
+    /**
+     * 新增审单文档配置主表
+     *
+     * @param request
+     * @return
+     */
     @ApiOperation(value = "维度信息", notes = "维度信息")
     @GetMapping("/v1/docreview/data/dimension")
     public JsonModel<List<JnDataDimension>> findDimensionList(HttpServletRequest request) {
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/JnDataTplineMapper.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/JnDataTplineMapper.java	(revision 0)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/JnDataTplineMapper.java	(revision 37549)
@@ -0,0 +1,42 @@
+package com.freshport.freight.customs.dao;
+
+import com.freshport.freight.customs.entity.docreview.JnDataTpline;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.ResultMap;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ * 运输路线配置Mapper
+ *
+ * @author fsd
+ * @email xxx
+ * @date Fri Mar 22 15:58:39 CST 2024
+ */
+public interface JnDataTplineMapper {
+    int deleteByPrimaryKey(@Param("id") String id);
+
+    int insert(JnDataTpline record);
+
+    int batchInsert(@Param("list") List<JnDataTpline> list);
+
+    int insertSelective(JnDataTpline record);
+
+    JnDataTpline selectByPrimaryKey(@Param("id") String id);
+
+    int updateByPrimaryKeySelective(JnDataTpline record);
+
+    int updateByPrimaryKey(JnDataTpline record);
+
+    /**
+     * 根据国家和口岸查询信息
+     *
+     * @param country 国家
+     * @param port    口岸
+     * @return
+     */
+    @ResultMap("BaseResultMap")
+    @Select("select * from jn_data_tpline where country = #{country} and port = #{port}")
+    List<JnDataTpline> findListByCountryAndPort(@Param("country") String country, @Param("port") String port);
+}
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/JnQgcwConfirmResultMapper.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/JnQgcwConfirmResultMapper.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/JnQgcwConfirmResultMapper.java	(revision 37549)
@@ -1,8 +1,15 @@
 package com.freshport.freight.customs.dao;
 
 import com.freshport.freight.customs.entity.JnQgcwConfirmResult;
+import com.freshport.freight.customs.entity.vo.JnQgcwConfirmResultStatusVo;
+import com.freshport.freight.customs.entity.vo.JnQgcwConfirmResultVo;
+
 import java.util.List;
+import java.util.Map;
 
+import org.apache.ibatis.annotations.Param;
+
+
 public interface JnQgcwConfirmResultMapper {
     int deleteByPrimaryKey(String id);
 
@@ -13,4 +20,12 @@
     List<JnQgcwConfirmResult> selectAll();
 
     int updateByPrimaryKey(JnQgcwConfirmResult record);
+
+    JnQgcwConfirmResult queryResultByYwbhType(JnQgcwConfirmResultVo resultVo);
+
+    List<String> queryReadyConfirm(Map<String, Object> maps);
+
+    List<JnQgcwConfirmResultStatusVo> queryQgConfirmStatusByYwbhType(@Param("ywbh") String ywbh);
+    
+    List<JnQgcwConfirmResultStatusVo> queryBcConfirmStatusByYwbhType(@Param("ywbh") String ywbh);
 }
\ No newline at end of file
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/JnRulesFieldInnerMapper.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/JnRulesFieldInnerMapper.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/JnRulesFieldInnerMapper.java	(revision 37549)
@@ -20,6 +20,8 @@
 
     int insert(JnRulesFieldInner record);
 
+    int batchInsert(@Param("list") List<JnRulesFieldInner> item);
+
     int insertSelective(JnRulesFieldInner record);
 
     JnRulesFieldInner selectByPrimaryKey(@Param("id") String id);
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/JnRulesFieldItemConditionMapper.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/JnRulesFieldItemConditionMapper.java	(revision 0)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/JnRulesFieldItemConditionMapper.java	(revision 37549)
@@ -0,0 +1,82 @@
+package com.freshport.freight.customs.dao;
+
+import com.freshport.freight.customs.entity.docreview.JnRulesFieldItemCondition;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.ResultMap;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ * 规则字段条件Mapper
+ *
+ * @author fsd
+ * @email xxx
+ * @date Fri Mar 22 09:31:02 CST 2024
+ */
+public interface JnRulesFieldItemConditionMapper {
+    int deleteByPrimaryKey(@Param("id") String id);
+
+    int insert(JnRulesFieldItemCondition record);
+
+    int batchInsert(@Param("list") List<JnRulesFieldItemCondition> list);
+
+    int insertSelective(JnRulesFieldItemCondition record);
+
+    JnRulesFieldItemCondition selectByPrimaryKey(@Param("id") String id);
+
+    int updateByPrimaryKeySelective(JnRulesFieldItemCondition record);
+
+    int updateByPrimaryKey(JnRulesFieldItemCondition record);
+
+    /**
+     * 根据ruleId 删除
+     *
+     * @param ruleId
+     * @return
+     */
+    @Delete("delete from jn_rules_field_item_condition where rule_id = #{ruleId}")
+    int deleteByRuleId(@Param("ruleId") String ruleId);
+
+    /**
+     * 根据ruleId查询
+     *
+     * @param ruleId
+     * @return
+     */
+    @ResultMap("BaseResultMap")
+    @Select("select * from jn_rules_field_item_condition where rule_id = #{ruleId}")
+    List<JnRulesFieldItemCondition> findListByRuleId(@Param("ruleId") String ruleId);
+
+    /**
+     * 根据 docKey 查询列表信息
+     *
+     * @param docKeyList
+     * @return
+     */
+    @ResultMap("BaseResultMap")
+    @Select({"<script>",
+            " select a.* FROM (SELECT id ",
+            " FROM jn_rules_doc WHERE doc_key in ",
+            "<foreach item='item' index='index' collection='items' open='(' separator=',' close=')'>",
+            "#{item}",
+            "</foreach>) b, jn_rules_field_item_condition a where a.doc_id = b.id",
+            "</script>"})
+    List<JnRulesFieldItemCondition> findListByDocList(@Param("items") List<String> docKeyList);
+
+    /**
+     * 根据 ruleIdList 查询列表信息
+     *
+     * @param ruleIdList
+     * @return
+     */
+    @ResultMap("BaseResultMap")
+    @Select({"<script>",
+            " select a.* from jn_rules_field_item_condition a where a.rule_id in ",
+            "<foreach item='item' index='index' collection='items' open='(' separator=',' close=')'>",
+            "#{item}",
+            "</foreach>",
+            "</script>"})
+    List<JnRulesFieldItemCondition> findListByRuleIdList(@Param("items") List<String> ruleIdList);
+}
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/JnRulesFieldItemMapper.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/JnRulesFieldItemMapper.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/JnRulesFieldItemMapper.java	(revision 37549)
@@ -20,6 +20,8 @@
 
     int insert(JnRulesFieldItem record);
 
+    int batchInsert(@Param("list") List<JnRulesFieldItem> list);
+
     int insertSelective(JnRulesFieldItem record);
 
     JnRulesFieldItem selectByPrimaryKey(@Param("id") String id);
@@ -49,6 +51,7 @@
 
     /**
      * 根据 docKey 查询列表信息
+     *
      * @param docKeyList
      * @return
      */
@@ -64,6 +67,7 @@
 
     /**
      * 根据 ruleIdList 查询列表信息
+     *
      * @param ruleIdList
      * @return
      */
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/BusinessOrderDongpinMapper.xml
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/BusinessOrderDongpinMapper.xml	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/BusinessOrderDongpinMapper.xml	(revision 37549)
@@ -244,7 +244,7 @@
 		,he.define_contract_no as defineContractNo,
 		he.customs_declaration_status as customsDeclarationStatus,
 		he.customs_declaration_submit_time as customsDeclarationSubmitTime,
-		bg.bgzlsdsj
+		bg.bgzlsdsj,cr.confirm_status as confirmStatus, cr.confirm_time as confirmTime
 		from yw_hddz
 		left hash join yw_bg bg on yw_hddz.ywbh = bg.ywbh
 		left join t_country on yw_hddz.ycddm=t_country.ctr_hgcode
@@ -256,12 +256,16 @@
 		LEFT JOIN yw_wldw sbdw on yw_hddz.bggsbm = sbdw.yw_khbm
 		left join t_myfs myfs on myfs.myfsdm=yw_hddz.myfs
 		left join yw_hddz_extend he on he.ywbh = yw_hddz.ywbh
+		left join jn_qgcw_confirm_result cr on cr.ywbh =  yw_hddz.ywbh and cr.type='0'
 		<where>
 			CHARINDEX('WL', yw_hddz.ywbh) = 0
 			and(yw_hddz.jdrbm in ${userdw} or yw_hddz.bggsbm in ${userdw} or yw_hddz.bjgsbm in ${userdw}
 				or yw_hddz.wlgsbm in ${userdw} or yw_hddz.hdrbm in ${userdw} or yw_hddz.jyjbm in ${userdw}
 				or yw_hddz.mdg in (select cname from sys_user_port where user_no = #{userId })
 			)
+			<if test="confirmStatus != null  and confirmStatus !='' ">
+				and isnull(cr.confirm_status,'0') =#{confirmStatus}
+			</if>
 			<if test="dateType ==0 ">
 					<if test="startDate != null and startDate != ''">
 			  			and datediff(day,CONVERT(datetimeoffset(3),yw_hddz.zbrq,0),#{startDate })&lt;=(0) 
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnBusMainMapper.xml
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnBusMainMapper.xml	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnBusMainMapper.xml	(revision 37549)
@@ -31,6 +31,7 @@
         <result column="priority" property="priority" jdbcType="INTEGER"/>
         <result column="recheck_state" property="recheckState" jdbcType="INTEGER"/>
         <result column="email_sync_state" property="emailSyncState" jdbcType="INTEGER"/>
+        <result column="port" property="port" jdbcType="VARCHAR"/>
     </resultMap>
     <resultMap id="BaseResultMap1" type="com.freshport.freight.customs.entity.docreview.JnBusMain">
         <id column="id" property="id" jdbcType="VARCHAR"/>
@@ -64,6 +65,7 @@
         <result column="edit_type" property="editType" jdbcType="INTEGER"/>
         <result column="edit_user" property="editUser" jdbcType="VARCHAR"/>
         <result column="edit_name" property="editName" jdbcType="VARCHAR"/>
+        <result column="port" property="port" jdbcType="VARCHAR"/>
     </resultMap>
     <sql id="pageQuerySql">
         select * from (
@@ -170,11 +172,11 @@
         insert into jn_bus_main ( id, check_no, bill_no, doc_collect, crt_time, check_result, sync_state
                                 , sync_count, ref_ywbh, crt_name, crt_user, claim_state, claim_name
                                 , claim_user, claim_time, upd_name, upd_user, upd_time, version, bill_type
-                                , edit_type, edit_user, edit_name, email_id, email_container_id, email_container_no, priority, recheck_state, email_sync_state)
+                                , edit_type, edit_user, edit_name, email_id, email_container_id, email_container_no, priority, recheck_state, email_sync_state,port)
         values ( #{id}, #{checkNo}, #{billNo}, #{docCollect}, #{crtTime}, #{checkResult}, #{syncState}
                , #{syncCount}, #{refYwbh}, #{crtName}, #{crtUser}, #{claimState}, #{claimName}
                , #{claimUser}, #{claimTime}, #{updName}, #{updUser}, #{updTime}, #{version}, #{billType}
-               , #{editType}, #{editUser}, #{editName}, #{emailId}, #{emailContainerId}, #{emailContainerNo}, #{priority}, #{recheckState}, #{emailSyncState})
+               , #{editType}, #{editUser}, #{editName}, #{emailId}, #{emailContainerId}, #{emailContainerNo}, #{priority}, #{recheckState}, #{emailSyncState},#{port})
     </insert>
     <insert id="insertSelective" parameterType="com.freshport.freight.customs.entity.docreview.JnBusMain">
         insert into jn_bus_main
@@ -266,6 +268,9 @@
             <if test="emailSyncState != null">
                 email_sync_state,
             </if>
+            <if test="port != null">
+                port,
+            </if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">
@@ -355,6 +360,9 @@
             <if test="emailSyncState != null">
                 ${emailSyncState},
             </if>
+            <if test="port != null">
+                ${port},
+            </if>
         </trim>
     </insert>
     <update id="updateByPrimaryKey" parameterType="com.freshport.freight.customs.entity.docreview.JnBusMain">
@@ -387,6 +395,7 @@
           , priority           = #{priority}
           , recheck_state      = #{recheckState}
           , email_sync_state   = #{emailSyncState}
+          , port   = #{port}
         where id = #{id}
     </update>
     <update id="updateByPrimaryKeySelective" parameterType="com.freshport.freight.customs.entity.docreview.JnBusMain">
@@ -476,6 +485,9 @@
             <if test="emailSyncState != null">
                 email_sync_state = #{emailSyncState},
             </if>
+            <if test="port != null">
+                port = #{port},
+            </if>
         </set>
         where id = #{id}
     </update>
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnDataTplineMapper.xml
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnDataTplineMapper.xml	(revision 0)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnDataTplineMapper.xml	(revision 37549)
@@ -0,0 +1,116 @@
+<?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="com.freshport.freight.customs.dao.JnDataTplineMapper" >
+  <resultMap id="BaseResultMap" type="com.freshport.freight.customs.entity.docreview.JnDataTpline" >
+    <id column="id" property="id" jdbcType="VARCHAR" />
+    <result column="country" property="country" jdbcType="VARCHAR" />
+    <result column="port" property="port" jdbcType="VARCHAR" />
+    <result column="start_node" property="startNode" jdbcType="VARCHAR" />
+    <result column="middle_node" property="middleNode" jdbcType="VARCHAR" />
+    <result column="end_node" property="endNode" jdbcType="VARCHAR" />
+    <result column="crt_time" property="crtTime" jdbcType="TIMESTAMP" />
+  </resultMap>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
+    select * from jn_data_tpline
+     where id = #{id}
+  </select>
+  <insert id="insert" parameterType="com.freshport.freight.customs.entity.docreview.JnDataTpline" >
+    insert into jn_data_tpline (id, country, port, start_node, middle_node, end_node, crt_time)
+    values (#{id}, #{country}, #{port}, #{startNode}, #{middleNode}, #{endNode}, #{crtTime})
+  </insert>
+  <insert id="insertSelective" parameterType="com.freshport.freight.customs.entity.docreview.JnDataTpline" >
+    insert into jn_data_tpline
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="country != null" >
+        country,
+      </if>
+      <if test="port != null" >
+        port,
+      </if>
+      <if test="startNode != null" >
+        start_node,
+      </if>
+      <if test="middleNode != null" >
+        middle_node,
+      </if>
+      <if test="endNode != null" >
+        end_node,
+      </if>
+      <if test="crtTime != null" >
+        crt_time,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id},
+      </if>
+      <if test="country != null" >
+        #{country},
+      </if>
+      <if test="port != null" >
+        #{port},
+      </if>
+      <if test="startNode != null" >
+        #{startNode},
+      </if>
+      <if test="middleNode != null" >
+        #{middleNode},
+      </if>
+      <if test="endNode != null" >
+        #{endNode},
+      </if>
+      <if test="crtTime != null" >
+        #{crtTime},
+      </if>
+    </trim>
+  </insert>
+  <insert id="batchInsert" parameterType="com.freshport.freight.customs.entity.docreview.JnDataTpline" >
+    insert into jn_data_tpline (id
+      , country, port, start_node, middle_node, end_node
+      , crt_time) 
+    values  <foreach collection="list" item="item" index="index" separator=",">(#{item.id}
+      , #{item.country}, #{item.port}, #{item.startNode}, #{item.middleNode}, #{item.endNode}
+      , #{item.crtTime}) </foreach>
+  </insert>
+  <update id="updateByPrimaryKey" parameterType="com.freshport.freight.customs.entity.docreview.JnDataTpline" >
+    update jn_data_tpline
+    set country = #{country}
+      ,port = #{port}
+      ,start_node = #{startNode}
+      ,middle_node = #{middleNode}
+      ,end_node = #{endNode}
+      ,crt_time = #{crtTime}
+     where id = #{id}
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.freshport.freight.customs.entity.docreview.JnDataTpline" >
+    update jn_data_tpline
+    <set >
+      <if test="country != null" >
+        country = #{country},
+      </if>
+      <if test="port != null" >
+        port = #{port},
+      </if>
+      <if test="startNode != null" >
+        start_node = #{startNode},
+      </if>
+      <if test="middleNode != null" >
+        middle_node = #{middleNode},
+      </if>
+      <if test="endNode != null" >
+        end_node = #{endNode},
+      </if>
+      <if test="crtTime != null" >
+        crt_time = #{crtTime},
+      </if>
+    </set>
+     where id = #{id}
+  </update>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
+    delete from jn_data_tpline
+     where id = #{id}
+  </delete>
+</mapper>
\ No newline at end of file
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnQgcwConfirmRecordMapper.xml
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnQgcwConfirmRecordMapper.xml	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnQgcwConfirmRecordMapper.xml	(revision 37549)
@@ -1,6 +1,6 @@
 <?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="com.freshport.freight.customs.dao.JnQgcwConfirmRecordMapper">
+<mapper namespace="com.freshport.freight.customs.dao.JnQgcwConfirmRecordMapper"> 
   <resultMap id="BaseResultMap" type="com.freshport.freight.customs.entity.JnQgcwConfirmRecord">
     <id column="id" jdbcType="VARCHAR" property="id" />
     <result column="ywbh" jdbcType="VARCHAR" property="ywbh" />
@@ -14,6 +14,7 @@
     <result column="crt_user" jdbcType="VARCHAR" property="crtUser" />
     <result column="crt_host" jdbcType="VARCHAR" property="crtHost" />
     <result column="result_id" jdbcType="VARCHAR" property="resultId" />
+    <result column="cancle_lock" jdbcType="VARCHAR" property="cancleLock"/>
   </resultMap>
   <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
     delete from jn_qgcw_confirm_record
@@ -23,12 +24,12 @@
     insert into jn_qgcw_confirm_record (id, ywbh, bgid, 
       confirm_status, confirm_user, confirm_user_name, 
       confirm_time, type, crt_time, 
-      crt_user, crt_host, result_id
+      crt_user, crt_host, result_id,cancle_lock
       )
     values (#{id,jdbcType=VARCHAR}, #{ywbh,jdbcType=VARCHAR}, #{bgid,jdbcType=VARCHAR}, 
       #{confirmStatus,jdbcType=VARCHAR}, #{confirmUser,jdbcType=VARCHAR}, #{confirmUserName,jdbcType=VARCHAR}, 
       #{confirmTime,jdbcType=TIMESTAMP}, #{type,jdbcType=VARCHAR}, #{crtTime,jdbcType=TIMESTAMP}, 
-      #{crtUser,jdbcType=VARCHAR}, #{crtHost,jdbcType=VARCHAR}, #{resultId,jdbcType=VARCHAR}
+      #{crtUser,jdbcType=VARCHAR}, #{crtHost,jdbcType=VARCHAR}, #{resultId,jdbcType=VARCHAR}, #{cancleLock,jdbcType=VARCHAR}
       )
   </insert>
   <update id="updateByPrimaryKey" parameterType="com.freshport.freight.customs.entity.JnQgcwConfirmRecord">
@@ -43,18 +44,19 @@
       crt_time = #{crtTime,jdbcType=TIMESTAMP},
       crt_user = #{crtUser,jdbcType=VARCHAR},
       crt_host = #{crtHost,jdbcType=VARCHAR},
-      result_id = #{resultId,jdbcType=VARCHAR}
+      result_id = #{resultId,jdbcType=VARCHAR},
+      cancle_lock = #{cancleLock,jdbcType=VARCHAR}
     where id = #{id,jdbcType=VARCHAR}
   </update>
   <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
     select id, ywbh, bgid, confirm_status, confirm_user, confirm_user_name, confirm_time, 
-    type, crt_time, crt_user, crt_host, result_id
+    type, crt_time, crt_user, crt_host, result_id,cancle_lock
     from jn_qgcw_confirm_record
     where id = #{id,jdbcType=VARCHAR}
   </select>
   <select id="selectAll" resultMap="BaseResultMap">
     select id, ywbh, bgid, confirm_status, confirm_user, confirm_user_name, confirm_time, 
-    type, crt_time, crt_user, crt_host, result_id
+    type, crt_time, crt_user, crt_host, result_id,cancle_lock
     from jn_qgcw_confirm_record
   </select>
 </mapper>
\ No newline at end of file
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnQgcwConfirmResultMapper.xml
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnQgcwConfirmResultMapper.xml	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnQgcwConfirmResultMapper.xml	(revision 37549)
@@ -1,6 +1,6 @@
 <?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="com.freshport.freight.customs.dao.JnQgcwConfirmResultMapper">
+<mapper namespace="com.freshport.freight.customs.dao.JnQgcwConfirmResultMapper"> 
   <resultMap id="BaseResultMap" type="com.freshport.freight.customs.entity.JnQgcwConfirmResult">
     <id column="id" jdbcType="VARCHAR" property="id" />
     <result column="ywbh" jdbcType="VARCHAR" property="ywbh" />
@@ -16,6 +16,7 @@
     <result column="upd_time" jdbcType="TIMESTAMP" property="updTime" />
     <result column="upd_user" jdbcType="VARCHAR" property="updUser" />
     <result column="upd_host" jdbcType="VARCHAR" property="updHost" />
+    <result column="cancle_lock" jdbcType="VARCHAR" property="cancleLock"/>
   </resultMap>
   <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
     delete from jn_qgcw_confirm_result
@@ -26,12 +27,12 @@
       confirm_status, confirm_user, confirm_user_name, 
       confirm_time, type, crt_time, 
       crt_user, crt_host, upd_time, 
-      upd_user, upd_host)
+      upd_user, upd_host,cancle_lock)
     values (#{id,jdbcType=VARCHAR}, #{ywbh,jdbcType=VARCHAR}, #{bgid,jdbcType=VARCHAR}, 
       #{confirmStatus,jdbcType=VARCHAR}, #{confirmUser,jdbcType=VARCHAR}, #{confirmUserName,jdbcType=VARCHAR}, 
       #{confirmTime,jdbcType=TIMESTAMP}, #{type,jdbcType=VARCHAR}, #{crtTime,jdbcType=TIMESTAMP}, 
       #{crtUser,jdbcType=VARCHAR}, #{crtHost,jdbcType=VARCHAR}, #{updTime,jdbcType=TIMESTAMP}, 
-      #{updUser,jdbcType=VARCHAR}, #{updHost,jdbcType=VARCHAR})
+      #{updUser,jdbcType=VARCHAR}, #{updHost,jdbcType=VARCHAR}, #{cancleLock,jdbcType=VARCHAR})
   </insert>
   <update id="updateByPrimaryKey" parameterType="com.freshport.freight.customs.entity.JnQgcwConfirmResult">
     update jn_qgcw_confirm_result
@@ -47,18 +48,67 @@
       crt_host = #{crtHost,jdbcType=VARCHAR},
       upd_time = #{updTime,jdbcType=TIMESTAMP},
       upd_user = #{updUser,jdbcType=VARCHAR},
-      upd_host = #{updHost,jdbcType=VARCHAR}
+      upd_host = #{updHost,jdbcType=VARCHAR},
+      cancle_lock = #{cancleLock,jdbcType=VARCHAR}
     where id = #{id,jdbcType=VARCHAR}
   </update>
   <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
     select id, ywbh, bgid, confirm_status, confirm_user, confirm_user_name, confirm_time, 
-    type, crt_time, crt_user, crt_host, upd_time, upd_user, upd_host
+    type, crt_time, crt_user, crt_host, upd_time, upd_user, upd_host,cancle_lock
     from jn_qgcw_confirm_result
     where id = #{id,jdbcType=VARCHAR}
   </select>
   <select id="selectAll" resultMap="BaseResultMap">
     select id, ywbh, bgid, confirm_status, confirm_user, confirm_user_name, confirm_time, 
-    type, crt_time, crt_user, crt_host, upd_time, upd_user, upd_host
+    type, crt_time, crt_user, crt_host, upd_time, upd_user, upd_host,cancle_lock
     from jn_qgcw_confirm_result
   </select>
+  
+  <select id="queryResultByYwbhType" parameterType="com.freshport.freight.customs.entity.vo.JnQgcwConfirmResultVo" 
+  	resultMap="BaseResultMap">
+  	select top 1 id, ywbh, bgid, confirm_status, confirm_user, confirm_user_name, confirm_time, 
+    type, crt_time, crt_user, crt_host, upd_time, upd_user, upd_host,cancle_lock
+    from jn_qgcw_confirm_result
+     where ywbh =#{ywbh} and type =#{type}
+  </select>
+  
+	<select id="queryReadyConfirm" parameterType ="java.util.Map" resultType ="java.lang.String">
+		select ywbh  from jn_qgcw_confirm_result
+		   <where>
+		   	and confirm_status ='1'
+		   	<if test="type !=null ">
+		   		and type =#{type}
+		   	</if>
+		   	<if test="ywbh !=null ">
+		   		and ywbh =#{ywbh}
+		   	</if>
+		   	<if test="ywbhList !=null and ywbhList.size()>0">
+		   		and ywbh in  
+		   		<foreach item="item" collection="ywbhList" open="(" separator="," close=")">
+				#{item,jdbcType=VARCHAR}
+			</foreach>
+		   	</if>
+		   </where> 
+	</select>
+	
+	<select id="queryQgConfirmStatusByYwbhType" parameterType="java.lang.String" 
+		resultType="com.freshport.freight.customs.entity.vo.JnQgcwConfirmResultStatusVo">
+		select  r.confirm_status as confirmStatus, r.confirm_user as confirmUser, 
+			r.confirm_user_name as confirmUserName, r.confirm_time as confirmTime, r.type, 
+	    	b.ywbh, b.bgid, b.bgsj, b.ecwzbgsj, h.sblx
+	    from  yw_bg b 
+	    left join yw_hddz h on b.ywbh = h.ywbh
+	    left join jn_qgcw_confirm_result r on b.ywbh = r.ywbh and r.type='0'
+     	where b.ywbh =#{ywbh} 
+	</select>
+	
+  <select id="queryBcConfirmStatusByYwbhType" parameterType="java.lang.String" 
+		resultType="com.freshport.freight.customs.entity.vo.JnQgcwConfirmResultStatusVo">
+	select  r.confirm_status as confirmStatus, r.confirm_user as confirmUser, 
+		r.confirm_user_name as confirmUserName, r.confirm_time as confirmTime, 
+    	r.type, bc.ywbh, bc.sfxgbg
+    from  yw_hddz_bc bc 
+    left join jn_qgcw_confirm_result r on bc.ywbh = r.ywbh  and r.type='2'
+    where bc.bclx='0' and bc.sfxgbg='Y' and  bc.ywbh =#{ywbh}
+	</select>
 </mapper>
\ No newline at end of file
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnRulesFieldInnerMapper.xml
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnRulesFieldInnerMapper.xml	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnRulesFieldInnerMapper.xml	(revision 37549)
@@ -45,6 +45,17 @@
                , #{nextCheck}, #{fieldType}, #{isSubTable}, #{collectSign}, #{subTableKey}, #{subTableName}
                , #{crtTime})
     </insert>
+    <insert id="batchInsert">
+        insert into jn_rules_field_inner ( id, rule_id, doc_id, field_key, field_name, pre_rule_check_type
+        , next_check, field_type, is_sub_table, collect_sign, sub_table_key, sub_table_name
+        , crt_time)
+        values
+        <foreach collection="list" item="item" index="index" separator=",">
+            ( #{item.id}, #{item.ruleId}, #{item.docId}, #{item.fieldKey}, #{item.fieldName}, #{item.preRuleCheckType}
+            , #{item.nextCheck}, #{item.fieldType}, #{item.isSubTable}, #{item.collectSign}, #{item.subTableKey}, #{item.subTableName}
+            , #{item.crtTime})
+        </foreach>
+    </insert>
     <insert id="insertSelective" parameterType="com.freshport.freight.customs.entity.docreview.JnRulesFieldInner">
         insert into jn_rules_field_inner
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -130,6 +141,7 @@
             </if>
         </trim>
     </insert>
+
     <update id="updateByPrimaryKey" parameterType="com.freshport.freight.customs.entity.docreview.JnRulesFieldInner">
         update jn_rules_field_inner
         set id                  = #{id}
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnRulesFieldItemConditionMapper.xml
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnRulesFieldItemConditionMapper.xml	(revision 0)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnRulesFieldItemConditionMapper.xml	(revision 37549)
@@ -0,0 +1,120 @@
+<?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="com.freshport.freight.customs.dao.JnRulesFieldItemConditionMapper" >
+  <resultMap id="BaseResultMap" type="com.freshport.freight.customs.entity.docreview.JnRulesFieldItemCondition" >
+    <id column="id" property="id" jdbcType="VARCHAR" />
+    <result column="rule_id" property="ruleId" jdbcType="VARCHAR" />
+    <result column="doc_id" property="docId" jdbcType="VARCHAR" />
+    <result column="field_id" property="fieldId" jdbcType="VARCHAR" />
+    <result column="item_id" property="itemId" jdbcType="VARCHAR" />
+    <result column="condition" property="condition" jdbcType="INTEGER" />
+    <result column="crt_time" property="crtTime" jdbcType="TIMESTAMP" />
+  </resultMap>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
+    select * from jn_rules_field_item_condition
+     where id = #{id}
+  </select>
+  <insert id="insert" parameterType="com.freshport.freight.customs.entity.docreview.JnRulesFieldItemCondition" >
+    insert into jn_rules_field_item_condition (id, rule_id, doc_id, field_id, item_id, condition, crt_time
+      ) 
+    values (#{id}, #{ruleId}, #{docId}, #{fieldId}, #{itemId}, #{condition}, #{crtTime}
+      ) 
+  </insert>
+  <insert id="insertSelective" parameterType="com.freshport.freight.customs.entity.docreview.JnRulesFieldItemCondition" >
+    insert into jn_rules_field_item_condition
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="ruleId != null">
+        rule_id,
+      </if>
+      <if test="docId != null">
+        doc_id,
+      </if>
+      <if test="fieldId != null">
+        field_id,
+      </if>
+      <if test="itemId != null">
+        item_id,
+      </if>
+      <if test="condition != null">
+        condition,
+      </if>
+      <if test="crtTime != null">
+        crt_time,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id},
+      </if>
+      <if test="ruleId != null">
+        #{ruleId},
+      </if>
+      <if test="docId != null">
+        #{docId},
+      </if>
+      <if test="fieldId != null">
+        #{fieldId},
+      </if>
+      <if test="itemId != null">
+        #{itemId},
+      </if>
+      <if test="condition != null">
+        #{condition},
+      </if>
+      <if test="crtTime != null">
+        #{crtTime},
+      </if>
+    </trim>
+  </insert>
+  <insert id="batchInsert" parameterType="com.freshport.freight.customs.entity.docreview.JnRulesFieldItemCondition" >
+    insert into jn_rules_field_item_condition (id
+    , rule_id, doc_id, field_id, item_id, condition
+    , crt_time)
+    values
+    <foreach collection="list" item="item" index="index" separator=",">(#{item.id}
+      , #{item.ruleId}, #{item.docId}, #{item.fieldId}, #{item.itemId}, #{item.condition}
+      , #{item.crtTime})
+    </foreach>
+  </insert>
+  <update id="updateByPrimaryKey" parameterType="com.freshport.freight.customs.entity.docreview.JnRulesFieldItemCondition" >
+    update jn_rules_field_item_condition
+    set rule_id = #{ruleId}
+      ,doc_id = #{docId}
+      ,field_id = #{fieldId}
+      ,item_id = #{itemId}
+      ,condition = #{condition}
+      ,crt_time = #{crtTime}
+     where id = #{id}
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.freshport.freight.customs.entity.docreview.JnRulesFieldItemCondition" >
+    update jn_rules_field_item_condition
+    <set >
+      <if test="ruleId != null" >
+        rule_id = #{ruleId},
+      </if>
+      <if test="docId != null" >
+        doc_id = #{docId},
+      </if>
+      <if test="fieldId != null" >
+        field_id = #{fieldId},
+      </if>
+      <if test="itemId != null" >
+        item_id = #{itemId},
+      </if>
+      <if test="condition != null" >
+        condition = #{condition},
+      </if>
+      <if test="crtTime != null" >
+        crt_time = #{crtTime},
+      </if>
+    </set>
+     where id = #{id}
+  </update>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
+    delete from jn_rules_field_item_condition
+     where id = #{id}
+  </delete>
+</mapper>
\ No newline at end of file
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnRulesFieldItemMapper.xml
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnRulesFieldItemMapper.xml	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/JnRulesFieldItemMapper.xml	(revision 37549)
@@ -1,147 +1,159 @@
 <?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="com.freshport.freight.customs.dao.JnRulesFieldItemMapper" >
-  <resultMap id="BaseResultMap" type="com.freshport.freight.customs.entity.docreview.JnRulesFieldItem" >
-    <id column="id" property="id" jdbcType="VARCHAR" />
-    <result column="rule_id" property="ruleId" jdbcType="VARCHAR" />
-    <result column="doc_id" property="docId" jdbcType="VARCHAR" />
-    <result column="field_id" property="fieldId" jdbcType="VARCHAR" />
-    <result column="sequence" property="sequence" jdbcType="INTEGER" />
-    <result column="pre_rule" property="preRule" jdbcType="INTEGER" />
-    <result column="rule_type" property="ruleType" jdbcType="INTEGER" />
-    <result column="check_type" property="checkType" jdbcType="INTEGER" />
-    <result column="group_collect_sign" property="groupCollectSign" jdbcType="INTEGER" />
-    <result column="group_flag" property="groupFlag" jdbcType="VARCHAR" />
-  </resultMap>
-  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
-    select * from jn_rules_field_item
-    where id = #{id}
-  </select>
-  <insert id="insert" parameterType="com.freshport.freight.customs.entity.docreview.JnRulesFieldItem" >
-    insert into jn_rules_field_item (id, rule_id, doc_id, field_id, sequence, pre_rule, rule_type
-                                    , check_type, group_collect_sign, group_flag)
-    values (#{id}, #{ruleId}, #{docId}, #{fieldId}, #{sequence}, #{preRule}, #{ruleType}
-           , #{checkType}, #{groupCollectSign}, #{groupFlag})
-  </insert>
-  <insert id="insertSelective" parameterType="com.freshport.freight.customs.entity.docreview.JnRulesFieldItem" >
-    insert into jn_rules_field_item
-    <trim prefix="(" suffix=")" suffixOverrides="," >
-      <if test="id != null" >
-        id,
-      </if>
-      <if test="ruleId != null" >
-        rule_id,
-      </if>
-      <if test="docId != null" >
-        doc_id,
-      </if>
-      <if test="fieldId != null" >
-        field_id,
-      </if>
-      <if test="sequence != null" >
-        sequence,
-      </if>
-      <if test="preRule != null" >
-        pre_rule,
-      </if>
-      <if test="ruleType != null" >
-        rule_type,
-      </if>
-      <if test="checkType != null" >
-        check_type,
-      </if>
-      <if test="groupCollectSign != null" >
-        group_collect_sign,
-      </if>
-      <if test="groupFlag != null" >
-        group_flag,
-      </if>
-    </trim>
-    <trim prefix="values (" suffix=")" suffixOverrides="," >
-      <if test="id != null" >
-        #{id},
-      </if>
-      <if test="ruleId != null" >
-        #{ruleId},
-      </if>
-      <if test="docId != null" >
-        #{docId},
-      </if>
-      <if test="fieldId != null" >
-        #{fieldId},
-      </if>
-      <if test="sequence != null" >
-        #{sequence},
-      </if>
-      <if test="preRule != null" >
-        #{preRule},
-      </if>
-      <if test="ruleType != null" >
-        #{ruleType},
-      </if>
-      <if test="checkType != null" >
-        #{checkType},
-      </if>
-      <if test="groupCollectSign != null" >
-        #{groupCollectSign},
-      </if>
-      <if test="groupFlag != null" >
-        #{groupFlag},
-      </if>
-    </trim>
-  </insert>
-  <update id="updateByPrimaryKey" parameterType="com.freshport.freight.customs.entity.docreview.JnRulesFieldItem" >
-    update jn_rules_field_item
-    set id = #{id}
-      ,rule_id = #{ruleId}
-      ,doc_id = #{docId}
-      ,field_id = #{fieldId}
-      ,sequence = #{sequence}
-      ,pre_rule = #{preRule}
-      ,rule_type = #{ruleType}
-      ,check_type = #{checkType}
-      ,group_collect_sign = #{groupCollectSign}
-      ,group_flag = #{groupFlag}
-    where id = #{id}
-  </update>
-  <update id="updateByPrimaryKeySelective" parameterType="com.freshport.freight.customs.entity.docreview.JnRulesFieldItem" >
-    update jn_rules_field_item
-    <set >
-      <if test="id != null" >
-        id = #{id},
-      </if>
-      <if test="ruleId != null" >
-        rule_id = #{ruleId},
-      </if>
-      <if test="docId != null" >
-        doc_id = #{docId},
-      </if>
-      <if test="fieldId != null" >
-        field_id = #{fieldId},
-      </if>
-      <if test="sequence != null" >
-        sequence = #{sequence},
-      </if>
-      <if test="preRule != null" >
-        pre_rule = #{preRule},
-      </if>
-      <if test="ruleType != null" >
-        rule_type = #{ruleType},
-      </if>
-      <if test="checkType != null" >
-        check_type = #{checkType},
-      </if>
-      <if test="groupCollectSign != null" >
-        group_collect_sign = #{groupCollectSign},
-      </if>
-      <if test="groupFlag != null" >
-        group_flag = #{groupFlag},
-      </if>
-    </set>
-    where id = #{id}
-  </update>
-  <delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
-    delete from jn_rules_field_item
-    where id = #{id}
-  </delete>
+<mapper namespace="com.freshport.freight.customs.dao.JnRulesFieldItemMapper">
+    <resultMap id="BaseResultMap" type="com.freshport.freight.customs.entity.docreview.JnRulesFieldItem">
+        <id column="id" property="id" jdbcType="VARCHAR"/>
+        <result column="rule_id" property="ruleId" jdbcType="VARCHAR"/>
+        <result column="doc_id" property="docId" jdbcType="VARCHAR"/>
+        <result column="field_id" property="fieldId" jdbcType="VARCHAR"/>
+        <result column="sequence" property="sequence" jdbcType="INTEGER"/>
+        <result column="pre_rule" property="preRule" jdbcType="INTEGER"/>
+        <result column="rule_type" property="ruleType" jdbcType="INTEGER"/>
+        <result column="check_type" property="checkType" jdbcType="INTEGER"/>
+        <result column="group_collect_sign" property="groupCollectSign" jdbcType="INTEGER"/>
+        <result column="group_flag" property="groupFlag" jdbcType="VARCHAR"/>
+    </resultMap>
+    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String">
+        select *
+        from jn_rules_field_item
+        where id = #{id}
+    </select>
+    <insert id="insert" parameterType="com.freshport.freight.customs.entity.docreview.JnRulesFieldItem">
+        insert into jn_rules_field_item ( id, rule_id, doc_id, field_id, sequence, pre_rule, rule_type
+                                        , check_type, group_collect_sign, group_flag)
+        values ( #{id}, #{ruleId}, #{docId}, #{fieldId}, #{sequence}, #{preRule}, #{ruleType}
+               , #{checkType}, #{groupCollectSign}, #{groupFlag})
+    </insert>
+    <insert id="batchInsert">
+        insert into jn_rules_field_item ( id, rule_id, doc_id, field_id, sequence, pre_rule, rule_type
+        , check_type, group_collect_sign, group_flag)
+        values
+        <foreach collection="list" item="item" index="index" separator=",">
+            ( #{item.id}, #{item.ruleId}, #{item.docId}, #{item.fieldId}, #{item.sequence}, #{item.preRule}, #{item.ruleType}
+            , #{item.checkType}, #{item.groupCollectSign}, #{item.groupFlag})
+        </foreach>
+    </insert>
+    <insert id="insertSelective" parameterType="com.freshport.freight.customs.entity.docreview.JnRulesFieldItem">
+        insert into jn_rules_field_item
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">
+                id,
+            </if>
+            <if test="ruleId != null">
+                rule_id,
+            </if>
+            <if test="docId != null">
+                doc_id,
+            </if>
+            <if test="fieldId != null">
+                field_id,
+            </if>
+            <if test="sequence != null">
+                sequence,
+            </if>
+            <if test="preRule != null">
+                pre_rule,
+            </if>
+            <if test="ruleType != null">
+                rule_type,
+            </if>
+            <if test="checkType != null">
+                check_type,
+            </if>
+            <if test="groupCollectSign != null">
+                group_collect_sign,
+            </if>
+            <if test="groupFlag != null">
+                group_flag,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">
+                #{id},
+            </if>
+            <if test="ruleId != null">
+                #{ruleId},
+            </if>
+            <if test="docId != null">
+                #{docId},
+            </if>
+            <if test="fieldId != null">
+                #{fieldId},
+            </if>
+            <if test="sequence != null">
+                #{sequence},
+            </if>
+            <if test="preRule != null">
+                #{preRule},
+            </if>
+            <if test="ruleType != null">
+                #{ruleType},
+            </if>
+            <if test="checkType != null">
+                #{checkType},
+            </if>
+            <if test="groupCollectSign != null">
+                #{groupCollectSign},
+            </if>
+            <if test="groupFlag != null">
+                #{groupFlag},
+            </if>
+        </trim>
+    </insert>
+
+    <update id="updateByPrimaryKey" parameterType="com.freshport.freight.customs.entity.docreview.JnRulesFieldItem">
+        update jn_rules_field_item
+        set id                 = #{id}
+          , rule_id            = #{ruleId}
+          , doc_id             = #{docId}
+          , field_id           = #{fieldId}
+          , sequence           = #{sequence}
+          , pre_rule           = #{preRule}
+          , rule_type          = #{ruleType}
+          , check_type         = #{checkType}
+          , group_collect_sign = #{groupCollectSign}
+          , group_flag         = #{groupFlag}
+        where id = #{id}
+    </update>
+    <update id="updateByPrimaryKeySelective" parameterType="com.freshport.freight.customs.entity.docreview.JnRulesFieldItem">
+        update jn_rules_field_item
+        <set>
+            <if test="id != null">
+                id = #{id},
+            </if>
+            <if test="ruleId != null">
+                rule_id = #{ruleId},
+            </if>
+            <if test="docId != null">
+                doc_id = #{docId},
+            </if>
+            <if test="fieldId != null">
+                field_id = #{fieldId},
+            </if>
+            <if test="sequence != null">
+                sequence = #{sequence},
+            </if>
+            <if test="preRule != null">
+                pre_rule = #{preRule},
+            </if>
+            <if test="ruleType != null">
+                rule_type = #{ruleType},
+            </if>
+            <if test="checkType != null">
+                check_type = #{checkType},
+            </if>
+            <if test="groupCollectSign != null">
+                group_collect_sign = #{groupCollectSign},
+            </if>
+            <if test="groupFlag != null">
+                group_flag = #{groupFlag},
+            </if>
+        </set>
+        where id = #{id}
+    </update>
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+        delete
+        from jn_rules_field_item
+        where id = #{id}
+    </delete>
 </mapper>
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/YwBgMapper.xml
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/YwBgMapper.xml	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/YwBgMapper.xml	(revision 37549)
@@ -1389,4 +1389,14 @@
     <select id="getMygbHgdm" resultType="java.lang.String">
         select top 1 ctr_cust from t_country tc where tc.ctr_ename= #{mygb}
     </select>
+    
+    
+    <select id="queryYwBgVoByYwbhAndBgid" parameterType="java.lang.String" resultType="com.freshport.freight.customs.entity.YwBgVo">
+    	select  h.sblx as sblx, b.bgid, b.ywbh as ywbh, b.bgsj as bgsj, b.ecwzbgsj as ecwzbgsj 
+    	from yw_bg b 
+    	left join yw_hddz h on h.ywbh = b.ywbh 
+    	<where>
+    		and b.ywbh =#{ywbh} and b.bgid = #{bgid}
+    	</where>
+    </select>
 </mapper>
\ No newline at end of file
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/YwHddzBcMapper.xml
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/YwHddzBcMapper.xml	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/YwHddzBcMapper.xml	(revision 37549)
@@ -278,6 +278,8 @@
 ,bg.sfyzbsdlj as yzbsd<!--正本税单	-->
 ,bg.xfsydwqymc as xfsydw<!--消费使用单位	-->
 ,bg.mnsdmclj<!--模拟税单-->
+,bg.bgsj as bgsj
+,bg.bgid as bgid
 ,hddz.beizhu <!--备注-->
 ,hddz.dzqk <!--文件收齐情况-->
 ,hddz.qrdf  <!--是否电放-->
@@ -368,18 +370,21 @@
 ,bc.sfxgbg as sfxgbg
 ,bc.bclx as bclx
 ,(case when bc.bclx='1' then '还柜' else '提柜' end) as bclxmc,
-hddz.mdg
+hddz.mdg,cr.confirm_status as confirmStatus, cr.confirm_user_name as confirmUserName, cr.confirm_time as confirmTime
 from yw_hddz_bc bc
 inner join  yw_hddz hddz on bc.ywbh=hddz.ywbh and hddz.state != '终止'
 left join yw_hddz_jzxxx jzx on bc.ywbh=jzx.ywbh
 left join yw_bg bg on hddz.ywbh=bg.ywbh
 left join sys_users users on hddz.zbr=users.ID
 left join sys_users usersdyckScry on hddz.dyck_scry=usersdyckScry.ID 
+left join jn_qgcw_confirm_result cr on cr.ywbh = hddz.ywbh and cr.type ='2'
 	<where>
 		<if test="userport != null and userport != ''">
 			and hddz.mdg in ${userport}
 		</if>
-		
+		<if test="confirmStatus != null and confirmStatus != ''">
+			and isnull(cr.confirm_status,'0') =#{confirmStatus}
+		</if>
 		<if test="sjfwlx==0">
 			<!-- 开始   -->
 			<if test="kssj != null and kssj != ''">
@@ -494,4 +499,15 @@
 	    </if>
 	</where>
 	</sql>
+	
+	<select id="queryRealyBg" parameterType="java.util.List" resultType="java.lang.String">
+		select bc.ywbh from yw_hddz_bc  bc
+    	left join yw_bg b  on  b.ywbh = bc.ywbh 
+    	where bc.sfxgbg ='Y'and bc.bclx='0' and b.bgsj is not null 
+    	   	 and b.ywbh in 
+	  		<foreach item="item" collection="list" open="(" separator="," close=")">
+				#{item,jdbcType=VARCHAR}
+			</foreach>
+		
+	</select>
 </mapper>
\ No newline at end of file
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/YwHddzExtendMapper.xml
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/YwHddzExtendMapper.xml	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/Mapper/YwHddzExtendMapper.xml	(revision 37549)
@@ -60,4 +60,11 @@
   <delete id="deleteExtendByYwbh" parameterType="java.lang.String">
   	 delete from yw_hddz_extend where ywbh = #{ywbh,jdbcType=VARCHAR}
   </delete>
+  
+  <select id="getShipperConfirmByYwbh" parameterType="java.lang.String" 
+  		resultType="com.freshport.freight.customs.entity.vo.JnQgcwConfirmResultStatusVo">
+  	select ex.ywbh as ywbh, ex.zzgk_confirm as confirmStatus, ex.zzgk_confirm_user as confirmUser,
+  		ex.zzgk_confirm_time as confirmTime
+  	 from yw_hddz_extend ex where ex.ywbh =#{ywbh}
+  </select>
 </mapper>
\ No newline at end of file
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/YwBgMapper.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/YwBgMapper.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/YwBgMapper.java	(revision 37549)
@@ -587,4 +587,6 @@
      * @date 2023/11/1 15:01
      */
     String getMygbHgdm(@Param("mygb") String mygb);
+
+    YwBgVo queryYwBgVoByYwbhAndBgid(@Param("ywbh") String ywbh, @Param("bgid") String bgid);
 }
\ No newline at end of file
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/YwHddzBcMapper.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/YwHddzBcMapper.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/YwHddzBcMapper.java	(revision 37549)
@@ -117,4 +117,6 @@
      * @Exception 异常对象
      */
     int queryBcCountByYwbhbclx(@Param("ywbh") String ywbh, @Param("bclx") String bclx);
+
+    List<String> queryRealyBg(List<String> ywbhList);
 }
\ No newline at end of file
Index: .
===================================================================
--- .	(revision 37381)
+++ .	(revision 37549)

Property changes on: .
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /jinan/trunk/ff-cloud/ff-customs:r37379-37489
   Merged /jinan/branches/ff-customs-RB-20240320-doc_review:r37346-37387,37444,37488


Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/YwHddzExtendMapper.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/YwHddzExtendMapper.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/dao/YwHddzExtendMapper.java	(revision 37549)
@@ -6,6 +6,7 @@
 
 import com.freshport.freight.customs.entity.YwHddzExtend;
 import com.freshport.freight.customs.entity.vo.BusinessOrderDongpinVo;
+import com.freshport.freight.customs.entity.vo.JnQgcwConfirmResultStatusVo;
 
 public interface YwHddzExtendMapper {
     int deleteByPrimaryKey(Integer id);
@@ -56,4 +57,6 @@
      */
     void updateCustomsDeclarationByList(List<BusinessOrderDongpinVo> list);
 
+    List<JnQgcwConfirmResultStatusVo> getShipperConfirmByYwbh(@Param("ywbh") String ywbh);
+
 }
\ No newline at end of file
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/JnQgcwConfirmRecord.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/JnQgcwConfirmRecord.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/JnQgcwConfirmRecord.java	(revision 37549)
@@ -27,6 +27,8 @@
 
     private String resultId;
 
+    private String cancleLock;
+    
     public String getId() {
         return id;
     }
@@ -122,4 +124,12 @@
     public void setResultId(String resultId) {
         this.resultId = resultId;
     }
+
+    public String getCancleLock() {
+        return cancleLock;
+    }
+
+    public void setCancleLock(String cancleLock) {
+        this.cancleLock = cancleLock;
+    }
 }
\ No newline at end of file
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/JnQgcwConfirmResult.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/JnQgcwConfirmResult.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/JnQgcwConfirmResult.java	(revision 37549)
@@ -19,6 +19,7 @@
 
     private String type;
 
+    
     private Date crtTime;
 
     private String crtUser;
@@ -31,6 +32,8 @@
 
     private String updHost;
 
+    private String cancleLock;
+    
     public String getId() {
         return id;
     }
@@ -142,4 +145,13 @@
     public void setUpdHost(String updHost) {
         this.updHost = updHost;
     }
+
+    public String getCancleLock() {
+        return cancleLock;
+    }
+
+    public void setCancleLock(String cancleLock) {
+        this.cancleLock = cancleLock;
+    }
+    
 }
\ No newline at end of file
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/EMultipleJudge.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/EMultipleJudge.java	(revision 0)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/EMultipleJudge.java	(revision 37549)
@@ -0,0 +1,51 @@
+package com.freshport.freight.customs.entity.docreview;
+
+import com.freshport.freight.customs.utils.DocReviewConstant;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 多值判断枚举
+ */
+public enum EMultipleJudge {
+    TYPE1(1, "类型1:全不为空"),
+    TYPE2(2, "类型2:全为空"),
+    TYPE3(3, "类型3:全不为空 或 字段1为空时字段2也可以为空"),
+    ;
+
+    public final int key;
+    public final String value;
+
+    EMultipleJudge(int key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    /**
+     * 转化成枚举
+     *
+     * @param key
+     * @return
+     */
+    public static EMultipleJudge convertEnumByType(int key) {
+        EMultipleJudge[] values = EMultipleJudge.values();
+        for (EMultipleJudge item : values) {
+            if (Objects.equals(item.key, key)) {
+                return item;
+            }
+        }
+        return TYPE1;
+    }
+
+    public static List<Map<String, Object>> convertKeyValue() {
+        EMultipleJudge[] values = EMultipleJudge.values();
+        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
+        for (EMultipleJudge item : values) {
+            list.add(DocReviewConstant.buildKeyValue(item.key, item.value));
+        }
+        return list;
+    }
+}
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/EPort.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/EPort.java	(revision 0)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/EPort.java	(revision 37549)
@@ -0,0 +1,34 @@
+package com.freshport.freight.customs.entity.docreview;
+
+import com.freshport.freight.customs.utils.DocReviewConstant;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 品岸枚举
+ */
+public enum EPort {
+    NONE("无"), YOU_YI_GUAN("友谊关");
+
+    public final String name;
+
+    EPort(String name) {
+        this.name = name;
+    }
+
+    /**
+     * 转化成key value
+     *
+     * @return
+     */
+    public static List<Map<String, Object>> convertKeyValue() {
+        EPort[] values = EPort.values();
+        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
+        for (EPort item : values) {
+            list.add(DocReviewConstant.buildKeyValue(item.name, item.name));
+        }
+        return list;
+    }
+}
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/ERulesCondition.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/ERulesCondition.java	(revision 0)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/ERulesCondition.java	(revision 37549)
@@ -0,0 +1,54 @@
+package com.freshport.freight.customs.entity.docreview;
+
+import com.freshport.freight.customs.utils.DocReviewConstant;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 规则字段条件枚举
+ */
+public enum ERulesCondition {
+    PORT_IS_YOU_YI_GUAN(1, "口岸是有友谊关");
+
+
+    public final int type;
+    public final String name;
+
+    ERulesCondition(int type, String name) {
+        this.type = type;
+        this.name = name;
+    }
+
+    /**
+     * 转化成枚举
+     *
+     * @param type
+     * @return
+     */
+    public static ERulesCondition convertEnumByType(int type) {
+        ERulesCondition[] values = ERulesCondition.values();
+        for (ERulesCondition item : values) {
+            if (Objects.equals(item.type, type)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 转化成key value
+     *
+     * @return
+     */
+    public static List<Map<String, Object>> convertKeyValue() {
+        ERulesCondition[] values = ERulesCondition.values();
+        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
+        for (ERulesCondition item : values) {
+            list.add(DocReviewConstant.buildKeyValue(item.type, item.name));
+        }
+        return list;
+    }
+}
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnBusMain.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnBusMain.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnBusMain.java	(revision 37549)
@@ -53,6 +53,10 @@
      */
     private Integer checkResult;
     /**
+     * 口岸
+     */
+    private String port;
+    /**
      * 创建时间
      */
     @ApiModelProperty(value = "创建时间, 长度限制【8】")
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnBusMainFile.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnBusMainFile.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnBusMainFile.java	(revision 37549)
@@ -3,6 +3,7 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.apache.commons.lang3.StringUtils;
 import org.hibernate.validator.constraints.Length;
 import org.springframework.format.annotation.DateTimeFormat;
 
@@ -88,4 +89,34 @@
      * 邮件附件接收时间
      */
     private Date emailFileReceiveTime;
+
+    /**
+     * 获取基础文档名称
+     *
+     * @return
+     */
+    public String getBaseDocName() {
+        String baseName = "";
+        if (StringUtils.isNotBlank(docName)) {
+            baseName = docName.substring(0, docName.lastIndexOf("."));
+            baseName = baseName.replaceAll("_[0-9]+$", "");
+        }
+        return baseName;
+    }
+
+    /**
+     * 生成新文档
+     *
+     * @param baseName
+     * @param count
+     * @return
+     */
+    public String generatorNewDocName(String baseName, Integer count) {
+        String newDocName = baseName;
+        if (StringUtils.isNotBlank(docName)) {
+            String suffix = docName.substring(docName.lastIndexOf("."));
+            newDocName = newDocName + "_" + count + suffix;
+        }
+        return newDocName;
+    }
 }
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnDataTpline.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnDataTpline.java	(revision 0)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnDataTpline.java	(revision 37549)
@@ -0,0 +1,42 @@
+package com.freshport.freight.customs.entity.docreview;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 运输路线配置 Entity
+ *
+ * @author fsd
+ * @email xxx
+ * @date Fri Mar 22 15:58:39 CST 2024
+ */
+@Data
+public class JnDataTpline {
+    private String id;
+    @ApiModelProperty(value = "国家, 长度限制【64】")
+    @Length(max = 64, message = "国家超出长度限制【64】")
+    private String country;
+    @ApiModelProperty(value = "口岸, 长度限制【64】")
+    @Length(max = 64, message = "口岸超出长度限制【64】")
+    private String port;
+    @ApiModelProperty(value = "开始节点, 长度限制【256】")
+    @Length(max = 256, message = "开始结点超出长度限制【256】")
+    private String startNode;
+    @ApiModelProperty(value = "中间结点, 长度限制【512】")
+    @Length(max = 512, message = "中间结点超出长度限制【512】")
+    private String middleNode;
+    @ApiModelProperty(value = "结束节点, 长度限制【256】")
+    @Length(max = 256, message = "结束节点超出长度限制【256】")
+    private String endNode;
+    @ApiModelProperty(value = "创建时间, 长度限制【8】")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date crtTime;
+
+    /*-----------业务字段--------------*/
+}
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnRulesDefineNotnull.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnRulesDefineNotnull.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnRulesDefineNotnull.java	(revision 37549)
@@ -13,8 +13,9 @@
 public class JnRulesDefineNotnull extends JnRulesDefine {
     /**
      * 判断类型 - 多值非空判断使用
-     * 1->有一个不为空
-     * 2->前一个不为空，后一个不能为空
+     * 1->类型1：全不为空
+     * 2->类型2：全为空
+     * 3->类型3：全不为空 或 1为空时2也可以为空
      */
     private Integer judgeType;
 
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnRulesFieldItem.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnRulesFieldItem.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnRulesFieldItem.java	(revision 37549)
@@ -5,6 +5,8 @@
 import lombok.Data;
 import org.hibernate.validator.constraints.Length;
 
+import java.util.List;
+
 /**
  * 规则配置-字段明细 Entity
  *
@@ -78,4 +80,8 @@
      * json
      */
     private JSONObject defineJson;
+    /**
+     * 条件
+     */
+    private List<JnRulesFieldItemCondition> conditionList;
 }
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnRulesFieldItemCondition.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnRulesFieldItemCondition.java	(revision 0)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/docreview/JnRulesFieldItemCondition.java	(revision 37549)
@@ -0,0 +1,37 @@
+package com.freshport.freight.customs.entity.docreview;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 规则字段条件 Entity
+ *
+ * @author fsd
+ * @email xxx
+ * @date Fri Mar 22 09:31:02 CST 2024
+ */
+@Data
+public class JnRulesFieldItemCondition {
+    private String id;
+    @ApiModelProperty(value = "规则id, 长度限制【36】")
+    private String ruleId;
+    @ApiModelProperty(value = "文档id, 长度限制【36】")
+    private String docId;
+    @ApiModelProperty(value = "字段id, 长度限制【36】")
+    private String fieldId;
+    @ApiModelProperty(value = "规则明细id, 长度限制【36】")
+    private String itemId;
+    @ApiModelProperty(value = "条件类型, 长度限制【4】")
+    private Integer condition;
+    @ApiModelProperty(value = "创建时间, 长度限制【8】")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date crtTime;
+
+    /*-----------业务字段--------------*/
+}
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/BusinessOrderDongpinVo.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/BusinessOrderDongpinVo.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/BusinessOrderDongpinVo.java	(revision 37549)
@@ -308,6 +308,16 @@
     @ApiModelProperty(value = "报关资料收到时间", dataType = "Date")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date bgzlsdsj;
+    
+    @ApiModelProperty(value="确认状态(1-已确认，0-未确认)")
+    private String confirmStatus;
+    
+    @ApiModelProperty(value="确认状态(已确认，未确认)")
+    private String confirmStatusName;
+    
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value="确认时间")
+    private Date confirmTime;
 
     @Override
     public String toString() {
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/BusinessOrderSeaSaveVO.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/BusinessOrderSeaSaveVO.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/BusinessOrderSeaSaveVO.java	(revision 37549)
@@ -528,6 +528,9 @@
     @ApiModelProperty(value = "自定义合同号(公司自编合同号)")
     private String defineContractNo;
 
+    @ApiModelProperty(value="复核清关确认状态(0-未确认，1-已经确认)")
+    private String confirmStatus;
+    
     @Override
     public String toString() {
         return CustomsUtils.objToString(this);
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/JnQgcwConfirmResultStatusVo.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/JnQgcwConfirmResultStatusVo.java	(revision 0)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/JnQgcwConfirmResultStatusVo.java	(revision 37549)
@@ -0,0 +1,39 @@
+package com.freshport.freight.customs.entity.vo;
+
+import java.util.Date;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value="清关船务确认/取消确认对象")
+public class JnQgcwConfirmResultStatusVo {
+
+    @ApiModelProperty(value="业务编号")
+    private String ywbh;
+    @ApiModelProperty(value="报关Id")
+    private String bgid;
+    @ApiModelProperty(value="确认状态(0-取消确认， 1-确认)")
+    private String confirmStatus;
+    @ApiModelProperty(value="确认/取消确确认人")
+    private String confirmUser;
+    @ApiModelProperty(value="确认/取消确确认名称")
+    private String confirmUserName;
+    @ApiModelProperty(value="确认/取消确认时间")
+    private Date confirmTime;
+    @ApiModelProperty(value="操作接口(0-清关，1-船务中转，2-船务驳船)")
+    private String type;
+    
+    @ApiModelProperty(value="报关时间")
+    private Date bgsj;
+    
+    @ApiModelProperty(value="申报类型()")
+    private String sblx;
+    @ApiModelProperty(value="是否驳船")
+    private String sfbc;
+    @ApiModelProperty(value="是否修改清关(Y-是，N-否)")
+    private String sfxgqg;
+    
+    private String ecwzbgsj;
+}
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/JnQgcwConfirmResultVo.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/JnQgcwConfirmResultVo.java	(revision 0)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/JnQgcwConfirmResultVo.java	(revision 37549)
@@ -0,0 +1,40 @@
+package com.freshport.freight.customs.entity.vo;
+
+import java.util.Date;
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**     
+ * 项目名称：ff-customs    
+ * 类名称：JnQgcwConfirmResultVo    
+ * 类描述： 清关船务确认/取消确认对象    
+ * 创建人：Think    
+ * 创建时间：2024年3月21日 下午1:41:26    
+ * 修改人：Think    
+ * 修改时间：2024年3月21日 下午1:41:26    
+ * 修改备注：    
+ * @version     
+ */
+@Data
+@ApiModel(value="清关船务确认/取消确认对象")
+public class JnQgcwConfirmResultVo {
+
+    @ApiModelProperty(value="业务编号")
+    private String ywbh;
+    @ApiModelProperty(value="报关Id")
+    private String bgid;
+    @ApiModelProperty(value="确认状态(0-取消确认， 1-确认)")
+    private String confirmStatus;
+    @ApiModelProperty(value="确认/取消确确认人")
+    private String confirmUser;
+    @ApiModelProperty(value="确认/取消确确认名称")
+    private String confirmUserName;
+    @ApiModelProperty(value="确认/取消确认时间")
+    private Date confirmTime;
+    @ApiModelProperty(value="操作接口(0-清关，1-船务中转，2-船务驳船)")
+    private String type;
+    
+}
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/OrderBaseSearchParamVO.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/OrderBaseSearchParamVO.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/OrderBaseSearchParamVO.java	(revision 37549)
@@ -296,6 +296,9 @@
 
     @ApiModelProperty(value = "内部合同号", dataType = "String")
     private String defineContractNo;
+    
+    @ApiModelProperty(value="确认状态(0-未确认，1-已确认)")
+    private String confirmStatus;
 
     @Override
     public String toString() {
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/TagItemVo.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/TagItemVo.java	(revision 0)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/TagItemVo.java	(revision 37549)
@@ -0,0 +1,11 @@
+package com.freshport.freight.customs.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class TagItemVo {
+    
+    private String label;
+    private String type;
+    private Integer order;
+}
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/YwHddzBcParam.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/YwHddzBcParam.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/YwHddzBcParam.java	(revision 37549)
@@ -87,4 +87,7 @@
 
     @ApiModelProperty(value = "用户港口", dataType = "String")
     private String userport;
+    
+    @ApiModelProperty(value="确认状态(0-未确认，1-已经确认)")
+    private  String confirmStatus;
 }
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/YwHddzBcSearchVO.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/YwHddzBcSearchVO.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/YwHddzBcSearchVO.java	(revision 37549)
@@ -4,6 +4,7 @@
 import java.util.List;
 import java.util.Map;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.freshport.freight.common.annonation.CompareApiProperty;
 
 import io.swagger.annotations.ApiModel;
@@ -337,5 +338,20 @@
 
     @ApiModelProperty(value = "驳船类型名称", dataType = "String")
     private String bclxmc;
+    @ApiModelProperty(value="确认状态(0-未确认，1-已确认)")
+    private String confirmStatus;
 
+    @ApiModelProperty(value="确认状态(未确认，已确认)")
+    private String confirmStatusName;
+
+    @ApiModelProperty(value="确认状态(未确认，已确认)")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date confirmTime;
+    
+    @ApiModelProperty(value="确认人员")
+    private String confirmUserName;
+    
+    @ApiModelProperty(value="报关id")
+    private String bgid;
+
 }
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/docreview/JnBusDataVO.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/docreview/JnBusDataVO.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/docreview/JnBusDataVO.java	(revision 37549)
@@ -83,6 +83,10 @@
      * 新版本
      */
     private boolean newVersion;
+    /**
+     * 口岸
+     */
+    private String port;
 
     /**
      * 检查文档是空
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/docreview/JnCheckAdditionDataVO.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/docreview/JnCheckAdditionDataVO.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/docreview/JnCheckAdditionDataVO.java	(revision 37549)
@@ -66,10 +66,6 @@
      * 商品信息库
      */
     private List<YwCommodity> hsCodeList;
-//    /**
-//     * 往来单位
-//     */
-//    private List<YwWldw> wldwList;
     /**
      * 收货人
      */
@@ -107,5 +103,9 @@
      * 熏蒸信息
      */
     private List<JnDataFumigateInfo> fumigateInfoList;
+    /**
+     * 运输路线
+     */
+    private List<JnDataTpline> tplineList;
 
 }
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/docreview/JnDocEmailReceiveVO.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/docreview/JnDocEmailReceiveVO.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/entity/vo/docreview/JnDocEmailReceiveVO.java	(revision 37549)
@@ -6,8 +6,9 @@
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.HashMap;
 import java.util.List;
-import java.util.stream.Collectors;
+import java.util.Map;
 
 /**
  * 邮件接收vo
@@ -50,18 +51,32 @@
     private List<JnBusMainFile> attachmentList;
 
     /**
-     * 去掉旧的文件
+     * 处理附件
+     * 重复文件名时排序
+     *
+     * @param oldFileList
      */
-    public void removeOldAttachment(List<JnBusMainFile> oldFileList) {
+    public void handleAttachment(List<JnBusMainFile> oldFileList) {
         if (!oldFileList.isEmpty()) {
-            List<String> nameList = oldFileList.stream().map(JnBusMainFile::getDocName).collect(Collectors.toList());
-            for (int i = 0; i < attachmentList.size(); ) {
-                if (nameList.contains(attachmentList.get(i).getDocName())) {
-                    attachmentList.remove(i);
+            Map<String, Integer> nameCountMap = new HashMap<String, Integer>();
+            for (JnBusMainFile file : oldFileList) {
+                String baseDocName = file.getBaseDocName();
+                if (nameCountMap.containsKey(baseDocName)) {
+                    Integer count = nameCountMap.get(baseDocName);
+                    nameCountMap.put(baseDocName, count + 1);
                 } else {
-                    i++;
+                    nameCountMap.put(baseDocName, 1);
                 }
             }
+            for (JnBusMainFile file : attachmentList) {
+                String baseDocName = file.getBaseDocName();
+                Integer count = nameCountMap.get(baseDocName);
+                if (count != null) {
+                    String newName = file.generatorNewDocName(baseDocName, ++count);
+                    file.setDocName(newName);
+                    nameCountMap.put(baseDocName, count);
+                }
+            }
         }
     }
 }
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/JnQgcwConfirmResultService.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/JnQgcwConfirmResultService.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/JnQgcwConfirmResultService.java	(revision 37549)
@@ -1,7 +1,13 @@
 package com.freshport.freight.customs.service;
 
-/**
- *     
+import java.util.List;
+import java.util.Map;
+
+import com.freshport.freight.customs.entity.JnQgcwConfirmResult;
+import com.freshport.freight.customs.entity.vo.JnQgcwConfirmResultVo;
+import com.freshport.freight.customs.entity.vo.TagItemVo;
+
+/**  
  * 项目名称：ff-customs    
  * 类名称：JnQgcwConfirmResultService    
  * 类描述： 清关船务确认操作结果记录Service
@@ -15,4 +21,59 @@
  */
 public interface JnQgcwConfirmResultService {
 
+    /**
+     * confirmResult(复核确认提交)    
+     * @param resultVo
+     * @return  
+     * @return int  
+     * @Exception 异常对象    
+     * @author Think  
+     * @date 2024-03-21 14:55:56
+     */
+    int confirmResult(JnQgcwConfirmResultVo resultVo);
+
+    /**
+     * cancleResult(复核取消提交)    
+     * @param resultVo
+     * @return  
+     * @return int  
+     * @Exception 异常对象    
+     * @author Think  
+     * @date 2024-03-21 14:56:30
+     */
+    int cancleResult(JnQgcwConfirmResultVo resultVo);
+
+    /**
+     * unlockConfirmResult(复核确认解锁)    
+     * @param resultVo
+     * @return int  
+     * @Exception 异常对象    
+     * @author Think  
+     * @date 2024-03-21 19:27:25
+     */
+    int unlockConfirmResult(JnQgcwConfirmResultVo resultVo);
+
+    /**
+     * queryReadyConfirm(查询业务是否已经复核确认)    
+     * @param ywbhList  
+     * @return void  
+     * @Exception 异常对象    
+     * @author Think  
+     * @date 2024-03-22 18:03:55
+     */
+    String queryReadyConfirm(Map<String, Object> maps);
+
+    JnQgcwConfirmResult queryConfirmStatusByYwbh(String ywbh, String type);
+
+    /**
+     * queryOtherConfirmResultData(查询其他模块确认状态功能)    
+     * @param ywbh
+     * @param bgId
+     * @return List<TagItemVo>  
+     * @Exception 异常对象    
+     * @author Think  
+     * @date 2024-03-26 15:22:54
+     */
+    List<TagItemVo> queryOtherConfirmResultData(String ywbh, String bgId);
+
 }
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/YwHddzBcService.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/YwHddzBcService.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/YwHddzBcService.java	(revision 37549)
@@ -99,4 +99,14 @@
      */
     void deleteYwHddzGnBc(String ids);
 
+    /**
+     * queryReadyBg(判断修改驳船时候是否业务已经报关了)    
+     * @param ywbhList
+     * @return List<String>  
+     * @Exception 异常对象    
+     * @author Think  
+     * @date 2024-03-22 16:28:04
+     */
+    List<String> queryReadyBg(List<String> ywbhList);
+
 }
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/declareproces/DeclarationRuleProcessor.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/declareproces/DeclarationRuleProcessor.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/declareproces/DeclarationRuleProcessor.java	(revision 37549)
@@ -304,7 +304,7 @@
             
         }else if("5166".equals(ywBgVo.getJjgb())){
             if(CommonInfo.COMMON_YES.equals(bjFlagHwcfd)){
-                ywBgVo.setHwcfdd("南沙港冷链查验场");
+               // ywBgVo.setHwcfdd("南沙港冷链查验场");
             }else if(!CommonUtils.isEmpty(xhgqVo.getHwcfd())){
                 ywBgVo.setHwcfdd(xhgqVo.getHwcfd());
             }
Index: src/main/java/com/freshport/freight/customs/service/declareproces
===================================================================
--- src/main/java/com/freshport/freight/customs/service/declareproces	(revision 37381)
+++ src/main/java/com/freshport/freight/customs/service/declareproces	(revision 37549)

Property changes on: src/main/java/com/freshport/freight/customs/service/declareproces
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /jinan/trunk/ff-cloud/ff-customs/src/main/java/com/freshport/freight/customs/service/declareproces:r37379-37489
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/JnBusDataService.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/JnBusDataService.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/JnBusDataService.java	(revision 37549)
@@ -39,6 +39,14 @@
     JnBusDataVO getBusData(String checkNo);
 
     /**
+     * 获取业务数据-审单时使用
+     *
+     * @param checkNo
+     * @return
+     */
+    JnBusDataVO getBusDataForCheck(String checkNo);
+
+    /**
      * 根据id查询业务信息
      *
      * @param id
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/JnDataService.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/JnDataService.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/JnDataService.java	(revision 37549)
@@ -3,6 +3,7 @@
 import com.freshport.freight.customs.entity.docreview.JnBusMainDimension;
 import com.freshport.freight.customs.entity.docreview.JnDataDimension;
 import com.freshport.freight.customs.entity.docreview.JnDataDoc;
+import com.freshport.freight.customs.entity.vo.docreview.JnBusDataVO;
 import com.freshport.freight.customs.entity.vo.docreview.JnCheckAdditionDataVO;
 
 import java.util.List;
@@ -21,10 +22,9 @@
     /**
      * 获取检查的附加数据
      *
-     * @param dimensionList
      * @return
      */
-    JnCheckAdditionDataVO findAdditionData(List<JnBusMainDimension> dimensionList);
+    JnCheckAdditionDataVO findAdditionData(JnBusDataVO vo);
 
     /**
      * 查询维度列表
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/impl/JnBusCheckServiceImpl.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/impl/JnBusCheckServiceImpl.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/impl/JnBusCheckServiceImpl.java	(revision 37549)
@@ -52,7 +52,7 @@
     @Transactional
     public JnBusCheckRsVO docReviewCheck(String checkNo) {
         long start = System.currentTimeMillis();
-        JnBusDataVO busData = jnBusDataService.getBusData(checkNo);
+        JnBusDataVO busData = jnBusDataService.getBusDataForCheck(checkNo);
         long time1 = System.currentTimeMillis();
         log.info("DocReview==========>[" + checkNo + "]获取主表数据耗时：" + (time1 - start));
         List<JnBusConfigDoc> docList = jnDimensionService.getDocList(busData.getDimensionList(), false);
@@ -62,7 +62,7 @@
         long time3 = System.currentTimeMillis();
         log.info("DocReview==========>[" + checkNo + "]获取规则信息耗时：" + (time3 - time2));
         //查询附加信息
-        JnCheckAdditionDataVO additionData = jnDataService.findAdditionData(busData.getDimensionList());
+        JnCheckAdditionDataVO additionData = jnDataService.findAdditionData(busData);
         additionData.setConfigDocList(docList);
         additionData.setListDocSet(docList.stream().filter(item -> item.getDocType() == DocReviewConstant.DOC_TYPE_LIST).map(JnBusConfigDoc::getDocKey).collect(Collectors.toSet()));
         long time4 = System.currentTimeMillis();
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/impl/JnBusDataServiceImpl.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/impl/JnBusDataServiceImpl.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/impl/JnBusDataServiceImpl.java	(revision 37549)
@@ -102,10 +102,18 @@
     @Override
     @Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
     public JnBusDataVO getBusData(String checkNo) {
+        JnBusDataVO data = getBusDataForCheck(checkNo);
+        data.setLastInvoiceImportData(jnBusMainFileService.findFilePath(checkNo, DocReviewConstant.FILE_TYPE_INVOICE_IMPORT_DATA));
+        data.setLastChangeLogData(getBusDataLastChangeLog(checkNo));
+        return data;
+    }
+
+    @Override
+    @Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
+    public JnBusDataVO getBusDataForCheck(String checkNo) {
         JnBusDataVO data = new JnBusDataVO();
         data.setCheckNo(checkNo);
         data.setDimensionList(jnBusMainDimensionMapper.findListByCheckNo(checkNo));
-
         //查询业务数据
         JnBusMain busMain = jnBusMainMapper.getBusMain(checkNo);
         List<JnBusDoc> docList = jnBusDocMapper.findListByMainId(busMain.getId());
@@ -113,9 +121,7 @@
         Map<String, List<JnBusDocField>> fieldMap = fieldList.stream().collect(Collectors.groupingBy(JnBusDocField::getDocId));
         data.setData(assembleBusData(docList, fieldMap));
         data.setNullDocMap(getNullDocData(data.getData(), docList.stream().map(JnBusDoc::getDocKey).collect(Collectors.toList())));
-        data.setLastInvoiceImportData(jnBusMainFileService.findFilePath(checkNo, DocReviewConstant.FILE_TYPE_INVOICE_IMPORT_DATA));
         data.setBillType(busMain.getBillType());
-        data.setLastChangeLogData(getBusDataLastChangeLog(checkNo));
         data.setMainId(busMain.getId());
         data.setBusMain(busMain);
         return data;
@@ -131,6 +137,10 @@
     @Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
     public List<JnBusMain> findMainListByContainerNo(String containerNo) {
         String[] containerNoArr = containerNo.split("[,，]");
+        //去掉前后空格
+        for (int i = 0; i < containerNoArr.length; i++) {
+            containerNoArr[i] = containerNoArr[i].trim();
+        }
         return jnBusMainMapper.findMainByContainerNoForList(Arrays.asList(containerNoArr));
     }
 
@@ -180,6 +190,7 @@
             main.setPriority(-1);
             EntityUtils.setCreateInfo(main);
             EntityUtils.setUpdatedInfo(main);
+            main.setRecheckState(DocReviewConstant.DOC_INPUT_ING);
         }
         if (data.isNewVersion()) {
             main.setVersion(main.getVersion() == null ? INIT_VERSION : main.getVersion() + 1);
@@ -189,8 +200,10 @@
         //保存主表数据
         main.setCheckResult(DocReviewConstant.CHECK_RESULT_INIT);
         main.setSyncState(DocReviewConstant.SYNC_STATE_NO_SUBMIT);
-        main.setRecheckState(DocReviewConstant.DOC_INPUT_ING);
         main.setDocCollect(getDocCollectStr(data));
+        if (StringUtils.isNotBlank(data.getPort())) {
+            main.setPort(data.getPort());
+        }
         long l = System.currentTimeMillis();
         log.info("saveBusDataNew------处理数据 " + (l - startTime));
         //保存日志 顺序要在保存主表数据之前
@@ -292,7 +305,7 @@
         if (vo.getAttachmentList() != null) {
             if (StringUtils.isNotBlank(vo.getCheckNo())) {
                 List<JnBusMainFile> fileList = jnBusMainFileService.findBusMainFile(vo.getCheckNo());
-                vo.removeOldAttachment(fileList);
+                vo.handleAttachment(fileList);
             }
             if (!vo.getAttachmentList().isEmpty()) {
                 for (JnBusMainFile file : vo.getAttachmentList()) {
@@ -377,32 +390,6 @@
         }
     }
 
-    /**
-     * 获取上一个版本的数据
-     *
-     * @return
-     */
-    private String getLastVersionBusData(String checkNo, boolean newVersion) {
-        String jsonDataStr = "";
-        List<JnBusMainChangeLog> logList = jnBusMainChangeLogMapper.findChangeLogAllDataList(checkNo);
-        if (CollectionUtils.isNotEmpty(logList)) {
-            if (newVersion) {
-                jsonDataStr = logList.get(0).getContent();
-            } else {
-                Integer version1 = logList.get(0).getVersion();
-                if (version1 != null) {
-                    int version = version1 - 1;
-                    if (version > 0) {
-                        logList = logList.stream().filter(item -> Objects.equals(item.getVersion(), version)).collect(Collectors.toList());
-                    }
-                    if (!logList.isEmpty()) {
-                        jsonDataStr = logList.get(logList.size() - 1).getContent();
-                    }
-                }
-            }
-        }
-        return jsonDataStr;
-    }
 
     /**
      * 保存变更日志
@@ -594,6 +581,7 @@
     }
 
     @Override
+    @Transactional
     public int updateBusMainDataByEmail(List<JnEmailUpdateParamVO> list) {
         int rs = 0;
         for (JnEmailUpdateParamVO item : list) {
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/impl/JnDataServiceImpl.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/impl/JnDataServiceImpl.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/impl/JnDataServiceImpl.java	(revision 37549)
@@ -2,6 +2,7 @@
 
 import com.freshport.freight.customs.dao.*;
 import com.freshport.freight.customs.entity.docreview.*;
+import com.freshport.freight.customs.entity.vo.docreview.JnBusDataVO;
 import com.freshport.freight.customs.entity.vo.docreview.JnCheckAdditionDataVO;
 import com.freshport.freight.customs.service.docreview.JnDataFacilitiesService;
 import com.freshport.freight.customs.service.docreview.JnDataFruitDiameterService;
@@ -61,6 +62,8 @@
     private JnDataSizeMapper jnDataSizeMapper;
     @Resource
     private JnDataFumigateInfoMapper jnDataFumigateInfoMapper;
+    @Resource
+    private JnDataTplineMapper jnDataTplineMapper;
     @Autowired
     private JnDataFruitDiameterService jnDataFruitDiameterService;
     @Autowired
@@ -86,11 +89,12 @@
 
     @Override
     @Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
-    public JnCheckAdditionDataVO findAdditionData(List<JnBusMainDimension> dimensionList) {
+    public JnCheckAdditionDataVO findAdditionData(JnBusDataVO vo) {
+        List<JnBusMainDimension> dimensionList = vo.getDimensionList();
         JnCheckAdditionDataVO additionData = new JnCheckAdditionDataVO();
-        String country = "" ;            //国家
-        String productName = "" ;        //品名
-        String dimensionValue = "" ;
+        String country = "";            //国家
+        String productName = "";        //品名
+        String dimensionValue = "";
         for (JnBusMainDimension item : dimensionList) {
             if (StringUtils.equals(item.getDimensionId(), DocReviewConstant.DIMENSION_TRANS_TYPE)) {
                 additionData.setTransType(item.getDimensionValue());
@@ -102,7 +106,7 @@
                 country = item.getDimensionValue();
             }
             if (StringUtils.isNotBlank(dimensionValue)) {
-                dimensionValue += "," ;
+                dimensionValue += ",";
             }
             dimensionValue += item.getDimensionValue();
         }
@@ -123,6 +127,11 @@
         List<JnRulesRegexp> regexps = regexpMapper.findAllList();
         additionData.setRegexpMap(regexps.stream().collect(Collectors.toMap(JnRulesRegexp::getCode, Function.identity(), (i1, i2) -> i1)));
         setFruitDiameterList(additionData, dimensionList);
+
+        //设置运输路线信息
+        if (StringUtils.isNotBlank(vo.getBusMain().getPort())) {
+            additionData.setTplineList(jnDataTplineMapper.findListByCountryAndPort(country, vo.getBusMain().getPort()));
+        }
         return additionData;
     }
 
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/impl/JnRulesInnerServiceImpl.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/impl/JnRulesInnerServiceImpl.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreview/impl/JnRulesInnerServiceImpl.java	(revision 37549)
@@ -5,6 +5,7 @@
 import com.freshport.freight.customs.entity.docreview.*;
 import com.freshport.freight.customs.utils.DocReviewConstant;
 import org.apache.commons.codec.binary.StringUtils;
+import org.apache.commons.collections4.ListUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -37,6 +38,8 @@
     private JnRulesDefineInMapper jnRulesDefineInMapper;
     @Resource
     private JnRulesDefineNotnullMapper jnRulesDefineNotnullMapper;
+    @Resource
+    private JnRulesFieldItemConditionMapper jnRulesFieldItemConditionMapper;
 
     /**
      * 检查重复的docKey
@@ -91,6 +94,7 @@
         List<JnRulesDefineIn> inList = jnRulesDefineInMapper.findListByRuleId(ruleId);
         List<JnRulesDefineCalc> calcList = jnRulesDefineCalcMapper.findListByRuleId(ruleId);
         List<JnRulesDefineSpec> specList = jnRulesDefineSpecMapper.findListByRuleId(ruleId);
+        List<JnRulesFieldItemCondition> conditionList = jnRulesFieldItemConditionMapper.findListByRuleId(ruleId);
 
         //将规则转化成map处理
         List<JnRulesDefine> defineList = new ArrayList<JnRulesDefine>();
@@ -99,7 +103,7 @@
         defineList.addAll(inList);
         defineList.addAll(calcList);
         defineList.addAll(specList);
-        handleRule(fieldList, fieldItemList, defineList);
+        handleRule(fieldList, fieldItemList, defineList, conditionList);
         doc.setFieldList(fieldList);
         return doc;
     }
@@ -118,6 +122,7 @@
         List<JnRulesDefineIn> inList = jnRulesDefineInMapper.findListByRuleIdList(ruleIdList);
         List<JnRulesDefineCalc> calcList = jnRulesDefineCalcMapper.findListByRuleIdList(ruleIdList);
         List<JnRulesDefineSpec> specList = jnRulesDefineSpecMapper.findListByRuleIdList(ruleIdList);
+        List<JnRulesFieldItemCondition> conditionList = jnRulesFieldItemConditionMapper.findListByRuleIdList(ruleIdList);
         //将规则转化成map处理
         List<JnRulesDefine> defineList = new ArrayList<JnRulesDefine>();
         defineList.addAll(notNullLIst);
@@ -125,7 +130,7 @@
         defineList.addAll(inList);
         defineList.addAll(calcList);
         defineList.addAll(specList);
-        handleRule(fieldList, fieldItemList, defineList);
+        handleRule(fieldList, fieldItemList, defineList, conditionList);
         return fieldList;
     }
 
@@ -143,6 +148,7 @@
         List<JnRulesDefineIn> inList = jnRulesDefineInMapper.findListByDocList(docKeyList);
         List<JnRulesDefineCalc> calcList = jnRulesDefineCalcMapper.findListByDocList(docKeyList);
         List<JnRulesDefineSpec> specList = jnRulesDefineSpecMapper.findListByDocList(docKeyList);
+        List<JnRulesFieldItemCondition> conditionList = jnRulesFieldItemConditionMapper.findListByDocList(docKeyList);
         //将规则转化成map处理
         List<JnRulesDefine> defineList = new ArrayList<JnRulesDefine>();
         defineList.addAll(notNullLIst);
@@ -150,7 +156,7 @@
         defineList.addAll(inList);
         defineList.addAll(calcList);
         defineList.addAll(specList);
-        handleRule(fieldList, fieldItemList, defineList);
+        handleRule(fieldList, fieldItemList, defineList, conditionList);
         return fieldList;
     }
 
@@ -161,10 +167,12 @@
      * @param fieldItemList
      * @param defineList
      */
-    private void handleRule(List<JnRulesFieldInner> fieldList, List<JnRulesFieldItem> fieldItemList, List<JnRulesDefine> defineList) {
+    private void handleRule(List<JnRulesFieldInner> fieldList, List<JnRulesFieldItem> fieldItemList, List<JnRulesDefine> defineList, List<JnRulesFieldItemCondition> conditionList) {
         Map<String, JnRulesDefine> defineMap = defineList.stream().collect(Collectors.toMap(JnRulesDefine::getItemId, Function.identity()));
+        Map<String, List<JnRulesFieldItemCondition>> conditionMap = conditionList.stream().collect(Collectors.groupingBy(JnRulesFieldItemCondition::getItemId));
         for (JnRulesFieldItem item : fieldItemList) {
             item.setDefine(defineMap.get(item.getId()));
+            item.setConditionList(conditionMap.get(item.getId()));
             if (item.getDefine() != null) {
                 item.setDefineJson(JSONObject.parseObject(JSONObject.toJSONString(item.getDefine())));
             }
@@ -193,6 +201,7 @@
         rs += jnRulesDefineInMapper.deleteByRuleId(ruleId);
         rs += jnRulesDefineCalcMapper.deleteByRuleId(ruleId);
         rs += jnRulesDefineSpecMapper.deleteByRuleId(ruleId);
+        rs += jnRulesFieldItemConditionMapper.deleteByRuleId(ruleId);
         return rs;
     }
 
@@ -205,13 +214,16 @@
      */
     private int saveInnerRuleField(String ruleId, String docId, List<JnRulesFieldInner> fieldInnerList) {
         int rs = 0;
+        List<JnRulesFieldItemCondition> conditionList = new ArrayList<JnRulesFieldItemCondition>();
+        List<JnRulesFieldItem> itemList = new ArrayList<JnRulesFieldItem>();
+        List<JnRulesFieldInner> innerList = new ArrayList<JnRulesFieldInner>();
         for (JnRulesFieldInner field : fieldInnerList) {
             //保存字段信息
             field.setId(UUID.randomUUID().toString());
             field.setRuleId(ruleId);
             field.setDocId(docId);
             field.setCrtTime(new Date());
-            rs += jnRulesFieldInnerMapper.insert(field);
+            innerList.add(field);
 
             //保存字段规则
             for (JnRulesFieldItem item : field.getFieldItemList()) {
@@ -219,10 +231,35 @@
                 item.setRuleId(ruleId);
                 item.setDocId(docId);
                 item.setFieldId(field.getId());
-                rs += jnRulesFieldItemMapper.insert(item);
+                if (item.getConditionList() != null && !item.getConditionList().isEmpty()) {
+                    item.getConditionList().forEach(c -> {
+                        c.setId(UUID.randomUUID().toString());
+                        c.setRuleId(ruleId);
+                        c.setDocId(docId);
+                        c.setFieldId(field.getId());
+                        c.setItemId(item.getId());
+                    });
+                    conditionList.addAll(item.getConditionList());
+                }
+                itemList.add(item);
                 rs += saveRuleDefine(item);
             }
         }
+        //批量添加字段
+        List<List<JnRulesFieldInner>> fieldInnerPartition = ListUtils.partition(innerList, 100);
+        for (List<JnRulesFieldInner> item : fieldInnerPartition) {
+            rs += jnRulesFieldInnerMapper.batchInsert(item);
+        }
+        //批量添加字段明细
+        List<List<JnRulesFieldItem>> fieldItemPartition = ListUtils.partition(itemList, 100);
+        for (List<JnRulesFieldItem> item : fieldItemPartition) {
+            rs += jnRulesFieldItemMapper.batchInsert(item);
+        }
+        //批量添加条件
+        List<List<JnRulesFieldItemCondition>> conditionPartition = ListUtils.partition(conditionList, 100);
+        for (List<JnRulesFieldItemCondition> item : conditionPartition) {
+            rs += jnRulesFieldItemConditionMapper.batchInsert(item);
+        }
         return rs;
     }
 
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreviewrule/ConditionCheckService.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreviewrule/ConditionCheckService.java	(revision 0)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreviewrule/ConditionCheckService.java	(revision 37549)
@@ -0,0 +1,70 @@
+package com.freshport.freight.customs.service.docreviewrule;
+
+import com.freshport.freight.customs.entity.docreview.EPort;
+import com.freshport.freight.customs.entity.docreview.ERulesCondition;
+import com.freshport.freight.customs.entity.docreview.JnRulesFieldItem;
+import com.freshport.freight.customs.entity.docreview.JnRulesFieldItemCondition;
+import com.freshport.freight.customs.entity.vo.docreview.JnBusDataVO;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+/**
+ * 条件检查
+ */
+@Slf4j
+@Component
+public class ConditionCheckService {
+    /**
+     * 满足条件
+     *
+     * @return
+     */
+    public boolean meetCondition(JnRulesFieldItem item, JnBusDataVO busData) {
+        boolean checkRs = true;
+        if (item.getConditionList() != null && !item.getConditionList().isEmpty()) {
+            //暂时只取第一个
+            JnRulesFieldItemCondition condition = item.getConditionList().get(0);
+            checkRs = checkCondition(condition, busData);
+        }
+        return checkRs;
+    }
+
+    /**
+     * 检查条件
+     *
+     * @param condition
+     * @param busData
+     * @return
+     */
+    private boolean checkCondition(JnRulesFieldItemCondition condition, JnBusDataVO busData) {
+        boolean checkRs = true;
+        if (condition.getCondition() == null) {
+            checkRs = false;
+        } else {
+            ERulesCondition enumByType = ERulesCondition.convertEnumByType(condition.getCondition());
+            if (enumByType == null) {
+                log.error("在线审单-条件【" + condition.getCondition() + "】未实现！");
+                checkRs = false;
+            } else {
+                switch (enumByType) {
+                    case PORT_IS_YOU_YI_GUAN:
+                        checkRs = isYouYiGuan(busData);
+                        break;
+                }
+            }
+        }
+        return checkRs;
+    }
+
+    /**
+     * 是友谊关
+     *
+     * @param busData
+     * @return
+     */
+    private boolean isYouYiGuan(JnBusDataVO busData) {
+        String port = busData.getBusMain().getPort();
+        return StringUtils.equals(port, EPort.YOU_YI_GUAN.name);
+    }
+}
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreviewrule/RuleCheckService.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreviewrule/RuleCheckService.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreviewrule/RuleCheckService.java	(revision 37549)
@@ -54,6 +54,8 @@
     private UltraLightWarningCheckService ultraLightWarningCheckService;
     @Autowired
     private MultipleNullJudgeCheckService multipleNullJudgeCheckService;
+    @Autowired
+    private ConditionCheckService conditionCheckService;
 
     /**
      * 获取单内检查规则
@@ -226,10 +228,10 @@
                 List<JnRulesFieldItem> preRuleList = getRuleListByPreFlag(groupRuleItemList, true);
                 List<JnRulesFieldItem> noPreRuleList = getRuleListByPreFlag(groupRuleItemList, false);
                 //前置规则检查
-                boolean preCheckRs = groupRuleCheck(inner, preRuleList, busData.getData(), additionData, result, rowIndex, specialCheckRs);
+                boolean preCheckRs = groupRuleCheck(inner, preRuleList, busData, additionData, result, rowIndex, specialCheckRs);
                 //非前置
                 if (preCheckRs && nextCheck) {
-                    boolean itemCheckRs = groupRuleCheck(inner, noPreRuleList, busData.getData(), additionData, result, rowIndex, specialCheckRs);
+                    boolean itemCheckRs = groupRuleCheck(inner, noPreRuleList, busData, additionData, result, rowIndex, specialCheckRs);
                     groupCheckRs.put(groupKey, itemCheckRs);
                 } else {
                     groupCheckRs.put(groupKey, preCheckRs);
@@ -322,47 +324,49 @@
      *
      * @return
      */
-    private boolean groupRuleCheck(JnRulesFieldInner inner, List<JnRulesFieldItem> ruleList, JSONObject data, JnCheckAdditionDataVO additionData, JnBusCheckRsVO result, int index, Map<String, Boolean> specialCheckRs) {
+    private boolean groupRuleCheck(JnRulesFieldInner inner, List<JnRulesFieldItem> ruleList, JnBusDataVO vo, JnCheckAdditionDataVO additionData, JnBusCheckRsVO result, int index, Map<String, Boolean> specialCheckRs) {
         boolean checkRs = true;
         int itemIndex = 0;
         Set<String> ruleIdSet = new HashSet<String>();
         for (JnRulesFieldItem item : ruleList) {
-            boolean itemCheckRs = false;
-            BaseInnerRuleCheckNewService innerRuleCheckService = this.getInnerRuleCheckService(item.getRuleType(), additionData.getListDocSet());
-            //特殊规则标识
-            boolean specialRuleFlag = innerRuleCheckService instanceof SpecialCheckNewService;
-            //执行检查标识，默认执行
-            boolean executeCheck = true;
-            if (specialRuleFlag) {
-                //如果是特殊规则且已经执行过对应的规则，设置执行检查标识为false.防止特殊规则在列表值的情况下多次执行
-                if (specialCheckRs.containsKey(item.getId())) {
-                    itemCheckRs = specialCheckRs.get(item.getId());
-                    executeCheck = false;
+            if (conditionCheckService.meetCondition(item, vo)) {
+                boolean itemCheckRs = false;
+                BaseInnerRuleCheckNewService innerRuleCheckService = this.getInnerRuleCheckService(item.getRuleType(), additionData.getListDocSet());
+                //特殊规则标识
+                boolean specialRuleFlag = innerRuleCheckService instanceof SpecialCheckNewService;
+                //执行检查标识，默认执行
+                boolean executeCheck = true;
+                if (specialRuleFlag) {
+                    //如果是特殊规则且已经执行过对应的规则，设置执行检查标识为false.防止特殊规则在列表值的情况下多次执行
+                    if (specialCheckRs.containsKey(item.getId())) {
+                        itemCheckRs = specialCheckRs.get(item.getId());
+                        executeCheck = false;
+                    }
                 }
-            }
-            if (executeCheck) {
-                JnBusCheckFieldValueVO fieldValue = innerRuleCheckService.getFieldValue(item, data, index);
-                itemCheckRs = innerRuleCheckService.ruleCheck(inner, item, fieldValue, additionData, result);
-            }
-            if (specialRuleFlag && executeCheck) {
-                //特殊规则，且首次执行时
-                specialCheckRs.put(item.getId(), itemCheckRs);
-            }
+                if (executeCheck) {
+                    JnBusCheckFieldValueVO fieldValue = innerRuleCheckService.getFieldValue(item, vo.getData(), index);
+                    itemCheckRs = innerRuleCheckService.ruleCheck(inner, item, fieldValue, additionData, result);
+                }
+                if (specialRuleFlag && executeCheck) {
+                    //特殊规则，且首次执行时
+                    specialCheckRs.put(item.getId(), itemCheckRs);
+                }
 
-            if (!itemCheckRs) {
-                //保存检查失败的规则id
-                ruleIdSet.add(item.getRuleId());
+                if (!itemCheckRs) {
+                    //保存检查失败的规则id
+                    ruleIdSet.add(item.getRuleId());
+                }
+                if (itemIndex == 0) {
+                    //初始化第一次检查值
+                    checkRs = itemCheckRs;
+                }
+                if (item.getGroupCollectSign() == null || item.getGroupCollectSign() == DocReviewConstant.PRE_RULE_CHECK_AND) {
+                    checkRs = itemCheckRs && checkRs;
+                } else {
+                    checkRs = itemCheckRs || checkRs;
+                }
+                itemIndex++;
             }
-            if (itemIndex == 0) {
-                //初始化第一次检查值
-                checkRs = itemCheckRs;
-            }
-            if (item.getGroupCollectSign() == null || item.getGroupCollectSign() == DocReviewConstant.PRE_RULE_CHECK_AND) {
-                checkRs = itemCheckRs && checkRs;
-            } else {
-                checkRs = itemCheckRs || checkRs;
-            }
-            itemIndex++;
         }
         //如果检查成功，清除掉当前规则的所有不过的检查结果
         if (checkRs) {
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreviewrule/impl/InCheckNewService.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreviewrule/impl/InCheckNewService.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreviewrule/impl/InCheckNewService.java	(revision 37549)
@@ -12,6 +12,9 @@
 import com.freshport.freight.customs.utils.CommonInfo;
 import com.freshport.freight.customs.utils.DocReviewConstant;
 import com.freshport.freight.customs.utils.RepeatMsgCheckUtil;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
@@ -160,6 +163,10 @@
             //品种
             String[] fieldValueArr = getFieldValueArr(data, define.getSrcField1(), index);
             valueVO.setSrcField1ValueArr(fieldValueArr);
+        } else if (StringUtils.equals(targetValue, DocReviewConstant.CONTAINS_TYPE_TPLINE)) {
+            //运输路线
+            String[] fieldValueArr = getFieldValueArr(data, define.getSrcField1(), index);
+            valueVO.setSrcField1ValueArr(fieldValueArr);
         } else if (StringUtils.equals(targetValue, DocReviewConstant.CONTAINS_TYPE_IN)) {
             //自定义包含
             index = -1;
@@ -219,6 +226,8 @@
             rs = sizeContains(define, fieldValue, additionData, errorMsg);
         } else if (StringUtils.equals(targetValue, DocReviewConstant.CONTAINS_TYPE_LEVEL)) {
             rs = levelContains(define, fieldValue, additionData, errorMsg);
+        } else if (StringUtils.equals(targetValue, DocReviewConstant.CONTAINS_TYPE_TPLINE)) {
+            rs = tpLineContains(define, fieldValue, additionData, errorMsg);
         } else if (StringUtils.equals(targetValue, DocReviewConstant.CONTAINS_TYPE_FUMIGATE_INFO)) {
             rs = fumigateInfoContains(define, fieldValue, additionData, errorMsg);
         } else {
@@ -233,7 +242,111 @@
         return rs;
     }
 
+
     /**
+     * 运输路线
+     *
+     * @return
+     */
+    private boolean tpLineContains(JnRulesDefineIn define, JnBusCheckFieldValueVO fieldValue, JnCheckAdditionDataVO additionData, StringBuilder errorMsg) {
+        boolean checkRs = true;
+        String[] tpLineArr = fieldValue.getSrcField1ValueArr();
+        if (!isNullValue(tpLineArr)) {
+            if (additionData.getTplineList() == null || additionData.getTplineList().isEmpty()) {
+                checkRs = false;
+                errorMsg.append("运输路线信息:数据维护表空");
+            } else {
+                checkRs = tpLineCheck(tpLineArr[0], additionData.getTplineList().get(0), errorMsg);
+            }
+        }
+        return checkRs;
+    }
+
+    /**
+     * 运输路线检查
+     *
+     * @return
+     */
+    private boolean tpLineCheck(String value, JnDataTpline tpLine, StringBuilder errorMsg) {
+        //处理数据
+        List<TpLineNode> tpLines = new ArrayList<TpLineNode>();
+        tpLines.add(TpLineNode.buildTpLineItem("原产国", tpLine.getStartNode(), value));
+        String[] middleNodeArr = tpLine.getMiddleNode().split(",");
+        for (String middleNode : middleNodeArr) {
+            tpLines.add(TpLineNode.buildTpLineItem("中间国", middleNode, value));
+        }
+        tpLines.add(TpLineNode.buildTpLineItem("目的港", tpLine.getEndNode(), value));
+
+        //判断非空
+        boolean checkRs = true;
+        for (TpLineNode item : tpLines) {
+            if (item.getIndexList().isEmpty()) {
+                checkRs = false;
+                errorMsg.append(item.node).append("【").append(item.nodeValue).append("】不能为空").append(DocReviewConstant.SPLIT_NEW_LINE);
+            } else {
+                if (StringUtils.equals(item.node, "目的港")) {
+                    if (item.getIndexList().size() > 1) {
+                        checkRs = false;
+                        errorMsg.append(item.node).append("【").append(item.nodeValue).append("】只能出现一次").append(DocReviewConstant.SPLIT_NEW_LINE);
+                    }
+                }
+            }
+        }
+        //检查顺序
+        tpLines = tpLines.stream().filter(item -> !item.getIndexList().isEmpty()).collect(Collectors.toList());
+        for (int i = 0; i < tpLines.size() - 1; i++) {
+            TpLineNode tpl1 = tpLines.get(i);
+            TpLineNode tpl2 = tpLines.get(i + 1);
+            if (!tpl1.compareIndexLtN2(tpl2)) {
+                errorMsg.append(tpl1.node).append("【").append(tpl1.nodeValue).append("】要在").append(tpl2.node).append("【").append(tpl2.nodeValue).append("】之前").append(DocReviewConstant.SPLIT_NEW_LINE);
+                checkRs = false;
+            }
+        }
+        return checkRs;
+    }
+
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class TpLineNode {
+        private String node;
+        private String nodeValue;
+        private List<Integer> indexList;
+
+        /**
+         * 构造运输路线结点
+         *
+         * @param node
+         * @param nodeValue
+         * @param tpline
+         * @return
+         */
+        public static TpLineNode buildTpLineItem(String node, String nodeValue, String tpline) {
+            TpLineNode item = new TpLineNode();
+            item.node = node;
+            item.nodeValue = nodeValue;
+            item.indexList = new ArrayList<Integer>();
+
+            int i = tpline.indexOf(nodeValue);
+            while (i >= 0) {
+                item.indexList.add(i);
+                i = tpline.indexOf(nodeValue, i + 1);
+            }
+            return item;
+        }
+
+        /**
+         * 比较索引
+         *
+         * @param node
+         * @return
+         */
+        public boolean compareIndexLtN2(TpLineNode node) {
+            return indexList.get(indexList.size() - 1) < node.indexList.get(0);
+        }
+    }
+
+    /**
      * 尺寸
      *
      * @return
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreviewrule/impl/MultipleNullJudgeCheckService.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreviewrule/impl/MultipleNullJudgeCheckService.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/docreviewrule/impl/MultipleNullJudgeCheckService.java	(revision 37549)
@@ -1,10 +1,7 @@
 package com.freshport.freight.customs.service.docreviewrule.impl;
 
 import com.alibaba.fastjson.JSONObject;
-import com.freshport.freight.customs.entity.docreview.JnBusMainCheckRs;
-import com.freshport.freight.customs.entity.docreview.JnRulesDefineNotnull;
-import com.freshport.freight.customs.entity.docreview.JnRulesFieldInner;
-import com.freshport.freight.customs.entity.docreview.JnRulesFieldItem;
+import com.freshport.freight.customs.entity.docreview.*;
 import com.freshport.freight.customs.entity.vo.docreview.JnBusCheckFieldValueVO;
 import com.freshport.freight.customs.entity.vo.docreview.JnBusCheckRsVO;
 import com.freshport.freight.customs.entity.vo.docreview.JnCheckAdditionDataVO;
@@ -16,8 +13,6 @@
 /**
  * 多字段非空判断
  * <p>
- * 1：有一个不为空
- * 2：前一个不为空后一个必定不为空
  */
 @Component
 public class MultipleNullJudgeCheckService extends BaseInnerRuleCheckNewService {
@@ -44,24 +39,93 @@
         return vo;
     }
 
+//    @Override
+//    public boolean ruleCheck(JnRulesFieldInner inner, JnRulesFieldItem rules, JnBusCheckFieldValueVO fieldValue, JnCheckAdditionDataVO additionData, JnBusCheckRsVO result) {
+//        boolean checkRs = true;
+//        String[] srcFieldValueArr = fieldValue.getSrcField1ValueArr();
+//        String[] tagFieldValueArr = fieldValue.getSrcField2ValueArr();
+//        if (srcFieldValueArr.length == tagFieldValueArr.length) {
+//            checkRs = !(isNullValue(srcFieldValueArr[0]) && isNullValue(tagFieldValueArr[0]));
+//        } else {
+//            checkRs = !(isNullValue(srcFieldValueArr) && isNullValue(tagFieldValueArr));
+//        }
+//        if (!checkRs) {
+//            JnRulesDefineNotnull rule = (JnRulesDefineNotnull) rules.getDefine();
+//            JnBusMainCheckRs rs = ruleDefine2CheckRs(inner, rules, fieldValue.getIndex(), "");
+//            String fieldName1 = getFieldName(rule.getSrcField1());
+//            String fieldName2 = getFieldName(rule.getSrcField2());
+//            rs.setErrorMsg((fieldValue.getIndex() >= 0 ? "第" + (fieldValue.getIndex() + 1) + "行 " : " ") + " 【" + fieldName1 + "】 【" + fieldName2 + "】不能同时为空");
+//            result.addCheckResult(rs);
+//        }
+//        return checkRs;
+//    }
+
     @Override
     public boolean ruleCheck(JnRulesFieldInner inner, JnRulesFieldItem rules, JnBusCheckFieldValueVO fieldValue, JnCheckAdditionDataVO additionData, JnBusCheckRsVO result) {
         boolean checkRs = true;
+        JnRulesDefineNotnull rule = (JnRulesDefineNotnull) rules.getDefine();
         String[] srcFieldValueArr = fieldValue.getSrcField1ValueArr();
         String[] tagFieldValueArr = fieldValue.getSrcField2ValueArr();
-        if (srcFieldValueArr.length == tagFieldValueArr.length) {
-            checkRs = !(isNullValue(srcFieldValueArr[0]) && isNullValue(tagFieldValueArr[0]));
-        } else {
-            checkRs = !(isNullValue(srcFieldValueArr) && isNullValue(tagFieldValueArr));
+        EMultipleJudge judgeType = EMultipleJudge.TYPE1;
+        if (rule.getJudgeType() != null) {
+            judgeType = EMultipleJudge.convertEnumByType(rule.getJudgeType());
         }
+        checkRs = valueCheck(judgeType, srcFieldValueArr, tagFieldValueArr);
         if (!checkRs) {
-            JnRulesDefineNotnull rule = (JnRulesDefineNotnull) rules.getDefine();
             JnBusMainCheckRs rs = ruleDefine2CheckRs(inner, rules, fieldValue.getIndex(), "");
             String fieldName1 = getFieldName(rule.getSrcField1());
             String fieldName2 = getFieldName(rule.getSrcField2());
-            rs.setErrorMsg((fieldValue.getIndex() >= 0 ? "第" + (fieldValue.getIndex() + 1) + "行 " : " ") + " 【" + fieldName1 + "】 【" + fieldName2 + "】不能同时为空");
+            rs.setErrorMsg((fieldValue.getIndex() >= 0 ? "第" + (fieldValue.getIndex() + 1) + "行 " : " ") + formatErrorMsg(judgeType, fieldName1, fieldName2));
             result.addCheckResult(rs);
         }
         return checkRs;
     }
+
+    /**
+     * 格式化错误消息
+     *
+     * @return
+     */
+    private String formatErrorMsg(EMultipleJudge juditType, String fieldName1, String fieldName2) {
+        String errorMsg = "";
+        switch (juditType) {
+            case TYPE1:
+                //全不为空
+                errorMsg = "【" + fieldName1 + "】 【" + fieldName2 + "】不能同时为空";
+                break;
+            case TYPE2:
+                //全为空
+                errorMsg = "【" + fieldName1 + "】 【" + fieldName2 + "】要全为空";
+                break;
+            case TYPE3:
+                //全不为空 或 1为空时2也可以为空
+                errorMsg = "【" + fieldName1 + "】 【" + fieldName2 + "】不能同时为空 或 【" + fieldName1 + "】为空时【" + fieldName2 + "】也可以为空";
+                break;
+        }
+        return errorMsg;
+    }
+
+    /**
+     * 值检查
+     *
+     * @return
+     */
+    private boolean valueCheck(EMultipleJudge juditType, String[] srcFieldValueArr, String[] tagFieldValueArr) {
+        boolean checkRs = true;
+        switch (juditType) {
+            case TYPE1:
+                //全不为空
+                checkRs = !(isNullValue(srcFieldValueArr) && isNullValue(tagFieldValueArr));
+                break;
+            case TYPE2:
+                //全为空
+                checkRs = isNullValue(srcFieldValueArr) && isNullValue(tagFieldValueArr);
+                break;
+            case TYPE3:
+                //全不为空 或 1为空时2也可以为空
+                checkRs = !(isNullValue(srcFieldValueArr) && isNullValue(tagFieldValueArr)) || isNullValue(srcFieldValueArr);
+                break;
+        }
+        return checkRs;
+    }
 }
\ No newline at end of file
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/impl/BusinessOrderServiceImpl.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/impl/BusinessOrderServiceImpl.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/impl/BusinessOrderServiceImpl.java	(revision 37549)
@@ -532,10 +532,33 @@
             if (!CommonUtils.isEmpty(vo.getIntegratedStatus())) {
                 vo.setIntegratedStatusName(CustomsUtils.getAuditStatusName(vo.getIntegratedStatus()));
             }
+            //处理字段复核
+            handleCheckConfirm(vo);
         }
     }
 
     /**
+     * handleCheckConfirm(处理字段复核)    
+     * @param vo  
+     * @return void  
+     * @Exception 异常对象    
+     * @author Think  
+     * @date 2024-03-22 14:08:11
+     */
+    private void handleCheckConfirm(BusinessOrderDongpinVo vo) {
+        if(CommonUtils.isEmpty(vo.getConfirmStatus())){
+           vo.setConfirmStatus(CommonInfo.COMMON_NO);//0- 未确认
+           vo.setConfirmStatusName(CustomsInfo.CONFIRM_NOT_SURE);
+        }else{
+            if(CommonInfo.COMMON_YES.equals(vo.getConfirmStatus())){//0- 未确认
+                vo.setConfirmStatusName(CustomsInfo.CONFIRM_SURE);
+            }else{
+                vo.setConfirmStatusName(CustomsInfo.CONFIRM_NOT_SURE);
+            }
+        }
+    }
+
+    /**
      * 报关维度查询功能
      * bgOrderQuery
      *
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/impl/FileUploadServiceImpl.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/impl/FileUploadServiceImpl.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/impl/FileUploadServiceImpl.java	(revision 37549)
@@ -110,7 +110,7 @@
      * date：2020年9月11日 下午2:15:27    
      *  @version
      */
-    public String createFileDirectory(String date, String ywbh) {
+    private String createFileDirectory(String date, String ywbh) {
         File dir = new File(CustomsInfo.HHDZ_FILEUPLOAD_PATH + date);
         if (!dir.exists()) {
             dir.mkdirs();
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/impl/JnQgcwConfirmResultServiceImpl.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/impl/JnQgcwConfirmResultServiceImpl.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/impl/JnQgcwConfirmResultServiceImpl.java	(revision 37549)
@@ -1,13 +1,40 @@
 package com.freshport.freight.customs.service.impl;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+import javax.annotation.Resource;
+
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
+import com.alibaba.fastjson.JSONObject;
+import com.freshport.freight.common.constant.CommonInfo;
+import com.freshport.freight.common.exception.BaseException;
+import com.freshport.freight.common.redisLock.DistributedRedisLock;
+import com.freshport.freight.common.util.CommonUtils;
+import com.freshport.freight.common.util.EntityUtils;
+import com.freshport.freight.customs.dao.JnQgcwConfirmRecordMapper;
+import com.freshport.freight.customs.dao.JnQgcwConfirmResultMapper;
+import com.freshport.freight.customs.dao.YwBgMapper;
+import com.freshport.freight.customs.dao.YwHddzExtendMapper;
+import com.freshport.freight.customs.entity.JnQgcwConfirmRecord;
+import com.freshport.freight.customs.entity.JnQgcwConfirmResult;
+import com.freshport.freight.customs.entity.YwBgVo;
+import com.freshport.freight.customs.entity.vo.JnQgcwConfirmResultStatusVo;
+import com.freshport.freight.customs.entity.vo.JnQgcwConfirmResultVo;
+import com.freshport.freight.customs.entity.vo.TagItemVo;
 import com.freshport.freight.customs.service.JnQgcwConfirmResultService;
+import com.freshport.freight.customs.utils.CustomsInfo;
 
 import lombok.extern.slf4j.Slf4j;
 
-/**
- *     
+/**  
  * 项目名称：ff-customs    
  * 类名称：JnQgcwConfirmResultServiceImpl    
  * 类描述： 清关船务确认结果记录ServiceImpl    
@@ -23,5 +50,348 @@
 @Slf4j
 @Service("jnQgcwConfirmResultService")
 public class JnQgcwConfirmResultServiceImpl implements JnQgcwConfirmResultService {
+    
+    @Resource
+    private  JnQgcwConfirmResultMapper jnQgcwConfirmResultMapper;
 
+    @Resource
+    private  JnQgcwConfirmRecordMapper jnQgcwConfirmRecordMapper;
+
+    @Resource
+    private YwBgMapper ywBgMapper;
+    @Resource
+    private YwHddzExtendMapper ywHddzExtendMapper;
+    
+    private static final  String TYPE_SUCCESS="success";
+    
+    private static final  String TYPE_WARING="warning";
+    
+    private static final String TYPE_INFO ="info";
+    
+    private static final String NO_BC="无驳船";
+    
+    private static final String ROLE_QG="单证-清关:";
+    private static final String ROLE_ZZ="船务-中转:";
+    private static final String ROLE_BC="驳船-驳船:";
+    /**
+     * 复核确认操作
+     */
+    @Transactional
+    @Override
+    public int confirmResult(JnQgcwConfirmResultVo resultVo) {
+        int i=0;
+        String  redisLockcode = "jn_qgcw_confirm_result_"+resultVo.getYwbh();
+        try{
+             DistributedRedisLock.acquire(redisLockcode);
+            //根据业务编号和type(操作来源) 查下确认结果表 看下是否已经操作过，
+            //如果没有操作过，新增， 如果操作过 更新
+            JnQgcwConfirmResult result = jnQgcwConfirmResultMapper.queryResultByYwbhType(resultVo);
+            
+            if(!CommonUtils.isEmpty(result)){
+//                //判断系统内复核确认状态和本次复核状态是否一致
+//                if(resultVo.getConfirmStatus().equals(result.getConfirmStatus())){
+//                    //提示
+//                    throw new BaseException("confirmResult","该数据已经提交确认，请先撤销确认后再提交");
+//                }
+                //更新数据
+                BeanUtils.copyProperties(resultVo, result);
+                EntityUtils.setUpdatedInfo(result);
+                i=jnQgcwConfirmResultMapper.updateByPrimaryKey(result);
+            }else{
+                //新曾数据
+                result = new JnQgcwConfirmResult();
+                BeanUtils.copyProperties(resultVo, result);
+                result.setId(UUID.randomUUID().toString());
+                result.setCancleLock(CommonInfo.COMMON_YES);//新增标记报关未操作解锁
+                EntityUtils.setCreatAndUpdatInfo(result);
+                i=jnQgcwConfirmResultMapper.insert(result);
+            }
+            saveConfirmRecord(result);
+        }catch( Exception e){
+            log.error("confirmResult_error", e.getMessage());
+            throw e;
+        }finally{
+            DistributedRedisLock.release(redisLockcode);
+        }
+        return i;
+    }
+
+    /**
+     * saveConfirmRecord(组装保存确认，取消确认操作记录表)    
+     * @param result  
+     * @return void  
+     * @Exception 异常对象    
+     * @author Think  
+     * @date 2024-03-21 15:48:20
+     */
+    private void saveConfirmRecord(JnQgcwConfirmResult result) {
+        //更新记录表
+        JnQgcwConfirmRecord record = new JnQgcwConfirmRecord();
+        record.setBgid(result.getBgid());
+        record.setConfirmStatus(result.getConfirmStatus());
+        record.setConfirmTime(result.getConfirmTime());
+        record.setConfirmUser(result.getConfirmUser());
+        record.setConfirmUserName(result.getConfirmUserName());
+        record.setId(UUID.randomUUID().toString());
+        record.setResultId(result.getId());
+        record.setType(result.getType());
+        record.setYwbh(result.getYwbh());
+        record.setCancleLock(result.getCancleLock());
+        EntityUtils.setCreateInfo(record);
+        jnQgcwConfirmRecordMapper.insert(record);
+    }
+
+    /**
+     * 复核取消确认操作
+     */
+    @Transactional
+    @Override
+    public int cancleResult(JnQgcwConfirmResultVo resultVo) {
+        int i=0;
+        String  redisLockcode = "jn_qgcw_confirm_result_"+resultVo.getYwbh();
+        try{
+             DistributedRedisLock.acquire(redisLockcode);
+             //根据业务编号和type(操作来源) 查下确认结果表 看下是否已经操作过，如果没有操作过，新增， 如果操作过 更新
+             JnQgcwConfirmResult result = jnQgcwConfirmResultMapper.queryResultByYwbhType(resultVo);
+             //清关判断，船务驳船不判断 , 数据库中的解锁状态是未解锁标记状态
+             if(CommonInfo.COMMON_YES.equals(resultVo.getType()) && CommonInfo.COMMON_YES.equals(result.getCancleLock())){
+                 //判断报关申报发送状态，返回提示
+                 checkBgSendStatus(resultVo);
+             }
+             
+            if(!CommonUtils.isEmpty(result)){
+                saveConfirmRecord(result);
+                //更新数据
+                BeanUtils.copyProperties(resultVo, result);
+                EntityUtils.setUpdatedInfo(result);
+                result.setConfirmTime(null);
+                result.setConfirmUser(null);
+                result.setConfirmUserName(null);
+                result.setCancleLock(CommonInfo.COMMON_YES);//取消时候默认是否报关解锁标记复位
+                i=jnQgcwConfirmResultMapper.updateByPrimaryKey(result);
+            }else{
+                throw new BaseException("cancleConfirm","该票未提交确认，无需撤销");
+            }
+        }catch( Exception e){
+            log.error("cancleResult_error", e.getMessage());
+            throw e;
+        }finally{
+            DistributedRedisLock.release(redisLockcode);
+        }
+        return i;
+    }
+
+    /**
+     * checkBgSendStatus(判断报关申报发送状态)    
+     * @param resultVo  
+     * @return void  
+     * @Exception 异常对象    
+     * @author Think  
+     * @date 2024-03-21 17:46:26
+     */
+    private void checkBgSendStatus(JnQgcwConfirmResultVo resultVo) {
+        //判断业务表是否已经报关(申报类型为空或者待定，且报关时间不为空；2 申报类型未调整，不调整，二次完整报关时间不为空）
+         YwBgVo bgVo = ywBgMapper.queryYwBgVoByYwbhAndBgid(resultVo.getYwbh(),resultVo.getBgid());
+         String sblx = CommonUtils.isEmpty(bgVo.getSblx())?"0" :bgVo.getSblx();
+         if(CustomsInfo.YW_SBZT_TZ_CODE.equals(sblx) || CustomsInfo.YW_SBZT_BTZ_CODE.equals(sblx)){
+             //清关申报状态 调整, 不调整
+             if(!CommonUtils.isEmpty(bgVo.getEcwzbgsj())){
+                 throw new BaseException("cancleConfirm","报关已经申报,请联系报关组周杰解锁后，再操作");
+             }
+         }else if(CustomsInfo.YW_SBZT_DD_CODE.equals(sblx) || CustomsInfo.YW_SBZT_NULL_CODE.equals(sblx)){
+             // 清关申报状态 待定,空,没有填写
+             if(!CommonUtils.isEmpty(bgVo.getBgsj())){
+                 throw new BaseException("cancleConfirm","报关已经申报,请联系报关组周杰解锁后，再操作");
+             }
+         }
+    }
+
+    /**
+     * 报关解锁复核
+     */
+    @Transactional
+    @Override
+    public int unlockConfirmResult(JnQgcwConfirmResultVo resultVo) {
+        int i=0;
+        String  redisLockcode = "jn_qgcw_confirm_result_"+resultVo.getYwbh();
+        try{
+             DistributedRedisLock.acquire(redisLockcode);
+             //根据业务编号和type(操作来源) 查下确认结果表 看下是否已经操作过，如果没有操作过，新增， 如果操作过 更新
+             JnQgcwConfirmResult result = jnQgcwConfirmResultMapper.queryResultByYwbhType(resultVo);
+
+            if(!CommonUtils.isEmpty(result) && "1".equals(result.getConfirmStatus())){
+                //更新数据
+                EntityUtils.setUpdatedInfo(result);
+                result.setCancleLock(CommonInfo.COMMON_NO);//取消时候默认是否报关解锁标记复位
+                i=jnQgcwConfirmResultMapper.updateByPrimaryKey(result);
+            }
+            //报关解锁时候不需要赋值确认时间确认人
+            result.setConfirmTime(null);
+            result.setConfirmUser(null);
+            result.setConfirmUserName(null);
+            saveConfirmRecord(result);
+        }catch( Exception e){
+            log.error("cancleResult_error", e.getMessage());
+            throw e;
+        }finally{
+            DistributedRedisLock.release(redisLockcode);
+        }
+        return i;
+    }
+
+    /**
+     * 查询业务是否已经复核确认
+     */
+    @Transactional(propagation = Propagation.NOT_SUPPORTED,readOnly = true)
+    @Override
+    public String queryReadyConfirm(Map<String, Object> maps) {
+        List<String> list = jnQgcwConfirmResultMapper.queryReadyConfirm(maps);
+        if(list  !=null && list.size()>0){
+           return list.stream().collect(Collectors.joining(","));
+        }
+        return null;
+    }
+
+    @Transactional(propagation = Propagation.NOT_SUPPORTED,readOnly = true)
+    @Override
+    public JnQgcwConfirmResult queryConfirmStatusByYwbh(String ywbh, String type) {
+        JnQgcwConfirmResultVo vo = new JnQgcwConfirmResultVo();
+        vo.setYwbh(ywbh);
+        vo.setType(type);
+        return jnQgcwConfirmResultMapper.queryResultByYwbhType(vo);
+    }
+
+    /**
+     * 查询其他模块确认状态功能
+     */
+    @Transactional(propagation = Propagation.NOT_SUPPORTED,readOnly = true)
+    @Override
+    public List<TagItemVo> queryOtherConfirmResultData(String ywbh, String bgId) {
+        List<TagItemVo> itemList = new ArrayList<>();
+        //清关状态
+        TagItemVo itemQg = handleQgConfirmStatus(ywbh);
+        if(!CommonUtils.isEmpty(itemQg)){
+            itemList.add(itemQg);
+        }
+        //驳船状态
+        TagItemVo itemBc = handleBcConfirmStatus(ywbh);
+        if(!CommonUtils.isEmpty(itemBc)){
+            itemList.add(itemBc);
+        }
+        //中转状态
+        TagItemVo itemZz = handleZzConfirmStatus(ywbh);
+        if(!CommonUtils.isEmpty(itemZz)){
+            itemList.add(itemZz);
+        }
+        return itemList;
+    }
+
+    /**
+     * handleZzConfirmStatus(处理船务中转确认状态)    
+     * @return TagItemVo  
+     * @Exception 异常对象    
+     * @author Think  
+     * @date 2024-03-26 15:23:41
+     */
+    private TagItemVo handleZzConfirmStatus(String ywbh) {
+        TagItemVo itemzz = new TagItemVo();
+        List<JnQgcwConfirmResultStatusVo> shipList = ywHddzExtendMapper.getShipperConfirmByYwbh(ywbh);
+           log.info(JSONObject.toJSONString(shipList));
+           if(shipList !=null && shipList.size()>0){
+               JnQgcwConfirmResultStatusVo vo = shipList.get(0);
+               String confirmStatus = CommonUtils.isEmpty(vo.getConfirmStatus())?CommonInfo.COMMON_YES:vo.getConfirmStatus();
+               String confirmStatusName =CommonInfo.COMMON_NO.equals(confirmStatus)?CustomsInfo.CONFIRM_SURE:CustomsInfo.CONFIRM_NOT_SURE;
+               String types = CommonInfo.COMMON_NO.equals(confirmStatus) ? TYPE_SUCCESS : TYPE_WARING;
+               itemzz.setLabel(ROLE_ZZ+confirmStatusName);
+               itemzz.setType(types);
+               itemzz.setOrder(2);
+           }else{
+               itemzz.setLabel(ROLE_ZZ+CustomsInfo.CONFIRM_NOT_SURE);
+               itemzz.setType(TYPE_WARING);
+               itemzz.setOrder(2);
+           }
+           return itemzz;
+    }
+
+    /**
+     * handleBcConfirmStatus(处理驳船确认状态)    
+     * @return TagItemVo  
+     * @Exception 异常对象    
+     * @author Think  
+     * @date 2024-03-26 15:24:20
+     */
+    private TagItemVo handleBcConfirmStatus(String ywbh) {
+        TagItemVo itembc = new TagItemVo();
+        List<JnQgcwConfirmResultStatusVo> bcList = jnQgcwConfirmResultMapper.queryBcConfirmStatusByYwbhType(ywbh);
+        if(bcList !=null && bcList.size()>0){
+            JnQgcwConfirmResultStatusVo vo= bcList.get(0);
+            String confirmStatus = CommonUtils.isEmpty(vo.getConfirmStatus())?CommonInfo.COMMON_YES:vo.getConfirmStatus();
+            String confirmStatusName =CommonInfo.COMMON_NO.equals(confirmStatus)?CustomsInfo.CONFIRM_SURE:CustomsInfo.CONFIRM_NOT_SURE;
+            String types = CommonInfo.COMMON_NO.equals(confirmStatus) ? TYPE_SUCCESS : TYPE_WARING;
+            itembc.setLabel(ROLE_BC+confirmStatusName);
+            itembc.setType(types);
+            itembc.setOrder(2);
+        }else{
+            itembc.setType(TYPE_INFO);
+            itembc.setLabel(ROLE_BC+ NO_BC);
+            itembc.setOrder(2);
+        }
+        return itembc;
+    }
+
+    /**
+     * handleQgConfirmStatus(处理清关确认状态)    
+     * @return TagItemVo  
+     * @Exception 异常对象    
+     * @author Think  
+     * @date 2024-03-26 15:24:51
+     */
+    private TagItemVo handleQgConfirmStatus(String ywbh) {
+        TagItemVo itemqg = new TagItemVo();
+        itemqg.setLabel(ROLE_QG+CustomsInfo.CONFIRM_NOT_SURE);
+        itemqg.setType(TYPE_WARING);
+        itemqg.setOrder(1);
+        
+        List<JnQgcwConfirmResultStatusVo> qgList = jnQgcwConfirmResultMapper.queryQgConfirmStatusByYwbhType(ywbh);
+        if(qgList !=null && qgList.size()>0){
+            JnQgcwConfirmResultStatusVo vo= qgList.get(0);
+            if(!CommonUtils.isEmpty(vo)){
+                String sblx = CommonUtils.isEmpty(vo.getSblx())?"0" :vo.getSblx();
+                String confirmStatus = CommonUtils.isEmpty(vo.getConfirmStatus())?CommonInfo.COMMON_YES:vo.getConfirmStatus();
+                String confirmStatusName =CommonInfo.COMMON_NO.equals(confirmStatus)?CustomsInfo.CONFIRM_SURE:CustomsInfo.CONFIRM_NOT_SURE;
+                String types = CommonInfo.COMMON_NO.equals(confirmStatus) ? TYPE_SUCCESS : TYPE_WARING;//展示tagType
+                if(CustomsInfo.YW_SBZT_TZ_CODE.equals(sblx) ){//清关申报状态 调整
+                    if(CommonInfo.COMMON_YES.equals(confirmStatus)){//未确认
+                        itemqg.setLabel(ROLE_QG+confirmStatusName);
+                        itemqg.setType(types);
+                        itemqg.setOrder(1);
+                    }else if(CommonUtils.isEmpty(vo.getBgsj())){
+                        itemqg.setLabel(ROLE_QG+confirmStatusName);
+                        itemqg.setType(types);
+                        itemqg.setOrder(1);
+                    }else {
+                        if(vo.getConfirmTime().compareTo(vo.getBgsj())>0){
+                            itemqg.setLabel(ROLE_QG+confirmStatusName);
+                            itemqg.setType(types);
+                            itemqg.setOrder(1);
+                        }else{
+                            itemqg.setLabel(ROLE_QG+CustomsInfo.CONFIRM_NOT_SURE);
+                            itemqg.setType(TYPE_WARING);
+                            itemqg.setOrder(1);
+                        }
+                    }
+                } else {
+                    //if(CustomsInfo.YW_SBZT_DD_CODE.equals(sblx) || CustomsInfo.YW_SBZT_NULL_CODE.equals(sblx) || CustomsInfo.YW_SBZT_BTZ_CODE.equals(sblx)){
+                    itemqg.setLabel(ROLE_QG+confirmStatusName);
+                    itemqg.setType(types);
+                    itemqg.setOrder(1);
+                }
+            }
+        }
+        return itemqg;
+    }
+    
+
+    
+    
 }
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/impl/YwHddzBcServiceImpl.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/impl/YwHddzBcServiceImpl.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/service/impl/YwHddzBcServiceImpl.java	(revision 37549)
@@ -35,6 +35,7 @@
 import com.freshport.freight.customs.entity.YwHddzMkgl;
 import com.freshport.freight.customs.entity.YwWldw;
 import com.freshport.freight.customs.entity.vo.BusinessOrdeSeaVo;
+import com.freshport.freight.customs.entity.vo.BusinessOrderDongpinVo;
 import com.freshport.freight.customs.entity.vo.BusinessOrderSeaSaveVO;
 import com.freshport.freight.customs.entity.vo.YwHddzBcParam;
 import com.freshport.freight.customs.entity.vo.YwHddzBcSearchVO;
@@ -186,7 +187,8 @@
             int ucount = ywHddzMkglMapper.selectCountByPrimaryKey(mkgl);
 
             for (YwHddzBcSearchVO v : list) {
-
+                //处理字段复核
+                handleCheckConfirm(v);
                 // 是否有权限修改数据
                 if (ucount == 0) {
                     v.setIsself(CommonInfo.COMMON_NO);
@@ -271,7 +273,26 @@
             }
         }
     }
-
+    /**
+     * handleCheckConfirm(处理字段复核)    
+     * @param vo  
+     * @return void  
+     * @Exception 异常对象    
+     * @author Think  
+     * @date 2024-03-22 14:08:11
+     */
+    private void handleCheckConfirm(YwHddzBcSearchVO vo) {
+        if(CommonUtils.isEmpty(vo.getConfirmStatus())){
+           vo.setConfirmStatus(CommonInfo.COMMON_NO);//0- 未确认
+           vo.setConfirmStatusName(CustomsInfo.CONFIRM_NOT_SURE);
+        }else{
+            if(CommonInfo.COMMON_YES.equals(vo.getConfirmStatus())){//0- 未确认
+                vo.setConfirmStatusName(CustomsInfo.CONFIRM_SURE);
+            }else{
+                vo.setConfirmStatusName(CustomsInfo.CONFIRM_NOT_SURE);
+            }
+        }
+    }
     @Transactional
     @Override
     public void saveYwHddzBcList(List<YwHddzBcSearchVO> vo) {
@@ -707,4 +728,13 @@
         ywHddzMapper.updateYwHddzSfbcByYwbh(map);
     }
 
+    /**
+     * 驳船查询是否已经报关
+     */
+    @Transactional(propagation = Propagation.NOT_SUPPORTED,readOnly = true )
+    @Override
+    public List<String> queryReadyBg(List<String> ywbhList) {
+        return ywHddzBcMapper.queryRealyBg(ywbhList);
+    }
+
 }
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/utils/CustomsInfo.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/utils/CustomsInfo.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/utils/CustomsInfo.java	(revision 37549)
@@ -1110,4 +1110,10 @@
     /**文件存储平台-目录符号*/
     public static final String FILE_SYSTEM_SYMBOL="/";
     
+    /**确认状态-已确认*/
+    public static final String CONFIRM_SURE="已确认";
+    
+    /**确认状态-未确认*/
+    public static final String CONFIRM_NOT_SURE="未确认";
+    
 }
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/utils/CustomsScheduleTask.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/utils/CustomsScheduleTask.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/utils/CustomsScheduleTask.java	(revision 37549)
@@ -40,481 +40,481 @@
 @Component
 public class CustomsScheduleTask {
 
-    @Resource
-    private CustomsScheduleService customsScheduleService;
+//    @Resource
+//    private CustomsScheduleService customsScheduleService;
+//
+//    @Resource
+//    private InspectionProcessService inspectionProcessService;
+//
+//    @Resource
+//    private InspectionPlanAutoService inpsectionPlanAutoService;
+//
+//    @Resource
+//    private BgOrderFromExternalService bgOrderFromExternalService;
+//
+//    @Autowired
+//    private BgIcsAdditionService bgIcsAdditionService;
+//
+//    @Resource
+//    private FileSystemService fileSystemService;
+//    
+//    /**
+//     * expectedArrivalTask
+//     *
+//     * @return void
+//     * @throws Exception
+//     * @Description 预计靠港时间推送
+//     * @author yangx
+//     * @Exception 异常对象
+//     */
+//    @Scheduled(cron = "0 0 10 * * ?")
+//    public void expectedArrivalTask() throws Exception {
+//        if (!CustomsConfigInfo.APP_CONFIG_MODE_PRO.equals(StaticResourceContants.mode())) {
+//            Log.info(CommonUtils.getDateToString(new Date()) + "非生产模式------返回-------------  "
+//                    + StaticResourceContants.mode());
+//            return;
+//        }
+//        Log.info(CommonUtils.getDateToString(new Date()) + "预计靠港时间推送.............开始  ");
+//        customsScheduleService.expectedArrivalTask();
+//        Log.info(CommonUtils.getDateToString(new Date()) + "预计靠港时间推送.............结束 ");
+//    }
+//
+//    /**
+//     * expectFeeTask
+//     *
+//     * @return void
+//     * @throws Exception
+//     * @Description 预计超期推送
+//     * @author yangx
+//     * @Exception 异常对象
+//     */
+//    @Scheduled(cron = "0 0 11 * * ?")
+//    public void expectFeeTask() throws Exception {
+//        if (!CustomsConfigInfo.APP_CONFIG_MODE_PRO.equals(StaticResourceContants.mode())) {
+//            Log.info(CommonUtils.getDateToString(new Date()) + "非生产模式------返回-------------  "
+//                    + StaticResourceContants.mode());
+//            return;
+//        }
+//        Log.info(CommonUtils.getDateToString(new Date()) + "预计超期费推送.............开始  ");
+//        customsScheduleService.expectFeeTask();
+//        Log.info(CommonUtils.getDateToString(new Date()) + "预计超期费推送.............结束 ");
+//    }
+//
+//    /**
+//     * lastReturnTask
+//     *
+//     * @return void
+//     * @throws Exception
+//     * @Description 最晚还箱日期推送
+//     * @author yangx
+//     * @Exception 异常对象
+//     */
+//    @Scheduled(cron = "0 0 12 * * ?")
+//    public void lastReturnTask() throws Exception {
+//        if (!CustomsConfigInfo.APP_CONFIG_MODE_PRO.equals(StaticResourceContants.mode())) {
+//            Log.info(CommonUtils.getDateToString(new Date()) + "非生产模式------返回-------------  "
+//                    + StaticResourceContants.mode());
+//            return;
+//        }
+//        Log.info(CommonUtils.getDateToString(new Date()) + "最晚还箱日推送.............开始  ");
+//        customsScheduleService.lastReturnTask();
+//        Log.info(CommonUtils.getDateToString(new Date()) + "最晚还箱日推送.............结束 ");
+//    }
+//
+//    /**
+//     * pushSxgWechat
+//     *
+//     * @return void
+//     * @Description 推送生鲜港微信
+//     * @author yangx
+//     * @Exception 异常对象
+//     */
+//    @Scheduled(cron = "0 */5 * * * ?")
+//    public void settlementStatusTask() throws Exception {
+//        if (!CustomsConfigInfo.APP_CONFIG_MODE_PRO.equals(StaticResourceContants.mode())) {
+//            Log.info(CommonUtils.getDateToString(new Date()) + "非生产模式------返回------------- "
+//                    + StaticResourceContants.mode());
+//            return;
+//        }
+//        Log.info(CommonUtils.getDateToString(new Date()) + "推送生鲜港微信开始.............开始 ");
+//        customsScheduleService.pushSxgWechat();
+//        Log.info(CommonUtils.getDateToString(new Date()) + "推送生鲜港微信结束.............结束 ");
+//    }
+//
+//    // 去掉
+//    // @Scheduled(cron = "0 0 */1 * * ?")
+//    public void resetTokenTask() throws Exception {
+//        Log.info(CommonUtils.getDateToString(new Date()) + "推每隔12小时刷新token.............开始 ");
+//        SwInvokeApiUtil util = new SwInvokeApiUtil();
+//        util.reloadToken();
+//        Log.info(CommonUtils.getDateToString(new Date()) + "推每隔12小时刷新token.............结束 ");
+//    }
+//
+//    /**
+//     * bgYfTask
+//     *
+//     * @return void
+//     * @Description 报关运费自动更新
+//     * @author zhanggc
+//     * @Exception 异常对象
+//     */
+//    @Scheduled(cron = "0 */30 * * * ?")
+//    public void bgYfTask() throws Exception {
+//        Log.info(CommonUtils.getDateToString(new Date()) + "每隔1小时更新运费金额----------开始 ");
+//        // 获取90天以前的日期
+//        String befreDate = DateUtils.getNextDay(null, 90);
+//        // 调用service获取数据
+//        List<YwBg> bgList = customsScheduleService.selectYfjeList(befreDate);
+//
+//        if (!CommonUtils.isEmpty(bgList)) {
+//            Log.info("开始更新数据");
+//            // 取运费金额不为空的
+//            List<YwBg> bgsplitList = bgList.stream().filter(o -> !CommonUtils.isEmpty(o.getYfje()))
+//                    .collect(Collectors.toList());
+//            // 更新数据
+//            if (!CommonUtils.isEmpty(bgsplitList)) {
+//                Log.info("有运费金额不为空的数据");
+//                // 数据分组
+//                List<List<YwBg>> splistBgList = com.freshport.freight.customs.utils.CommonUtils.splitList(bgsplitList,
+//                        CommonInfo.SQLSERVER_BATCH_GROUPING_COUNT_HUNDRED_TWO);
+//                // 循环更新
+//                for (List<YwBg> list : splistBgList) {
+//                    customsScheduleService.saveYwbgYfjeList(list);
+//                }
+//            }
+//
+//        }
+//
+//        Log.info(CommonUtils.getDateToString(new Date()) + "每隔1小时更新运费金额----------结束 ");
+//    }
+//
+//    @Scheduled(cron = "0 0 */8 * * ?")
+//    public void resetZzslTask() throws Exception {
+//        Log.info(CommonUtils.getDateToString(new Date()) + "推每隔8小时刷新税率.............开始 ");
+//        customsScheduleService.resetZzslTask();
+//        Log.info(CommonUtils.getDateToString(new Date()) + "推每隔8小时刷新税率.............结束 ");
+//    }
+//
+//    /**
+//     * getKmyBusinessSerial(每天6点开始每小时05分获取快贸云待处理流水号)
+//     *
+//     * @throws Exception void
+//     * @author wsh
+//     * @date 2022年1月18日 下午5:29:02
+//     * @Exception 异常对象
+//     */
+//    @Scheduled(cron = "0 5,25,45 6/1 * * ?")
+//    public void getKmyBusinessSerial() throws Exception {
+//        // if
+//        // (!CustomsConfigInfo.APP_CONFIG_MODE_PRO.equals(StaticResourceContants.mode()))
+//        // {
+//        // System.out.println(CommonUtils.getDateToString(new Date()) +
+//        // "非生产模式------返回------------- "
+//        // + StaticResourceContants.mode());
+//        // return;
+//        // }
+//        log.info(CommonUtils.getDateToString(new Date()) + "每天6点开始每小时05分钟获取快贸云待处理流水号.............开始 ");
+//        String delegateComplete = CommonICSInfo.STATUANM_DELEGATECOMPLETE_STRING;
+//        bgOrderFromExternalService.getAndSaveBusinessSerial(delegateComplete);
+//        log.info(CommonUtils.getDateToString(new Date()) + "每天6点开始每小时05分钟获取快贸云待处理流水号.............结束 ");
+//    }
+//
+//    /**
+//     * 发送文件到ics
+//     * 每天凌晨1点执行
+//     *
+//     * @throws Exception void
+//     * @author wsh
+//     * @date 2022年1月18日 下午5:29:02
+//     * @Exception 异常对象
+//     */
+//    @Scheduled(cron = "0 0 1 * * ?")
+//    // @Scheduled(cron = "0 5 0/1 * * ?")
+//    public void transFile2Ics() {
+//        // TODO 默认单线程是否要加入到线程池？
+//        try {
+//            log.info("开始执行ICS文件发送：" + CommonUtils.getDateToString(new Date()));
+//            bgIcsAdditionService.transFile();
+//            log.info("结束执行ICS文件发送：" + CommonUtils.getDateToString(new Date()));
+//        } catch (Exception ex) {
+//            log.error("transFile2Ics", ex);
+//        }
+//    }
+//
+//    /**
+//     * 发送回执到ids
+//     * 每间隔2小时执行一次
+//     *
+//     * @throws Exception void
+//     * @author wsh
+//     * @date 2022年1月18日 下午5:29:02
+//     * @Exception 异常对象
+//     */
+//    // @Scheduled(cron = "0 0 0/2 * * ? ")
+//    @Scheduled(cron = "0 8,28,48 0/1 * * ?")
+//    public void transReceipt2Ics() {
+//        // TODO 默认单线程是否要加入到线程池？
+//        try {
+//            log.info("开始执行ICS回执发送：" + CommonUtils.getDateToString(new Date()));
+//            bgIcsAdditionService.transReceiptInfo();
+//            log.info("结束执行ICS回执发送：" + CommonUtils.getDateToString(new Date()));
+//        } catch (Exception ex) {
+//            log.error("transReceipt2Ics", ex);
+//        }
+//    }
+//
+//    /**
+//     * bgycztTask
+//     * @Description 报关异常状态自动更新
+//     * @author      
+//     * @return void 
+//     * @Exception 异常对象
+//     */
+//    @Scheduled(cron = "0 */25 * * * ?")
+//    public void bgycztTask() throws Exception {
+//        Log.info(CommonUtils.getDateToString(new Date()) + "报关异常状态自动更新----------开始 ");
+//        // 调用service
+//        customsScheduleService.queryAndSaveBgyc(30);
+//        Log.info(CommonUtils.getDateToString(new Date()) + "报关异常状态自动更新----------结束 ");
+//    }
+//
+//    /**
+//     * sbycztTask
+//     * @Description 申报异常状态自动更新
+//     * @author      
+//     * @return void 
+//     * @Exception 异常对象
+//     */
+//    @Scheduled(cron = "0 */28 * * * ?")
+//    public void sbycztTask() throws Exception {
+//        Log.info(CommonUtils.getDateToString(new Date()) + "申报异常状态自动更新----------开始 ");
+//        // 调用service
+//        customsScheduleService.queryAndSaveSbyc(100);
+//        Log.info(CommonUtils.getDateToString(new Date()) + "申报异常状态自动更新----------结束 ");
+//    }
+//
+//    /**
+//     * 报关异常预警
+//     * bgycyjTask
+//     * @Description (这里描述这个方法适用条件 – 可选) 
+//     * @author zhanggc   
+//     * @throws Exception  
+//     * @return void 
+//     * @Exception 异常对象
+//     */
+//    @Scheduled(cron = "0 */30 * * * ?")
+//    public void bgycyjTask() throws Exception {
+//        Log.info(CommonUtils.getDateToString(new Date()) + "报关异常状态自动更新----------开始 ");
+//        customsScheduleService.queryAndCreateYcyy(30);
+//
+//        Log.info(CommonUtils.getDateToString(new Date()) + "报关异常状态自动更新----------结束 ");
+//    }
+//
+//    /**
+//     * 更新中查验天数以及进实验室天数
+//     * dzwjSqztYc
+//     * @Description (这里描述这个方法适用条件 – 可选) 
+//     * @author wangsh   
+//     * @throws Exception  
+//     * @return void 
+//     * @Exception 异常对象
+//     */
+//    // @Scheduled(cron = "0 */5 * * * ?")
+//    @Scheduled(cron = "0 0 1 * * ? ")
+//    public void updateInspectionDay() throws Exception {
+//        System.out.println(CommonUtils.getDateToString(new Date()) + "更新中查验天数以及进实验室天数.............开始 ");
+//        inspectionProcessService.autoCalculateDate();
+//        System.out.println(CommonUtils.getDateToString(new Date()) + "更新中查验天数以及进实验室天数.............结束 ");
+//    }
+//
+//    /**
+//     * 单证文件收齐状态异常  每天凌晨2点执行一次
+//     * dzwjSqztYc
+//     * @Description (这里描述这个方法适用条件 – 可选) 
+//     * @author zhanggc   
+//     * @throws Exception  
+//     * @return void 
+//     * @Exception 异常对象
+//     */
+//    @Scheduled(cron = "0 0 2 * * ?")
+//    public void dzwjSqztYc() throws Exception {
+//        Log.info(CommonUtils.getDateToString(new Date()) + "单证文件收齐状态异常----------开始 ");
+//        customsScheduleService.queryDzqkExceptionAndCreateData(30);
+//        Log.info(CommonUtils.getDateToString(new Date()) + "单证文件收齐状态异常----------结束 ");
+//    }
+//
+//    /**
+//     * 单证影响换单报关异常数据，没半小时执行一次
+//     * dzwjSqztYc
+//     * @Description (这里描述这个方法适用条件 – 可选) 
+//     * @author zhanggc   
+//     * @throws Exception  
+//     * @return void 
+//     * @Exception 异常对象
+//     */
+//    @Scheduled(cron = "0 */30 * * * ?")
+//    public void dzyxhdbgTask() throws Exception {
+//        Log.info(CommonUtils.getDateToString(new Date()) + "单证影响换单报关异常数据----------开始 ");
+//        customsScheduleService.queryDzyxhdbgDataAndSave(30);
+//        Log.info(CommonUtils.getDateToString(new Date()) + "单证影响换单报关异常数据----------结束 ");
+//    }
+//
+//    /**
+//     * 集装箱信息表物理可提柜时间更新 1小时一次
+//     * jzxxxWlktgsjTask
+//     * @Description (这里描述这个方法适用条件 – 可选) 
+//     * @author zhanggc   
+//     * @throws Exception  
+//     * @return void 
+//     * @Exception 异常对象
+//     */
+//    @Scheduled(cron = "0 */20 * * * ?")
+//    public void jzxxxWlktgsjTask() throws Exception {
+//        Log.info(CommonUtils.getDateToString(new Date()) + "集装箱信息表物理可提柜时间更新----------开始 ");
+//        customsScheduleService.queryJzxxxWlkthsjAndSave(60);
+//        Log.info(CommonUtils.getDateToString(new Date()) + "集装箱信息表物理可提柜时间更新----------结束 ");
+//    }
+//
+//    /**
+//    * 
+//    * checkAutoPlan(每20分钟执行一次判断自动化保存查验计划是否成功)        
+//    * @return void  
+//    * @Exception 异常对象    
+//    * @author Think  
+//    * @date 2022-10-08 15:06:27
+//    */
+//    @Scheduled(cron = "0 */20 * * * ?")
+//    public void checkAutoPlan() throws Exception {
+//        // if
+//        // (!CustomsConfigInfo.APP_CONFIG_MODE_PRO.equals(StaticResourceContants.mode()))
+//        // {
+//        // Log.info(CommonUtils.getDateToString(new Date()) +
+//        // "非生产模式------返回------------- "
+//        // + StaticResourceContants.mode());
+//        // return;
+//        // }
+//        Log.info(CommonUtils.getDateToString(new Date()) + "每20分钟执行一次判断自动化保存查验计划是否有未成功----------开始 ");
+//        inpsectionPlanAutoService.checkAutoPlan();
+//        Log.info(CommonUtils.getDateToString(new Date()) + "每20分钟执行一次判断自动化保存查验计划是否有未成功----------结束 ");
+//    }
+//
+//    /**
+//     * 
+//     * querySpKczlxAndSave(整天定时调用刷新食品可出证数据)        
+//     * @return void  
+//     * @Exception 异常对象    
+//     * @author Think  
+//     * @date 2022-10-08 15:06:27
+//     */
+//    @Scheduled(cron = "0 0 0/1 * * ?")
+//    // @Scheduled(cron = "0 */1 * * * ?")
+//    public void querySpKczlxAndSave() throws Exception {
+//        // if
+//        // (!CustomsConfigInfo.APP_CONFIG_MODE_PRO.equals(StaticResourceContants.mode()))
+//        // {
+//        // Log.info(CommonUtils.getDateToString(new Date()) +
+//        // "非生产模式------返回------------- "
+//        // + StaticResourceContants.mode());
+//        // return;
+//        // }
+//        Log.info(CommonUtils.getDateToString(new Date()) + "食品可出证信息更新----------开始 ");
+//        customsScheduleService.querySpKczListAndSave();
+//        Log.info(CommonUtils.getDateToString(new Date()) + "食品可出证信息更新----------结束 ");
+//    }
+//
+//    /**
+//     * 
+//     * queryJyjyzListAndSave(每晚23:30执行水果检疫证异常事后数据)        
+//     * @return void  
+//     * @Exception 异常对象    
+//     * @author Think  
+//     * @date 2022-10-18 15:06:27
+//     */
+//    @Scheduled(cron = "0 00 22 * * * ")
+//    // @Scheduled(cron = "0 */1 * * * ?")
+//    public void queryJyjyzListAndSave() throws Exception {
+//        Log.info(CommonUtils.getDateToString(new Date()) + "检验检疫证异常数据更新----------开始 ");
+//        customsScheduleService.queryJyzExceptionListAndSave(60);
+//        Log.info(CommonUtils.getDateToString(new Date()) + "检验检疫证异常数据更新----------结束 ");
+//    }
+//
+//    /**
+//     * 取消此功能
+//     * queryJyjyzListAndSave(每晚1：00执行货代单证加急数据)        
+//     * @return void  
+//     * @Exception 异常对象    
+//     * @author Think  
+//     * @date 2022-10-18 15:06:27
+//     */
+//    // @Scheduled(cron = "0 00 01 * * * ")
+//    // @Scheduled(cron = "0 */1 * * * ?")
+//    public void queryHddzJjDataAndSave() throws Exception {
+//        Log.info(CommonUtils.getDateToString(new Date()) + "货代单证加急数据----------开始 ");
+//        customsScheduleService.queryHddzJjAndSaveData(30);
+//        Log.info(CommonUtils.getDateToString(new Date()) + "货代单证加急数据----------结束 ");
+//    }
+//
+//    /**
+//     * 
+//     * queryJyjyzListAndSave(每晚1：00执行货代单证加急数据)        
+//     * @return void  
+//     * @Exception 异常对象    
+//     * @author Think  
+//     * @date 2022-10-18 15:06:27
+//     */
+//    @Scheduled(cron = "0 00 02,22 * * * ")
+//    // @Scheduled(cron = "0 */1 * * * ?")
+//    public void querySzJjDataAndSave() throws Exception {
+//        Log.info(CommonUtils.getDateToString(new Date()) + "事中检疫证数据更新----------开始 ");
+//        customsScheduleService.querySzJyzDataAndUpdate(100);
+//        Log.info(CommonUtils.getDateToString(new Date()) + "事中检疫证数据更新----------结束 ");
+//    }
+//
+//    /**
+//     * 
+//     * 更新查验异常数据      （每天5点执行）
+//     * @return void  
+//     * @Exception 异常对象    
+//     * @author Think  
+//     * @date 2022-10-18 15:06:27
+//     */
+//    @Scheduled(cron = "0 0 5 * * ?")
+//    public void queryInspectionNeedExceptionDataAndSave() throws Exception {
+//        Log.info(CommonUtils.getDateToString(new Date()) + "更新查验异常数据----------开始 ");
+//        customsScheduleService.queryInspectionNeedExceptionDataAndSave();
+//        Log.info(CommonUtils.getDateToString(new Date()) + "更新查验异常数据----------结束 ");
+//    }
+//
+//    /**
+//     * 
+//     * 更新货代单证未出证数据
+//     * @return void  
+//     * @Exception 异常对象    
+//     * @author Think  
+//     * @date 2023-10-19 15:06:27
+//     */
+//    @Scheduled(cron = "0 0 4 * * ?")
+//    // @Scheduled(cron = "0 */3 * * * ?")
+//    public void queryHddzWczExceptionDataAndSave() throws Exception {
+//        Log.info(CommonUtils.getDateToString(new Date()) + "更新未出证异常数据----------开始 ");
+//        customsScheduleService.queryHddzWczExceptionDataAndSave();
+//        Log.info(CommonUtils.getDateToString(new Date()) + "更新未出证异常数据----------结束 ");
+//    }
+//    
+//    /**
+//     * fileSystemTokenTask(每天凌晨1：30获取一下token)  
+//     * @throws ParseException
+//     * @return void
+//     * @author Think
+//     * @date 2024年2月2日 下午4:26:19  
+//     * @Exception 异常对象  
+//     * @version 1.0
+//     */
+//    @Scheduled(cron = "0 30 1 * * ?")
+//    public void fileSystemTokenTask() throws ParseException {
+//        System.out.println("定时任务-获取文件系统token.............开始");
+//        fileSystemService.getInitToken();
+//        System.out.println("定时任务-获取文件系统token.............结束");
+//    }
 
-    @Resource
-    private InspectionProcessService inspectionProcessService;
-
-    @Resource
-    private InspectionPlanAutoService inpsectionPlanAutoService;
-
-    @Resource
-    private BgOrderFromExternalService bgOrderFromExternalService;
-
-    @Autowired
-    private BgIcsAdditionService bgIcsAdditionService;
-
-    @Resource
-    private FileSystemService fileSystemService;
-    
-    /**
-     * expectedArrivalTask
-     *
-     * @return void
-     * @throws Exception
-     * @Description 预计靠港时间推送
-     * @author yangx
-     * @Exception 异常对象
-     */
-    @Scheduled(cron = "0 0 10 * * ?")
-    public void expectedArrivalTask() throws Exception {
-        if (!CustomsConfigInfo.APP_CONFIG_MODE_PRO.equals(StaticResourceContants.mode())) {
-            Log.info(CommonUtils.getDateToString(new Date()) + "非生产模式------返回-------------  "
-                    + StaticResourceContants.mode());
-            return;
-        }
-        Log.info(CommonUtils.getDateToString(new Date()) + "预计靠港时间推送.............开始  ");
-        customsScheduleService.expectedArrivalTask();
-        Log.info(CommonUtils.getDateToString(new Date()) + "预计靠港时间推送.............结束 ");
-    }
-
-    /**
-     * expectFeeTask
-     *
-     * @return void
-     * @throws Exception
-     * @Description 预计超期推送
-     * @author yangx
-     * @Exception 异常对象
-     */
-    @Scheduled(cron = "0 0 11 * * ?")
-    public void expectFeeTask() throws Exception {
-        if (!CustomsConfigInfo.APP_CONFIG_MODE_PRO.equals(StaticResourceContants.mode())) {
-            Log.info(CommonUtils.getDateToString(new Date()) + "非生产模式------返回-------------  "
-                    + StaticResourceContants.mode());
-            return;
-        }
-        Log.info(CommonUtils.getDateToString(new Date()) + "预计超期费推送.............开始  ");
-        customsScheduleService.expectFeeTask();
-        Log.info(CommonUtils.getDateToString(new Date()) + "预计超期费推送.............结束 ");
-    }
-
-    /**
-     * lastReturnTask
-     *
-     * @return void
-     * @throws Exception
-     * @Description 最晚还箱日期推送
-     * @author yangx
-     * @Exception 异常对象
-     */
-    @Scheduled(cron = "0 0 12 * * ?")
-    public void lastReturnTask() throws Exception {
-        if (!CustomsConfigInfo.APP_CONFIG_MODE_PRO.equals(StaticResourceContants.mode())) {
-            Log.info(CommonUtils.getDateToString(new Date()) + "非生产模式------返回-------------  "
-                    + StaticResourceContants.mode());
-            return;
-        }
-        Log.info(CommonUtils.getDateToString(new Date()) + "最晚还箱日推送.............开始  ");
-        customsScheduleService.lastReturnTask();
-        Log.info(CommonUtils.getDateToString(new Date()) + "最晚还箱日推送.............结束 ");
-    }
-
-    /**
-     * pushSxgWechat
-     *
-     * @return void
-     * @Description 推送生鲜港微信
-     * @author yangx
-     * @Exception 异常对象
-     */
-    @Scheduled(cron = "0 */5 * * * ?")
-    public void settlementStatusTask() throws Exception {
-        if (!CustomsConfigInfo.APP_CONFIG_MODE_PRO.equals(StaticResourceContants.mode())) {
-            Log.info(CommonUtils.getDateToString(new Date()) + "非生产模式------返回------------- "
-                    + StaticResourceContants.mode());
-            return;
-        }
-        Log.info(CommonUtils.getDateToString(new Date()) + "推送生鲜港微信开始.............开始 ");
-        customsScheduleService.pushSxgWechat();
-        Log.info(CommonUtils.getDateToString(new Date()) + "推送生鲜港微信结束.............结束 ");
-    }
-
-    // 去掉
-    // @Scheduled(cron = "0 0 */1 * * ?")
-    public void resetTokenTask() throws Exception {
-        Log.info(CommonUtils.getDateToString(new Date()) + "推每隔12小时刷新token.............开始 ");
-        SwInvokeApiUtil util = new SwInvokeApiUtil();
-        util.reloadToken();
-        Log.info(CommonUtils.getDateToString(new Date()) + "推每隔12小时刷新token.............结束 ");
-    }
-
-    /**
-     * bgYfTask
-     *
-     * @return void
-     * @Description 报关运费自动更新
-     * @author zhanggc
-     * @Exception 异常对象
-     */
-    @Scheduled(cron = "0 */30 * * * ?")
-    public void bgYfTask() throws Exception {
-        Log.info(CommonUtils.getDateToString(new Date()) + "每隔1小时更新运费金额----------开始 ");
-        // 获取90天以前的日期
-        String befreDate = DateUtils.getNextDay(null, 90);
-        // 调用service获取数据
-        List<YwBg> bgList = customsScheduleService.selectYfjeList(befreDate);
-
-        if (!CommonUtils.isEmpty(bgList)) {
-            Log.info("开始更新数据");
-            // 取运费金额不为空的
-            List<YwBg> bgsplitList = bgList.stream().filter(o -> !CommonUtils.isEmpty(o.getYfje()))
-                    .collect(Collectors.toList());
-            // 更新数据
-            if (!CommonUtils.isEmpty(bgsplitList)) {
-                Log.info("有运费金额不为空的数据");
-                // 数据分组
-                List<List<YwBg>> splistBgList = com.freshport.freight.customs.utils.CommonUtils.splitList(bgsplitList,
-                        CommonInfo.SQLSERVER_BATCH_GROUPING_COUNT_HUNDRED_TWO);
-                // 循环更新
-                for (List<YwBg> list : splistBgList) {
-                    customsScheduleService.saveYwbgYfjeList(list);
-                }
-            }
-
-        }
-
-        Log.info(CommonUtils.getDateToString(new Date()) + "每隔1小时更新运费金额----------结束 ");
-    }
-
-    @Scheduled(cron = "0 0 */8 * * ?")
-    public void resetZzslTask() throws Exception {
-        Log.info(CommonUtils.getDateToString(new Date()) + "推每隔8小时刷新税率.............开始 ");
-        customsScheduleService.resetZzslTask();
-        Log.info(CommonUtils.getDateToString(new Date()) + "推每隔8小时刷新税率.............结束 ");
-    }
-
-    /**
-     * getKmyBusinessSerial(每天6点开始每小时05分获取快贸云待处理流水号)
-     *
-     * @throws Exception void
-     * @author wsh
-     * @date 2022年1月18日 下午5:29:02
-     * @Exception 异常对象
-     */
-    @Scheduled(cron = "0 5,25,45 6/1 * * ?")
-    public void getKmyBusinessSerial() throws Exception {
-        // if
-        // (!CustomsConfigInfo.APP_CONFIG_MODE_PRO.equals(StaticResourceContants.mode()))
-        // {
-        // System.out.println(CommonUtils.getDateToString(new Date()) +
-        // "非生产模式------返回------------- "
-        // + StaticResourceContants.mode());
-        // return;
-        // }
-        log.info(CommonUtils.getDateToString(new Date()) + "每天6点开始每小时05分钟获取快贸云待处理流水号.............开始 ");
-        String delegateComplete = CommonICSInfo.STATUANM_DELEGATECOMPLETE_STRING;
-        bgOrderFromExternalService.getAndSaveBusinessSerial(delegateComplete);
-        log.info(CommonUtils.getDateToString(new Date()) + "每天6点开始每小时05分钟获取快贸云待处理流水号.............结束 ");
-    }
-
-    /**
-     * 发送文件到ics
-     * 每天凌晨1点执行
-     *
-     * @throws Exception void
-     * @author wsh
-     * @date 2022年1月18日 下午5:29:02
-     * @Exception 异常对象
-     */
-    @Scheduled(cron = "0 0 1 * * ?")
-    // @Scheduled(cron = "0 5 0/1 * * ?")
-    public void transFile2Ics() {
-        // TODO 默认单线程是否要加入到线程池？
-        try {
-            log.info("开始执行ICS文件发送：" + CommonUtils.getDateToString(new Date()));
-            bgIcsAdditionService.transFile();
-            log.info("结束执行ICS文件发送：" + CommonUtils.getDateToString(new Date()));
-        } catch (Exception ex) {
-            log.error("transFile2Ics", ex);
-        }
-    }
-
-    /**
-     * 发送回执到ids
-     * 每间隔2小时执行一次
-     *
-     * @throws Exception void
-     * @author wsh
-     * @date 2022年1月18日 下午5:29:02
-     * @Exception 异常对象
-     */
-    // @Scheduled(cron = "0 0 0/2 * * ? ")
-    @Scheduled(cron = "0 8,28,48 0/1 * * ?")
-    public void transReceipt2Ics() {
-        // TODO 默认单线程是否要加入到线程池？
-        try {
-            log.info("开始执行ICS回执发送：" + CommonUtils.getDateToString(new Date()));
-            bgIcsAdditionService.transReceiptInfo();
-            log.info("结束执行ICS回执发送：" + CommonUtils.getDateToString(new Date()));
-        } catch (Exception ex) {
-            log.error("transReceipt2Ics", ex);
-        }
-    }
-
-    /**
-     * bgycztTask
-     * @Description 报关异常状态自动更新
-     * @author      
-     * @return void 
-     * @Exception 异常对象
-     */
-    @Scheduled(cron = "0 */25 * * * ?")
-    public void bgycztTask() throws Exception {
-        Log.info(CommonUtils.getDateToString(new Date()) + "报关异常状态自动更新----------开始 ");
-        // 调用service
-        customsScheduleService.queryAndSaveBgyc(30);
-        Log.info(CommonUtils.getDateToString(new Date()) + "报关异常状态自动更新----------结束 ");
-    }
-
-    /**
-     * sbycztTask
-     * @Description 申报异常状态自动更新
-     * @author      
-     * @return void 
-     * @Exception 异常对象
-     */
-    @Scheduled(cron = "0 */28 * * * ?")
-    public void sbycztTask() throws Exception {
-        Log.info(CommonUtils.getDateToString(new Date()) + "申报异常状态自动更新----------开始 ");
-        // 调用service
-        customsScheduleService.queryAndSaveSbyc(100);
-        Log.info(CommonUtils.getDateToString(new Date()) + "申报异常状态自动更新----------结束 ");
-    }
-
-    /**
-     * 报关异常预警
-     * bgycyjTask
-     * @Description (这里描述这个方法适用条件 – 可选) 
-     * @author zhanggc   
-     * @throws Exception  
-     * @return void 
-     * @Exception 异常对象
-     */
-    @Scheduled(cron = "0 */30 * * * ?")
-    public void bgycyjTask() throws Exception {
-        Log.info(CommonUtils.getDateToString(new Date()) + "报关异常状态自动更新----------开始 ");
-        customsScheduleService.queryAndCreateYcyy(30);
-
-        Log.info(CommonUtils.getDateToString(new Date()) + "报关异常状态自动更新----------结束 ");
-    }
-
-    /**
-     * 更新中查验天数以及进实验室天数
-     * dzwjSqztYc
-     * @Description (这里描述这个方法适用条件 – 可选) 
-     * @author wangsh   
-     * @throws Exception  
-     * @return void 
-     * @Exception 异常对象
-     */
-    // @Scheduled(cron = "0 */5 * * * ?")
-    @Scheduled(cron = "0 0 1 * * ? ")
-    public void updateInspectionDay() throws Exception {
-        System.out.println(CommonUtils.getDateToString(new Date()) + "更新中查验天数以及进实验室天数.............开始 ");
-        inspectionProcessService.autoCalculateDate();
-        System.out.println(CommonUtils.getDateToString(new Date()) + "更新中查验天数以及进实验室天数.............结束 ");
-    }
-
-    /**
-     * 单证文件收齐状态异常  每天凌晨2点执行一次
-     * dzwjSqztYc
-     * @Description (这里描述这个方法适用条件 – 可选) 
-     * @author zhanggc   
-     * @throws Exception  
-     * @return void 
-     * @Exception 异常对象
-     */
-    @Scheduled(cron = "0 0 2 * * ?")
-    public void dzwjSqztYc() throws Exception {
-        Log.info(CommonUtils.getDateToString(new Date()) + "单证文件收齐状态异常----------开始 ");
-        customsScheduleService.queryDzqkExceptionAndCreateData(30);
-        Log.info(CommonUtils.getDateToString(new Date()) + "单证文件收齐状态异常----------结束 ");
-    }
-
-    /**
-     * 单证影响换单报关异常数据，没半小时执行一次
-     * dzwjSqztYc
-     * @Description (这里描述这个方法适用条件 – 可选) 
-     * @author zhanggc   
-     * @throws Exception  
-     * @return void 
-     * @Exception 异常对象
-     */
-    @Scheduled(cron = "0 */30 * * * ?")
-    public void dzyxhdbgTask() throws Exception {
-        Log.info(CommonUtils.getDateToString(new Date()) + "单证影响换单报关异常数据----------开始 ");
-        customsScheduleService.queryDzyxhdbgDataAndSave(30);
-        Log.info(CommonUtils.getDateToString(new Date()) + "单证影响换单报关异常数据----------结束 ");
-    }
-
-    /**
-     * 集装箱信息表物理可提柜时间更新 1小时一次
-     * jzxxxWlktgsjTask
-     * @Description (这里描述这个方法适用条件 – 可选) 
-     * @author zhanggc   
-     * @throws Exception  
-     * @return void 
-     * @Exception 异常对象
-     */
-    @Scheduled(cron = "0 */20 * * * ?")
-    public void jzxxxWlktgsjTask() throws Exception {
-        Log.info(CommonUtils.getDateToString(new Date()) + "集装箱信息表物理可提柜时间更新----------开始 ");
-        customsScheduleService.queryJzxxxWlkthsjAndSave(60);
-        Log.info(CommonUtils.getDateToString(new Date()) + "集装箱信息表物理可提柜时间更新----------结束 ");
-    }
-
-    /**
-    * 
-    * checkAutoPlan(每20分钟执行一次判断自动化保存查验计划是否成功)        
-    * @return void  
-    * @Exception 异常对象    
-    * @author Think  
-    * @date 2022-10-08 15:06:27
-    */
-    @Scheduled(cron = "0 */20 * * * ?")
-    public void checkAutoPlan() throws Exception {
-        // if
-        // (!CustomsConfigInfo.APP_CONFIG_MODE_PRO.equals(StaticResourceContants.mode()))
-        // {
-        // Log.info(CommonUtils.getDateToString(new Date()) +
-        // "非生产模式------返回------------- "
-        // + StaticResourceContants.mode());
-        // return;
-        // }
-        Log.info(CommonUtils.getDateToString(new Date()) + "每20分钟执行一次判断自动化保存查验计划是否有未成功----------开始 ");
-        inpsectionPlanAutoService.checkAutoPlan();
-        Log.info(CommonUtils.getDateToString(new Date()) + "每20分钟执行一次判断自动化保存查验计划是否有未成功----------结束 ");
-    }
-
-    /**
-     * 
-     * querySpKczlxAndSave(整天定时调用刷新食品可出证数据)        
-     * @return void  
-     * @Exception 异常对象    
-     * @author Think  
-     * @date 2022-10-08 15:06:27
-     */
-    @Scheduled(cron = "0 0 0/1 * * ?")
-    // @Scheduled(cron = "0 */1 * * * ?")
-    public void querySpKczlxAndSave() throws Exception {
-        // if
-        // (!CustomsConfigInfo.APP_CONFIG_MODE_PRO.equals(StaticResourceContants.mode()))
-        // {
-        // Log.info(CommonUtils.getDateToString(new Date()) +
-        // "非生产模式------返回------------- "
-        // + StaticResourceContants.mode());
-        // return;
-        // }
-        Log.info(CommonUtils.getDateToString(new Date()) + "食品可出证信息更新----------开始 ");
-        customsScheduleService.querySpKczListAndSave();
-        Log.info(CommonUtils.getDateToString(new Date()) + "食品可出证信息更新----------结束 ");
-    }
-
-    /**
-     * 
-     * queryJyjyzListAndSave(每晚23:30执行水果检疫证异常事后数据)        
-     * @return void  
-     * @Exception 异常对象    
-     * @author Think  
-     * @date 2022-10-18 15:06:27
-     */
-    @Scheduled(cron = "0 00 22 * * * ")
-    // @Scheduled(cron = "0 */1 * * * ?")
-    public void queryJyjyzListAndSave() throws Exception {
-        Log.info(CommonUtils.getDateToString(new Date()) + "检验检疫证异常数据更新----------开始 ");
-        customsScheduleService.queryJyzExceptionListAndSave(60);
-        Log.info(CommonUtils.getDateToString(new Date()) + "检验检疫证异常数据更新----------结束 ");
-    }
-
-    /**
-     * 取消此功能
-     * queryJyjyzListAndSave(每晚1：00执行货代单证加急数据)        
-     * @return void  
-     * @Exception 异常对象    
-     * @author Think  
-     * @date 2022-10-18 15:06:27
-     */
-    // @Scheduled(cron = "0 00 01 * * * ")
-    // @Scheduled(cron = "0 */1 * * * ?")
-    public void queryHddzJjDataAndSave() throws Exception {
-        Log.info(CommonUtils.getDateToString(new Date()) + "货代单证加急数据----------开始 ");
-        customsScheduleService.queryHddzJjAndSaveData(30);
-        Log.info(CommonUtils.getDateToString(new Date()) + "货代单证加急数据----------结束 ");
-    }
-
-    /**
-     * 
-     * queryJyjyzListAndSave(每晚1：00执行货代单证加急数据)        
-     * @return void  
-     * @Exception 异常对象    
-     * @author Think  
-     * @date 2022-10-18 15:06:27
-     */
-    @Scheduled(cron = "0 00 02,22 * * * ")
-    // @Scheduled(cron = "0 */1 * * * ?")
-    public void querySzJjDataAndSave() throws Exception {
-        Log.info(CommonUtils.getDateToString(new Date()) + "事中检疫证数据更新----------开始 ");
-        customsScheduleService.querySzJyzDataAndUpdate(100);
-        Log.info(CommonUtils.getDateToString(new Date()) + "事中检疫证数据更新----------结束 ");
-    }
-
-    /**
-     * 
-     * 更新查验异常数据      （每天5点执行）
-     * @return void  
-     * @Exception 异常对象    
-     * @author Think  
-     * @date 2022-10-18 15:06:27
-     */
-    @Scheduled(cron = "0 0 5 * * ?")
-    public void queryInspectionNeedExceptionDataAndSave() throws Exception {
-        Log.info(CommonUtils.getDateToString(new Date()) + "更新查验异常数据----------开始 ");
-        customsScheduleService.queryInspectionNeedExceptionDataAndSave();
-        Log.info(CommonUtils.getDateToString(new Date()) + "更新查验异常数据----------结束 ");
-    }
-
-    /**
-     * 
-     * 更新货代单证未出证数据
-     * @return void  
-     * @Exception 异常对象    
-     * @author Think  
-     * @date 2023-10-19 15:06:27
-     */
-    @Scheduled(cron = "0 0 4 * * ?")
-    // @Scheduled(cron = "0 */3 * * * ?")
-    public void queryHddzWczExceptionDataAndSave() throws Exception {
-        Log.info(CommonUtils.getDateToString(new Date()) + "更新未出证异常数据----------开始 ");
-        customsScheduleService.queryHddzWczExceptionDataAndSave();
-        Log.info(CommonUtils.getDateToString(new Date()) + "更新未出证异常数据----------结束 ");
-    }
-    
-    /**
-     * fileSystemTokenTask(每天凌晨1：30获取一下token)  
-     * @throws ParseException
-     * @return void
-     * @author Think
-     * @date 2024年2月2日 下午4:26:19  
-     * @Exception 异常对象  
-     * @version 1.0
-     */
-    @Scheduled(cron = "0 30 1 * * ?")
-    public void fileSystemTokenTask() throws ParseException {
-        System.out.println("定时任务-获取文件系统token.............开始");
-        fileSystemService.getInitToken();
-        System.out.println("定时任务-获取文件系统token.............结束");
-    }
-
 }
Index: branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/utils/DocReviewConstant.java
===================================================================
--- branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/utils/DocReviewConstant.java	(revision 37381)
+++ branches/ff-customs-RB-20240320-bgfh/src/main/java/com/freshport/freight/customs/utils/DocReviewConstant.java	(revision 37549)
@@ -95,7 +95,19 @@
      * 7-多字段非空判断
      */
     public static final int RULE_DEFINE_MULTIPLE_NULL_JUDGE = 7;
-
+    /*-------------多字段判断-----------------*/
+    /**
+     * 1->类型1：全不为空
+     */
+    public static final int MULTIPLE_VALUE_JUDGE_1 = 1;
+    /**
+     * 2->类型2：全为空
+     */
+    public static final int MULTIPLE_VALUE_JUDGE_2 = 2;
+    /**
+     * 3->类型3：全不为空 或 1为空时2也可以为空
+     */
+    public static final int MULTIPLE_VALUE_JUDGE_3 = 3;
     /*------------比较类型 31-相等，32-大于，33-小于，34-正则, 35-不等于, 36-大于等于， 37-小于等于----------------*/
     public static final int RULE_COMPARE_EQUAL = 31;
     public static final int RULE_COMPARE_GT = 36;
@@ -179,6 +191,10 @@
      */
     public static final String CONTAINS_TYPE_LEVEL = "CONTAINS_TYPE_LEVEL";
     /**
+     * 运输路线
+     */
+    public static final String CONTAINS_TYPE_TPLINE = "CONTAINS_TYPE_TPLINE";
+    /**
      * 模糊匹配
      */
     public static final int CONTAINS_JUDGE_LIKE = 1;
@@ -912,7 +928,7 @@
      * @param value
      * @return
      */
-    public static Map<String, Object> buildKeyValue(int key, String value) {
+    public static Map<String, Object> buildKeyValue(Object key, Object value) {
         HashMap<String, Object> map = new HashMap<>();
         map.put("key", key);
         map.put("value", value);
@@ -946,6 +962,7 @@
         CONTAINS_TYPE_LIST.add(new JnRulesSpecRule(CONTAINS_TYPE_SIZE, "尺寸", ""));
         CONTAINS_TYPE_LIST.add(new JnRulesSpecRule(CONTAINS_TYPE_LEVEL, "等级", ""));
         CONTAINS_TYPE_LIST.add(new JnRulesSpecRule(CONTAINS_TYPE_FUMIGATE_INFO, "熏蒸", ""));
+        CONTAINS_TYPE_LIST.add(new JnRulesSpecRule(CONTAINS_TYPE_TPLINE, "运输路线", ""));
         CONTAINS_TYPE_LIST.add(new JnRulesSpecRule(CONTAINS_TYPE_IN, "包含字段", ""));
 
         //比较
