wangzhuo 3 лет назад
Родитель
Сommit
bad3549e27
22 измененных файлов с 1473 добавлено и 18 удалено
  1. 158 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/Agreement.java
  2. 117 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/AgreementFiles.java
  3. 51 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/feign/IAgreementClient.java
  4. 19 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/vo/AgreementFilesVO.java
  5. 19 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/vo/AgreementVO.java
  6. 189 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/controller/AgreementController.java
  7. 106 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/controller/AgreementFilesController.java
  8. 24 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/mapper/AgreementFilesMapper.java
  9. 28 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/mapper/AgreementFilesMapper.xml
  10. 24 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/mapper/AgreementMapper.java
  11. 31 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/mapper/AgreementMapper.xml
  12. 26 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/service/IAgreementFilesService.java
  13. 72 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/service/IAgreementService.java
  14. 28 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/service/impl/AgreementFilesServiceImpl.java
  15. 331 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/service/impl/AgreementServiceImpl.java
  16. 6 6
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/declare/DeclareCustomsFilesController.java
  17. 53 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/feign/AgreementClient.java
  18. 0 4
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/DeclareCustomsServiceImpl.java
  19. 4 0
      blade-service/blade-check/src/main/java/org/springblade/check/controller/AuditProecessController.java
  20. 6 0
      blade-service/blade-check/src/main/java/org/springblade/check/service/IAuditProecessService.java
  21. 174 8
      blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java
  22. 7 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/SalesPolicyServiceImpl.java

+ 158 - 0
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/Agreement.java

@@ -0,0 +1,158 @@
+package org.springblade.box.tube.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 协议管理表主表实体类
+ *
+ * @author BladeX
+ * @since 2022-12-20
+ */
+@Data
+@TableName("basic_agreement")
+@ApiModel(value = "Agreement对象", description = "协议管理表")
+public class Agreement implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+	@ApiModelProperty(value = "主键")
+	private Long id;
+	/**
+	 * 系统号
+	 */
+	@ApiModelProperty(value = "系统号")
+	private String sysNo;
+
+	/**
+	 * 合同编号
+	 */
+	@ApiModelProperty(value = "合同编号")
+	private String contractNo;
+
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+
+	/**
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private Long createDept;
+
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+
+	/**
+	 * 单据状态
+	 */
+	@ApiModelProperty(value = "单据状态")
+	private Integer status;
+
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+
+	/**
+	 * 租户
+	 */
+	@ApiModelProperty(value = "租户")
+	private String tenantId;
+
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remark;
+
+	/**
+	 * 审核状态
+	 */
+	@ApiModelProperty(value = "审核状态")
+	private String auditStatus;
+
+	/**
+	 * 审核时间
+	 */
+	@ApiModelProperty(value = "审核时间")
+	private Date auditTime;
+
+	/**
+	 * 客户id
+	 */
+	@ApiModelProperty(value = "客户id")
+	private Long corpId;
+
+	/**
+	 * 客户名称
+	 */
+	@ApiModelProperty(value = "客户名称")
+	private String corpName;
+
+	/**
+	 * 协议收付(0收,1付)
+	 */
+	@ApiModelProperty(value = "协议收付(0收,1付)")
+	private Integer agreementPayment;
+
+	/**
+	 * 有效期起
+	 */
+	@ApiModelProperty(value = "有效期起")
+	private Date validityStart;
+
+	/**
+	 * 有效期止
+	 */
+	@ApiModelProperty(value = "有效期止")
+	private Date validityEnd;
+
+	/**
+	 * 附件明细
+	 */
+	@TableField(exist = false)
+	List<AgreementFiles> filesList;
+
+	//请核标识(1初审 2复审)
+	@TableField(exist = false)
+	private Integer checkFlag;
+	//跳转对应页面的路由
+	@TableField(exist = false)
+	private String url;
+	//页面枚举
+	@TableField(exist = false)
+	private String pageStatus;
+	//页面名字
+	@TableField(exist = false)
+	private String pageLabel;
+
+}

+ 117 - 0
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/AgreementFiles.java

@@ -0,0 +1,117 @@
+package org.springblade.box.tube.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 协议管理文件表实体类
+ *
+ * @author BladeX
+ * @since 2022-12-20
+ */
+@Data
+@TableName("basic_agreement_files")
+@ApiModel(value = "AgreementFiles对象", description = "协议管理文件表")
+public class AgreementFiles implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+
+	/**
+	 * 主表id
+	 */
+	@ApiModelProperty(value = "主表id")
+	private Long pid;
+	/**
+	 * 排序
+	 */
+	@ApiModelProperty(value = "排序")
+	private Integer sort;
+	/**
+	 * 文件名
+	 */
+	@ApiModelProperty(value = "文件名")
+	private String fileName;
+	/**
+	 * 文件地址
+	 */
+	@ApiModelProperty(value = "文件地址")
+	private String url;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 版本
+	 */
+	@ApiModelProperty(value = "版本")
+	private String version;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private Long createDept;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 状态(0 正常 1停用)
+	 */
+	@ApiModelProperty(value = "状态(0 正常 1停用)")
+	private Integer status;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+
+	/**
+	 * 租户号
+	 */
+	@ApiModelProperty(value = "租户号")
+	private String tenantId;
+
+	/**
+	 * 分类(1 主表  2 明细)
+	 */
+	@ApiModelProperty(value = "分类")
+	private String type;
+
+	/**
+	 * 名称
+	 */
+	@TableField(exist = false)
+	private String label;
+
+	/**
+	 * 地址
+	 */
+	@TableField(exist = false)
+	private String value;
+
+}

+ 51 - 0
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/feign/IAgreementClient.java

@@ -0,0 +1,51 @@
+package org.springblade.box.tube.feign;
+
+import org.springblade.box.tube.entity.Agreement;
+import org.springblade.core.tool.api.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author caifc
+ * @date 2022-12-20
+ */
+@FeignClient(
+	value = "blade-box-tube"
+)
+public interface IAgreementClient {
+
+	String APP_PREFIX = "/box-tube";
+	String GET_BY_ID = APP_PREFIX + "/getById";
+	String DECLARE_CUSTOMS_PASS_CHECK = APP_PREFIX + "/passCheck";
+	String DECLARE_CUSTOMS_UNDER_REVIEW = APP_PREFIX + "/underReview";
+	String DECLARE_CUSTOMS_PASS_CANCEL = APP_PREFIX + "/passCancel";
+
+	@GetMapping(GET_BY_ID)
+	Agreement getById(@RequestParam("id") Long id);
+
+	/**
+	 * 审核通过
+	 * @param id
+	 * @return
+	 */
+	@PostMapping(DECLARE_CUSTOMS_PASS_CHECK)
+	R passCheck(@RequestParam("id") Long id);
+
+	/**
+	 * 审核中
+	 * @param id
+	 * @return
+	 */
+	@PostMapping(DECLARE_CUSTOMS_UNDER_REVIEW)
+	R underReview(@RequestParam("id") Long id);
+
+	/**
+	 * 审核驳回
+	 * @param id
+	 * @return
+	 */
+	@PostMapping(DECLARE_CUSTOMS_PASS_CANCEL)
+	R passCancel(@RequestParam("id") Long id);
+}

+ 19 - 0
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/vo/AgreementFilesVO.java

@@ -0,0 +1,19 @@
+package org.springblade.box.tube.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.box.tube.entity.AgreementFiles;
+
+/**
+ * 协议管理附件主表视图实体类
+ *
+ * @author BladeX
+ * @since 2022-12-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "AgreementFilesVO对象", description = "协议管理附件主表")
+public class AgreementFilesVO extends AgreementFiles {
+	private static final long serialVersionUID = 1L;
+}

+ 19 - 0
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/vo/AgreementVO.java

@@ -0,0 +1,19 @@
+package org.springblade.box.tube.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.box.tube.entity.Agreement;
+
+/**
+ * 协议管理主表视图实体类
+ *
+ * @author BladeX
+ * @since 2022-12-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "AgreementVO对象", description = "协议管理主表")
+public class AgreementVO extends Agreement {
+	private static final long serialVersionUID = 1L;
+}

+ 189 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/controller/AgreementController.java

@@ -0,0 +1,189 @@
+package org.springblade.box.tube.agreement.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.box.tube.agreement.service.IAgreementService;
+import org.springblade.box.tube.entity.Agreement;
+import org.springblade.box.tube.vo.AgreementVO;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * 协议管理控制器
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/agreement")
+@Api(value = "协议管理", tags = "协议管理")
+public class AgreementController extends BladeController {
+
+	private final IAgreementService agreementService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入agreement")
+	public R<Agreement> detail(Agreement agreement) {
+		Agreement detail = agreementService.getDetail(agreement);
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入agreement")
+	public R<IPage<Agreement>> list(Agreement agreement, Query query) {
+		LambdaQueryWrapper<Agreement> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Agreement::getTenantId, AuthUtil.getTenantId())
+			.eq(Agreement::getIsDeleted, 0)
+			.eq(ObjectUtil.isNotEmpty(agreement.getCorpId()), Agreement::getCorpId, agreement.getCorpId())//客户
+			.eq(ObjectUtil.isNotEmpty(agreement.getAgreementPayment()), Agreement::getAgreementPayment, agreement.getAgreementPayment())//协议收付
+			.ge(ObjectUtil.isNotEmpty(agreement.getValidityStart()), Agreement::getValidityStart, agreement.getValidityStart())//有效期起
+			.le(ObjectUtil.isNotEmpty(agreement.getValidityEnd()), Agreement::getValidityEnd, agreement.getValidityEnd())//有效期止
+			.eq(ObjectUtil.isNotEmpty(agreement.getContractNo()), Agreement::getContractNo, agreement.getContractNo())//合同编号
+			.eq(ObjectUtil.isNotEmpty(agreement.getSysNo()), Agreement::getSysNo, agreement.getSysNo())//系统编号
+			.eq(ObjectUtil.isNotEmpty(agreement.getStatus()), Agreement::getStatus, agreement.getStatus())//状态
+			.orderByDesc(Agreement::getCreateTime);
+
+		IPage<Agreement> page = agreementService.page(Condition.getPage(query), lambdaQueryWrapper);
+
+		return R.data(page);
+	}
+
+	/**
+	 * 自定义分页
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "自定义分页", notes = "传入agreement")
+	public R<IPage<AgreementVO>> page(Agreement agreement, Query query) {
+		IPage<AgreementVO> page = agreementService.selAgreementPage(Condition.getPage(query), agreement);
+		return R.data(page);
+	}
+
+	/**
+	 * 新增协议管理
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入agreement")
+	public R save(@Valid @RequestBody Agreement agreement) {
+		return R.status(agreementService.save(agreement));
+	}
+
+	/**
+	 * 修改协议管理
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入agreement")
+	public R update(@Valid @RequestBody Agreement agreement) {
+		return R.status(agreementService.updateById(agreement));
+	}
+
+	/**
+	 * 新增或修改 协议管理
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入agreement")
+	public R submit(@Valid @RequestBody Agreement agreement) {
+		return R.data(agreementService.add(agreement));
+	}
+
+	/**
+	 * 删除 协议管理
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		Agreement agreement = agreementService.getById(ids);
+		if (ObjectUtils.isNotNull(agreement) && agreement.getStatus() > 0) {
+			throw new RuntimeException("单据审批中或审核通过不允许删除");
+		}
+		return R.status(agreementService.removeByIds(Func.toLongList(ids)));
+	}
+
+	/**
+	 * 复制单据
+	 */
+	@PostMapping("/copyAgreement")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "复制单据", notes = "传入agreement")
+	public R copyCustoms(Agreement agreement){
+		return agreementService.copyAgreement(agreement);
+	}
+	/**
+	 * 协议管理请核
+	 *
+	 * @param agreement
+	 * @return
+	 */
+	@PostMapping("/checkAgreement ")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "请核", notes = "传入agreement")
+	public R checkAgreement(@RequestBody Agreement agreement) {
+		Agreement declare = agreementService.checkAgreement(agreement);
+		return R.data(declare);
+	}
+
+	/**
+	 * 审核通过
+	 */
+	@PostMapping("/passCheck")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "审核通过", notes = "传入id")
+	public R passCheck(@ApiParam(value = "主表id", required = true) @RequestParam Long id) {
+		return agreementService.passCheck(id);
+	}
+
+	/**
+	 * 审核中
+	 */
+	@PostMapping("/underReview")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "审核中", notes = "传入id")
+	public R underReview(@ApiParam(value = "主表id", required = true) @RequestParam Long id) {
+		return agreementService.underReview(id);
+	}
+
+	/**
+	 * 审核不通过
+	 */
+	@PostMapping("/passCancel")
+	@ApiOperationSupport(order = 11)
+	@ApiOperation(value = "审核不通过", notes = "传入id")
+	public R passCancel(@ApiParam(value = "主表id", required = true) @RequestParam Long id) {
+		return agreementService.passCancel(id);
+	}
+
+	/**
+	 * 撤销审核
+	 */
+	@PostMapping("/revoke")
+	@ApiOperationSupport(order = 11)
+	@ApiOperation(value = "撤销审核", notes = "传入agreement")
+	public R revoke(@RequestBody Agreement agreement) {
+		Agreement customs = agreementService.revoke(agreement);
+		return R.data(customs);
+	}
+}

+ 106 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/controller/AgreementFilesController.java

@@ -0,0 +1,106 @@
+package org.springblade.box.tube.agreement.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.box.tube.agreement.service.IAgreementFilesService;
+import org.springblade.box.tube.entity.AgreementFiles;
+import org.springblade.box.tube.vo.AgreementFilesVO;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * 协议管理附件控制器
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/agreementFiles")
+@Api(value = "协议管理附件表", tags = "协议管理附件表")
+public class AgreementFilesController extends BladeController {
+
+	private final IAgreementFilesService filesService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入agreementFiles")
+	public R<AgreementFiles> detail(AgreementFiles agreementFiles) {
+		AgreementFiles detail = filesService.getOne(Condition.getQueryWrapper(agreementFiles));
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 协议管理文件表
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入agreementFiles")
+	public R<IPage<AgreementFiles>> list(AgreementFiles agreementFiles, Query query) {
+		IPage<AgreementFiles> pages = filesService.page(Condition.getPage(query), Condition.getQueryWrapper(agreementFiles));
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 协议管理文件表
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入agreementFiles")
+	public R<IPage<AgreementFilesVO>> page(AgreementFilesVO agreementFiles, Query query) {
+		IPage<AgreementFilesVO> pages = filesService.selectFilesPage(Condition.getPage(query), agreementFiles);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 协议管理文件表
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入agreementFiles")
+	public R save(@Valid @RequestBody AgreementFiles agreementFiles) {
+		return R.status(filesService.save(agreementFiles));
+	}
+
+	/**
+	 * 修改 协议管理文件表
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入agreementFiles")
+	public R update(@Valid @RequestBody AgreementFiles agreementFiles) {
+		return R.status(filesService.updateById(agreementFiles));
+	}
+
+	/**
+	 * 新增或修改 协议管理文件表
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入agreementFiles")
+	public R submit(@Valid @RequestBody AgreementFiles agreementFiles) {
+		return R.status(filesService.saveOrUpdate(agreementFiles));
+	}
+
+
+	/**
+	 * 删除 协议管理文件表
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(filesService.removeByIds(Func.toLongList(ids)));
+	}
+
+}

+ 24 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/mapper/AgreementFilesMapper.java

@@ -0,0 +1,24 @@
+package org.springblade.box.tube.agreement.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.box.tube.entity.Agreement;
+import org.springblade.box.tube.entity.AgreementFiles;
+import org.springblade.box.tube.vo.AgreementFilesVO;
+import org.springblade.box.tube.vo.AgreementVO;
+
+import java.util.List;
+
+/**
+ * 协议管理附件表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2022-12-20
+ */
+public interface AgreementFilesMapper extends BaseMapper<AgreementFiles> {
+
+	/**
+	 * 自定义分页
+	 */
+	List<AgreementFilesVO> selectFilesPage(IPage page, AgreementFilesVO agreementFilesVO);
+}

+ 28 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/mapper/AgreementFilesMapper.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.box.tube.agreement.mapper.AgreementFilesMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="agreementFilesResultMap" type="org.springblade.box.tube.entity.AgreementFiles">
+        <id column="id" property="id"/>
+        <result column="pid" property="pid"/>
+        <result column="sort" property="sort"/>
+        <result column="file_name" property="fileName"/>
+        <result column="url" property="url"/>
+        <result column="remarks" property="remarks"/>
+        <result column="version" property="version"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_dept" property="createDept"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+
+    <select id="selectFilesPage" resultMap="agreementFilesResultMap">
+        select * from basic_agreement_files where is_deleted = 0
+    </select>
+
+</mapper>

+ 24 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/mapper/AgreementMapper.java

@@ -0,0 +1,24 @@
+package org.springblade.box.tube.agreement.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.box.tube.entity.Agreement;
+import org.springblade.box.tube.entity.DeclareCustoms;
+import org.springblade.box.tube.vo.AgreementVO;
+import org.springblade.box.tube.vo.DeclareCustomsVo;
+
+import java.util.List;
+
+/**
+ * 协议管理表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2022-12-20
+ */
+public interface AgreementMapper extends BaseMapper<Agreement> {
+
+	/**
+	 * 自定义分页
+	 */
+	List<AgreementVO> selAgreementPage(IPage page, Agreement agreement);
+}

+ 31 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/mapper/AgreementMapper.xml

@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.box.tube.agreement.mapper.AgreementMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="agreementResultMap" type="org.springblade.box.tube.entity.Agreement">
+        <id column="id" property="id"/>
+        <result column="sys_no" property="sysNo"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_dept" property="createDept"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="tenant_id" property="tenantId"/>
+        <result column="remark" property="remark"/>
+        <result column="corp_id" property="corpId"/>
+        <result column="corp_name" property="corpName"/>
+        <result column="agreement_payment" property="agreementPayment"/>
+        <result column="validity_start" property="validityStart"/>
+        <result column="validity_end" property="validityEnd"/>
+        <result column="contract_no" property="contractNo"/>
+        <result column="audit_status" property="auditStatus"/>
+        <result column="audit_time" property="auditTime"/>
+    </resultMap>
+
+    <select id="selAgreementPage" resultMap="agreementResultMap">
+        select * from basic_agreement where is_deleted = 0
+    </select>
+</mapper>

+ 26 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/service/IAgreementFilesService.java

@@ -0,0 +1,26 @@
+package org.springblade.box.tube.agreement.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.box.tube.entity.AgreementFiles;
+import org.springblade.box.tube.vo.AgreementFilesVO;
+
+/**
+ * 协议管理文件表 服务类
+ *
+ * @author BladeX
+ * @since 2022-12-20
+ */
+public interface IAgreementFilesService extends IService<AgreementFiles> {
+
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param agreementFilesVO
+	 * @return
+	 */
+	IPage<AgreementFilesVO> selectFilesPage(IPage<AgreementFilesVO> page, AgreementFilesVO agreementFilesVO);
+
+}

+ 72 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/service/IAgreementService.java

@@ -0,0 +1,72 @@
+package org.springblade.box.tube.agreement.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.box.tube.entity.Agreement;
+import org.springblade.box.tube.vo.AgreementVO;
+import org.springblade.core.tool.api.R;
+
+/**
+ * 协议管理表 服务类
+ *
+ * @author BladeX
+ * @since 2022-12-20
+ */
+public interface IAgreementService extends IService<Agreement> {
+
+	/**
+	 * 获取协议管理详情
+	 *
+	 * @param agreement
+	 * @return
+	 */
+	Agreement getDetail(Agreement agreement);
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param agreement
+	 * @return
+	 */
+	IPage<AgreementVO> selAgreementPage(IPage<AgreementVO> page, Agreement agreement);
+
+	/**
+	 * 新增或修改 协议管理
+	 */
+	Agreement add(Agreement agreement);
+
+	/**
+	 * 复制单据
+	 */
+	R copyAgreement(Agreement agreement);
+
+	/**
+	 * 协议管理请核
+	 */
+	Agreement checkAgreement(Agreement agreement);
+
+	/**
+	 * 审批通过
+	 * @param id
+	 */
+	R passCheck(Long id);
+
+	/**
+	 * 审批中
+	 * @param id
+	 */
+	R underReview(Long id);
+
+	/**
+	 * 审核不通过
+	 * @param id
+	 */
+	R passCancel(Long id);
+
+	/**
+	 * 撤销审核
+	 * @param agreement
+	 */
+	Agreement revoke(Agreement agreement);
+}

+ 28 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/service/impl/AgreementFilesServiceImpl.java

@@ -0,0 +1,28 @@
+package org.springblade.box.tube.agreement.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.box.tube.agreement.mapper.AgreementFilesMapper;
+import org.springblade.box.tube.agreement.service.IAgreementFilesService;
+import org.springblade.box.tube.entity.AgreementFiles;
+import org.springblade.box.tube.entity.DeclareCustomsFiles;
+import org.springblade.box.tube.mapper.DeclareCustomsFilesMapper;
+import org.springblade.box.tube.service.IDeclareCustomsFilesService;
+import org.springblade.box.tube.vo.AgreementFilesVO;
+import org.springblade.box.tube.vo.DeclareCustomsFilesVO;
+import org.springframework.stereotype.Service;
+
+/**
+ * 报关文件表 服务实现类
+ *
+ * @author BladeX
+ * @since 2022-12-1
+ */
+@Service
+public class AgreementFilesServiceImpl extends ServiceImpl<AgreementFilesMapper, AgreementFiles> implements IAgreementFilesService {
+
+	@Override
+	public IPage<AgreementFilesVO> selectFilesPage(IPage<AgreementFilesVO> page, AgreementFilesVO agreementFilesVO) {
+		return page.setRecords(baseMapper.selectFilesPage(page, agreementFilesVO));
+	}
+}

+ 331 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/agreement/service/impl/AgreementServiceImpl.java

@@ -0,0 +1,331 @@
+package org.springblade.box.tube.agreement.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.seata.spring.annotation.GlobalTransactional;
+import lombok.AllArgsConstructor;
+import org.springblade.box.tube.agreement.mapper.AgreementFilesMapper;
+import org.springblade.box.tube.agreement.mapper.AgreementMapper;
+import org.springblade.box.tube.agreement.service.IAgreementService;
+import org.springblade.box.tube.entity.*;
+import org.springblade.box.tube.vo.AgreementVO;
+import org.springblade.check.dto.AuditProecessDTO;
+import org.springblade.check.entity.AuditPathsActs;
+import org.springblade.check.entity.AuditPathsLevels;
+import org.springblade.check.feign.ICheckClient;
+import org.springblade.client.feign.ISerialClient;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 协议管理表 服务实现类
+ *
+ * @author BladeX
+ * @since 2022-12-20
+ */
+@Service
+@AllArgsConstructor
+public class AgreementServiceImpl extends ServiceImpl<AgreementMapper, Agreement> implements IAgreementService {
+
+	private ISerialClient serialClient;//生成系统编号
+	private final AgreementFilesMapper filesMapper;//附件明细
+
+	private final ICheckClient iCheckClient;//审批
+
+
+	/**
+	 * 获得协议详情
+	 */
+	@Override
+	public Agreement getDetail(Agreement agreement) {
+		if (agreement.getId() == null) {
+			throw new SecurityException("缺少必要参数");
+		}
+		Agreement detail = baseMapper.selectById(agreement.getId());
+		if (ObjectUtil.isNotEmpty(detail)) {
+			//获取附件信息
+			LambdaQueryWrapper<AgreementFiles> filesLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			filesLambdaQueryWrapper.eq(AgreementFiles::getIsDeleted, 0)
+				.eq(AgreementFiles::getTenantId, AuthUtil.getTenantId())
+				.eq(AgreementFiles::getType, "1")
+				.eq(AgreementFiles::getPid, detail.getId());
+			List<AgreementFiles> filesList = filesMapper.selectList(filesLambdaQueryWrapper);
+			detail.setFilesList(filesList);
+		}
+		return detail;
+	}
+
+	/**
+	 * 自定义分页
+	 */
+	@Override
+	public IPage<AgreementVO> selAgreementPage(IPage<AgreementVO> page, Agreement agreement) {
+		return page.setRecords(baseMapper.selAgreementPage(page, agreement));
+	}
+
+	/**
+	 * 新增或修改协议管理
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public Agreement add(Agreement agreement) {
+		if (agreement.getId() == null) {
+			//获取系统编号
+			R billNo = new R();
+
+			billNo = serialClient.getBillNo("XYGL", "XY", "XYGL");
+			if (!billNo.isSuccess()) {
+				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+				throw new Error("生成系统编号失败");
+			}
+
+			agreement.setSysNo(billNo.getData().toString());
+			agreement.setCreateTime(new Date());
+			agreement.setCreateUser(AuthUtil.getUserId());
+			agreement.setTenantId(AuthUtil.getTenantId());
+			agreement.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+			agreement.setStatus(0);
+			agreement.setAuditStatus("录入");
+			baseMapper.insert(agreement);
+		} else {
+			agreement.setUpdateTime(new Date());
+			agreement.setUpdateUser(AuthUtil.getUserId());
+			baseMapper.updateById(agreement);
+		}
+
+		//主表附件
+		List<AgreementFiles> filesList = agreement.getFilesList();
+		if (ObjectUtils.isNotNull(filesList) && filesList.size() > 0) {
+			for (AgreementFiles files : filesList) {
+				if (files.getId() == null) {
+					files.setCreateUser(AuthUtil.getUserId());
+					files.setCreateTime(new Date());
+					files.setTenantId(AuthUtil.getTenantId());
+					files.setPid(agreement.getId());
+					files.setType("1");
+					filesMapper.insert(files);
+				} else {
+					files.setUpdateUser(AuthUtil.getUserId());
+					files.setUpdateTime(new Date());
+					files.setPid(agreement.getId());
+					files.setType("1");
+					filesMapper.updateById(files);
+				}
+			}
+			agreement.setFilesList(filesList);
+		}
+
+		return agreement;
+	}
+
+	/**
+	 * 复制单据
+	 */
+	@Override
+	public R copyAgreement(Agreement agreement) {
+		LambdaQueryWrapper<Agreement> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Agreement::getId, agreement.getId())
+			.eq(Agreement::getTenantId, AuthUtil.getTenantId())
+			.eq(Agreement::getIsDeleted, 0);
+		Agreement detail = baseMapper.selectOne(lambdaQueryWrapper);
+
+		if (ObjectUtil.isEmpty(detail)) {
+			throw new SecurityException("信息获取异常");
+		}
+
+		detail.setId(null);
+		detail.setCreateUser(AuthUtil.getUserId());
+		detail.setCreateTime(new Date());
+		detail.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+		detail.setSysNo("");
+		detail.setTenantId(AuthUtil.getTenantId());
+		detail.setStatus(null);
+		detail.setAuditStatus("");
+
+		//获取附件信息
+		LambdaQueryWrapper<AgreementFiles> filesLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		filesLambdaQueryWrapper.eq(AgreementFiles::getIsDeleted, 0)
+			.eq(AgreementFiles::getTenantId, AuthUtil.getTenantId())
+			.eq(AgreementFiles::getType, "1")
+			.eq(AgreementFiles::getPid, agreement.getId());
+		List<AgreementFiles> filesList = filesMapper.selectList(filesLambdaQueryWrapper);
+		filesList.forEach(e -> {
+			e.setId(null);
+			e.setPid(null);
+			e.setCreateUser(AuthUtil.getUserId());
+			e.setCreateTime(new Date());
+			e.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+		});
+		detail.setFilesList(filesList);
+
+		return R.data(detail);
+	}
+
+	/**
+	 * 报关请核
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public Agreement checkAgreement(Agreement agreement) {
+		Agreement declare = baseMapper.selectById(agreement.getId());
+		if (declare.getStatus() == 1) {
+			throw new SecurityException("订单已开启审核,请勿重复提交");
+		}
+
+		//审批数据
+		AuditProecessDTO auditProecessDTO = new AuditProecessDTO();
+		//获取审批级次
+		List<AuditPathsLevels> auditPathsLevels = null;
+		// 判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
+		AuditPathsActs pathsActs = null;
+		//是否开启流程
+		pathsActs = iCheckClient.getActsByActId(19, "status");
+		//获取审批信息
+		auditPathsLevels = iCheckClient.listLevelsByActId(19, "status");
+		auditProecessDTO.setTimes(1);
+		auditProecessDTO.setProcessType("协议管理审批");
+
+		// 没开启审批流直接走 通过流程
+		if (pathsActs == null || pathsActs.getIsEnable() == 2) {
+			throw new SecurityException("当前租户未查询到审批流配置");
+		} else {
+
+			if (CollectionUtils.isEmpty(auditPathsLevels)) {
+				throw new SecurityException("开启审批失败:未查询到审批信息");
+			}
+
+			// 绑定审核类型
+			auditProecessDTO.setCheckType("XYGL");//代理订单
+			// 追加跳转路由url
+			auditProecessDTO.setUrl(agreement.getUrl());
+			auditProecessDTO.setPageStatus(agreement.getPageStatus());
+			auditProecessDTO.setPageLabel(agreement.getPageLabel());
+			auditProecessDTO.setOrderRemark(declare.getRemark());//订单备注
+			auditProecessDTO.setPathsLevelsList(auditPathsLevels);
+			auditProecessDTO.setActId(1);
+			auditProecessDTO.setSrcBillId(declare.getId());//申请表id
+			auditProecessDTO.setBillId(declare.getId());//业务id
+			auditProecessDTO.setBillNo(declare.getSysNo());//业务编号
+			auditProecessDTO.setSendUserId(AuthUtil.getUserId());//请核人id
+			auditProecessDTO.setSendName(AuthUtil.getUserName());//请核人名称
+			auditProecessDTO.setSendTime(new Date());//请核时间
+			auditProecessDTO.setBillTime(declare.getCreateTime());//业务日期
+			auditProecessDTO.setTenantId(AuthUtil.getTenantId());//租户id
+			R financeProcess = iCheckClient.createFinanceProcess(auditProecessDTO);
+			if (!financeProcess.isSuccess()) {
+				throw new SecurityException("操作失败,请联系管理员");
+			}
+		}
+
+		declare.setStatus(1);
+		declare.setAuditStatus("提交审核");
+		declare.setAuditTime(new Date());
+		baseMapper.updateById(declare);
+
+		return declare;
+	}
+
+	/**
+	 * 审核通过
+	 */
+	@Override
+	public R passCheck(Long id) {
+		Agreement agreement = baseMapper.selectById(id);
+		if (agreement == null) {
+			throw new SecurityException("审批通过失败");
+		}
+		if (agreement.getStatus() == 4) {
+			throw new SecurityException("订单已审批通过请勿重复审批");
+		}
+
+		agreement.setStatus(4);
+		agreement.setAuditStatus("审核完成");
+		baseMapper.updateById(agreement);
+
+		return R.success("操作成功");
+	}
+
+	/**
+	 * 审核中
+	 */
+	@Override
+	public R underReview(Long id) {
+		Agreement agreement = baseMapper.selectById(id);
+		if (agreement == null) {
+			throw new SecurityException("审批通过失败");
+		}
+
+		agreement.setStatus(2);
+		agreement.setAuditStatus("审批中");
+		baseMapper.updateById(agreement);
+
+		return R.success("操作成功");
+	}
+
+	/**
+	 * 审核不通过
+	 */
+	@Override
+	public R passCancel(Long id) {
+		Agreement agreement = baseMapper.selectById(id);
+		if (agreement == null) {
+			throw new SecurityException("审批驳回失败,未找到单据");
+		}
+		if (agreement.getStatus() == 0) {
+			throw new SecurityException("订单已驳回或未提交审批,请勿重复操作");
+		}
+
+		agreement.setStatus(0);
+		agreement.setAuditStatus("录入");
+		baseMapper.updateById(agreement);
+
+		return R.success("操作成功");
+	}
+
+	/**
+	 * 撤销审核
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public Agreement revoke(Agreement agreement) {
+		Agreement detail = baseMapper.selectById(agreement.getId());
+		if (ObjectUtil.isEmpty(detail)) {
+			throw new SecurityException("撤销失败,未找到单据");
+		}
+		if (detail.getStatus().equals(2)) {
+			throw new SecurityException("撤销失败,订单正在审批中");
+		} else if (detail.getStatus().equals(3)) {
+			throw new SecurityException("撤销失败,订单已审核通过");
+		} else if (detail.getStatus().equals(0)) {
+			throw new SecurityException("撤销失败,订单未提交审核");
+		}
+
+		if (detail.getStatus() == 1) {
+			//修改单据状态
+			detail.setStatus(0);
+			detail.setAuditStatus("初审撤销");
+			detail.setUpdateUser(AuthUtil.getUserId());
+			detail.setUpdateTime(new Date());
+			//撤销
+			iCheckClient.deteleByBillIdOrGrade(agreement.getId(), 1);
+		}
+		baseMapper.updateById(detail);
+
+		return detail;
+	}
+
+}

+ 6 - 6
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/declare/DeclareCustomsFilesController.java

@@ -41,7 +41,7 @@ public class DeclareCustomsFilesController extends BladeController {
 	}
 
 	/**
-	 * 分页 买(卖)箱文件表
+	 * 分页 报关文件表
 	 */
 	@GetMapping("/list")
 	@ApiOperationSupport(order = 2)
@@ -52,7 +52,7 @@ public class DeclareCustomsFilesController extends BladeController {
 	}
 
 	/**
-	 * 自定义分页 买(卖)箱文件表
+	 * 自定义分页 报关文件表
 	 */
 	@GetMapping("/page")
 	@ApiOperationSupport(order = 3)
@@ -63,7 +63,7 @@ public class DeclareCustomsFilesController extends BladeController {
 	}
 
 	/**
-	 * 新增 买(卖)箱文件表
+	 * 新增 报关文件表
 	 */
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
@@ -73,7 +73,7 @@ public class DeclareCustomsFilesController extends BladeController {
 	}
 
 	/**
-	 * 修改 买(卖)箱文件表
+	 * 修改 报关文件表
 	 */
 	@PostMapping("/update")
 	@ApiOperationSupport(order = 5)
@@ -83,7 +83,7 @@ public class DeclareCustomsFilesController extends BladeController {
 	}
 
 	/**
-	 * 新增或修改 买(卖)箱文件表
+	 * 新增或修改 报关文件表
 	 */
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
@@ -94,7 +94,7 @@ public class DeclareCustomsFilesController extends BladeController {
 
 
 	/**
-	 * 删除 买(卖)箱文件表
+	 * 删除 报关文件表
 	 */
 	@PostMapping("/remove")
 	@ApiOperationSupport(order = 8)

+ 53 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/feign/AgreementClient.java

@@ -0,0 +1,53 @@
+package org.springblade.box.tube.feign;
+
+import lombok.AllArgsConstructor;
+import org.springblade.box.tube.agreement.service.IAgreementService;
+import org.springblade.box.tube.entity.Agreement;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+@NonDS
+@ApiIgnore()
+@RestController
+@AllArgsConstructor
+public class AgreementClient implements IAgreementClient{
+
+	private final IAgreementService agreementService;
+
+	@Override
+	public Agreement getById(Long id) {
+		return agreementService.getById(id);
+	}
+
+	/**
+	 * 审核通过
+	 * @param id
+	 * @return
+	 */
+	@Override
+	public R passCheck(Long id) {
+		return agreementService.passCheck(id);
+	}
+
+	/**
+	 * 审核中
+	 * @param id
+	 * @return
+	 */
+	@Override
+	public R underReview(Long id) {
+		return agreementService.underReview(id);
+	}
+
+	/**
+	 * 审核驳回
+	 * @param id
+	 * @return
+	 */
+	@Override
+	public R passCancel(Long id) {
+		return agreementService.passCancel(id);
+	}
+}

+ 0 - 4
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/DeclareCustomsServiceImpl.java

@@ -837,10 +837,6 @@ public class DeclareCustomsServiceImpl extends ServiceImpl<DeclareCustomsMapper,
 			//获取第一个sheet
 			Sheet sheet = wb.getSheetAt(0);
 
-			//获取最大行数
-			int rownum = sheet.getPhysicalNumberOfRows();
-			System.out.println("最大行数===》"+rownum);
-
 			//获取第四行
 			row = sheet.getRow(3);
 			String preEntryNo = row.getCell(2).toString();//预录入编号

+ 4 - 0
blade-service/blade-check/src/main/java/org/springblade/check/controller/AuditProecessController.java

@@ -313,6 +313,10 @@ public class AuditProecessController extends BladeController {
 		else if ("BGJK".equals(proecess.getCheckType()) || "BGCK".equals(proecess.getCheckType())){
 			auditProecessService.declareCustomsCheck(auditProecess);
 		}
+		//协议管理
+		else if ("XYGL".equals(proecess.getCheckType())){
+			auditProecessService.agreementCheck(auditProecess);
+		}
 		//销售政策审核
 		else if ("xszc".equals(proecess.getCheckType())) {
 			auditProecessService.salesPolicyCheck(auditProecess);

+ 6 - 0
blade-service/blade-check/src/main/java/org/springblade/check/service/IAuditProecessService.java

@@ -80,6 +80,12 @@ public interface IAuditProecessService extends IService<AuditProecess> {
 	void declareCustomsCheck(AuditProecess auditProecess);
 
 	/**
+	 * 协议管理审核
+	 * @param auditProecess
+	 */
+	void agreementCheck(AuditProecess auditProecess);
+
+	/**
 	 * 销售政策审批
 	 * @param auditProecess
 	 */

+ 174 - 8
blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java

@@ -31,14 +31,8 @@ import com.trade.purchase.office.feign.IOfficeOrderClient;
 import com.trade.purchase.order.feign.IFinancingClient;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
-import org.springblade.box.tube.entity.DeclareCustoms;
-import org.springblade.box.tube.entity.Repair;
-import org.springblade.box.tube.entity.TradingBox;
-import org.springblade.box.tube.entity.Transport;
-import org.springblade.box.tube.feign.IDeclareCustomsClient;
-import org.springblade.box.tube.feign.IRepairClient;
-import org.springblade.box.tube.feign.ITradingBoxClient;
-import org.springblade.box.tube.feign.ITransportClient;
+import org.springblade.box.tube.entity.*;
+import org.springblade.box.tube.feign.*;
 import org.springblade.check.dto.AuditProecessDTO;
 import org.springblade.check.entity.AuditPathsActs;
 import org.springblade.check.entity.AuditPathsLevels;
@@ -140,6 +134,8 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 
 	private final IDeclareCustomsClient declareCustomsClient;//报关
 
+	private final IAgreementClient agreementClient;//协议管理
+
 
 
 	@Override
@@ -2187,6 +2183,176 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 	}
 
 	/**
+	 * 协议管理审核
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public void  agreementCheck(AuditProecess auditProecess) {
+		//查看最新操作记录,防止重复提交
+		AuditProecess proecessTemp = baseMapper.selectById(auditProecess.getId());
+		if (proecessTemp == null) {
+			throw new SecurityException("未查到此审批记录,禁止操作");
+		}
+		if ("A".equals(proecessTemp.getAuditStatus()) || "B".equals(proecessTemp.getAuditStatus())) {
+			throw new SecurityException("当前记录已经完成审批,禁止重复操作");
+		}
+
+		if (auditProecess.getAuditStatus() == null || !"S".equals(auditProecess.getAuditStatus())) {
+			throw new SecurityException("审批状态非待审,禁止操作");
+		}
+		//信息
+		Message sendMessage = new Message();
+		sendMessage.setParameter(String.valueOf(auditProecess.getBillId()));
+		sendMessage.setUserName(AuthUtil.getUserName());
+		sendMessage.setUserId(AuthUtil.getUserId());
+		sendMessage.setToUserId(auditProecess.getSendUserId());
+		sendMessage.setToUserName(auditProecess.getSendName());
+		sendMessage.setMessageType(1);
+		sendMessage.setTenantId(AuthUtil.getTenantId());
+		sendMessage.setCreateUser(AuthUtil.getUserId());
+		sendMessage.setCreateTime(new Date());
+		sendMessage.setUrl(auditProecess.getUrl());
+		sendMessage.setPageLabel(auditProecess.getPageLabel());
+		sendMessage.setPageStatus(auditProecess.getPageStatus());
+
+		//用户操作 1.通过  2.驳回
+		Integer operate = auditProecess.getOperate();
+		//查看当前审批是否为最后一级
+		String iffinalItem = auditProecess.getIffinalItem();
+		//审批人
+		auditProecess.setAuditUserId(String.valueOf(AuthUtil.getUserId()));
+		//审批时间
+		auditProecess.setAuditOpTime(new Date());
+
+		Agreement agreement = agreementClient.getById(proecessTemp.getBillId());
+
+		//不是最后一级
+		if ("F".equals(iffinalItem)) {
+
+			//通过
+			if (operate == 1) {
+				//如果是第一级, 则修改状态为审批中
+				if (auditProecess.getLevelId() == 1) {
+					R submit = agreementClient.underReview(auditProecess.getSrcBillId());
+					if (!submit.isSuccess()) {
+						throw new SecurityException("审批开始修改审核状态失败");
+					}
+				}
+
+				auditProecess.setAuditStatus("A");
+				//查询下一级,开启待审
+				LambdaQueryWrapper<AuditProecess> auditProecessLambdaQueryWrapper = new LambdaQueryWrapper<>();
+				auditProecessLambdaQueryWrapper
+					.eq(AuditProecess::getBatchNo, auditProecess.getBatchNo())
+					.eq(AuditProecess::getSrcBillId, auditProecess.getSrcBillId())
+					.eq(AuditProecess::getIsDelete, 0)
+					.eq(AuditProecess::getActId, auditProecess.getActId())
+					.eq(AuditProecess::getBillId, auditProecess.getBillId())
+					.eq(AuditProecess::getBillNo, auditProecess.getBillNo())
+					.eq(AuditProecess::getTenantId, AuthUtil.getTenantId())
+					.eq(AuditProecess::getLevelId, auditProecess.getLevelId() + 1);
+				Integer count = baseMapper.selectCount(auditProecessLambdaQueryWrapper);
+				if (count != null && count > 1) {
+					throw new SecurityException("审核失败,获取下一级信息失败");
+				}
+				AuditProecess proecess = baseMapper.selectOne(auditProecessLambdaQueryWrapper);
+				if (proecess == null) {
+					throw new SecurityException("审批通过=>获取下一级信息失败");
+				}
+				proecess.setAuditStatus("S");
+				baseMapper.updateById(proecess);
+
+				SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
+
+				//获得订单创建日期
+				String orderDate = null;
+				if (proecessTemp.getBillId() != null) {
+					if (agreement != null) {
+						orderDate = simpleDateFormat.format(agreement.getCreateTime());
+					}
+				}
+
+				Message message = new Message();
+				message.setUserName(AuthUtil.getUserName());
+				message.setUserId(AuthUtil.getUserId());
+				message.setParameter(String.valueOf(auditProecess.getBillId()));
+				message.setMessageType(1);
+				message.setTenantId(AuthUtil.getTenantId());
+				//报关模板
+				message.setMessageBody("您有协议订单审核,订单单号:" + "" + proecessTemp.getBillNo() + ","
+					+ "订单日期:" + orderDate + ",请审核。"
+					+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
+				);
+
+				message.setCreateUser(AuthUtil.getUserId());
+				message.setUrl("/bidingDocument/issueTender/index");
+				message.setCreateTime(new Date());
+
+				// 消息批量通知下一级
+				sendMsgToGroup(message, proecess.getAuditUserId());
+			}
+			//不通过
+			else if (operate == 2) {
+				auditProecess.setAuditStatus("B");
+				//todo 调用feign取消
+				R r = agreementClient.passCancel(auditProecess.getSrcBillId());
+				if (!r.isSuccess()) {
+					throw new SecurityException("修改订单数据失败");
+				}
+
+				sendMessage.setMessageBody("您的协议订单审核未通过" + ",订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+
+		}
+		//是最后一级
+		else if ("T".equals(iffinalItem)) {
+			//通过
+			if (operate == 1) {
+				//todo 调用feign直接通过
+				auditProecess.setAuditStatus("A");
+				R r = agreementClient.passCheck(auditProecess.getSrcBillId());
+				if (!r.isSuccess()) {
+					throw new SecurityException("修改订单数据失败");
+				}
+
+				sendMessage.setMessageBody("您的协议订单审核已通过" + ",订单号:" + proecessTemp.getBillNo() + ",请继续操作");
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+			//不通过
+			else if (operate == 2) {
+				//todo 调用feign取消
+				auditProecess.setAuditStatus("B");
+				R r = agreementClient.passCancel(auditProecess.getSrcBillId());
+				if (!r.isSuccess()) {
+					throw new SecurityException("修改订单数据失败");
+				}
+				sendMessage.setMessageBody("您的协议订单审核未通过" + ",订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+		} else {
+			throw new SecurityException("审批异常,请联系管理员");
+		}
+
+		cleanMsg(proecessTemp.getAuditUserId(), AuthUtil.getUserId(), proecessTemp.getSrcBillId());
+
+		//保存操作记录
+		auditProecess.setAuditMsg(auditProecess.getAuditMsg());
+		auditProecess.setAuditItem(new Date());
+		baseMapper.updateById(auditProecess);
+	}
+
+	/**
 	 * 销售政策审核
 	 */
 	@Override

+ 7 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/SalesPolicyServiceImpl.java

@@ -28,6 +28,7 @@ import org.springblade.check.dto.AuditProecessDTO;
 import org.springblade.check.entity.AuditPathsActs;
 import org.springblade.check.entity.AuditPathsLevels;
 import org.springblade.check.feign.ICheckClient;
+import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.entity.GoodsDesc;
 import org.springblade.client.entity.GoodsType;
 import org.springblade.client.feign.ICorpsDescClient;
@@ -35,6 +36,7 @@ import org.springblade.client.feign.IGoodsDescClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.mocha.entity.SalesPolicy;
 import org.springblade.mocha.entity.SalesPolicyItem;
@@ -96,6 +98,11 @@ public class SalesPolicyServiceImpl extends ServiceImpl<SalesPolicyMapper, Sales
 			}
 		}
 		if (salesPolicy.getId() == null) {
+			String role = AuthUtil.getUserRole();
+			if (role.contains("admin")){//admin不用审核
+				salesPolicy.setStatus(0);
+				salesPolicy.setAuditStatus(0);
+			}
 			salesPolicy.setTenantId(SecureUtil.getTenantId());
 			salesPolicy.setCreateTime(new Date());
 			salesPolicy.setCreateUser(SecureUtil.getUserId());