Browse Source

20230213 18:20

wangzhuo 2 years ago
parent
commit
a66721f810
14 changed files with 752 additions and 20 deletions
  1. 105 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/AnnualBudget.java
  2. 186 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/entity/AnnualBudgetItem.java
  3. 19 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/vo/AnnualBudgetItemVO.java
  4. 19 0
      blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/vo/AnnualBudgetVO.java
  5. 116 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/annualBudget/controller/AnnualBudgetController.java
  6. 24 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/annualBudget/mapper/AnnualBudgetItemMapper.java
  7. 29 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/annualBudget/mapper/AnnualBudgetItemMapper.xml
  8. 22 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/annualBudget/mapper/AnnualBudgetMapper.java
  9. 25 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/annualBudget/mapper/AnnualBudgetMapper.xml
  10. 39 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/annualBudget/service/IAnnualBudgetService.java
  11. 121 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/annualBudget/service/impl/AnnualBudgetServiceImpl.java
  12. 2 0
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/declare/DeclareCustomsController.java
  13. 42 17
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/DeclareCustomsServiceImpl.java
  14. 3 3
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

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

@@ -0,0 +1,105 @@
+package org.springblade.box.tube.entity;
+
+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 2023-02-13
+ */
+@Data
+@ApiModel(value = "AnnualBudget对象", description = "年度预算表")
+public class AnnualBudget implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+	@ApiModelProperty(value = "主键")
+	private Long id;
+
+	/**
+	 * 系统编号
+	 */
+	@ApiModelProperty(value = "系统编号")
+	private String sysNo;
+
+	/**
+	 * 排序
+	 */
+	@ApiModelProperty(value = "排序")
+	private Integer sort;
+
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+
+	/**
+	 * 创建人
+	 */
+	@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;
+
+	/**
+	 * 标题
+	 */
+	@ApiModelProperty(value = "标题")
+	private String title;
+
+	/**
+	 * 年份
+	 */
+	@ApiModelProperty(value = "年份")
+	private Integer particularYear;
+
+	/**
+	 * 明细集合
+	 */
+	List<AnnualBudgetItem> itemList;
+}

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

@@ -0,0 +1,186 @@
+package org.springblade.box.tube.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 年度预算明细实体类
+ *
+ * @author BladeX
+ * @since 2023-02-13
+ */
+@Data
+@ApiModel(value = "AnnualBudget对象", description = "年度预算明细表")
+public class AnnualBudgetItem implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+	@ApiModelProperty(value = "主键")
+	private Long id;
+
+	/**
+	 * 主表id
+	 */
+	@ApiModelProperty(value = "主表id")
+	private Long pid;
+
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+
+	/**
+	 * 租户号
+	 */
+	@ApiModelProperty(value = "租户号")
+	private String tenantId;
+
+	/**
+	 * 创建人
+	 */
+	@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;
+
+	/**
+	 * 客户id
+	 */
+	@ApiModelProperty(value = "客户id")
+	private Long corpId;
+
+	/**
+	 * 年
+	 */
+	@ApiModelProperty(value = "年")
+	private Integer year;
+
+	/**
+	 * 月
+	 */
+	@ApiModelProperty(value = "月")
+	private Integer month;
+
+	/**
+	 * 欧记计划量
+	 */
+	@ApiModelProperty(value = "欧记计划量")
+	private BigDecimal keter;
+
+	/**
+	 * 艾特路计划量
+	 */
+	@ApiModelProperty(value = "艾特路计划量")
+	private BigDecimal xcentway;
+
+	/**
+	 * 路迈计划量
+	 */
+	@ApiModelProperty(value = "路迈计划量")
+	private BigDecimal luxxan;
+
+	/**
+	 * 登马计划量
+	 */
+	@ApiModelProperty(value = "登马计划量")
+	private BigDecimal drivemaster;
+
+	/**
+	 * 预留品牌字段
+	 */
+	@ApiModelProperty(value = "预留品牌字段")
+	private BigDecimal brand1;
+
+	/**
+	 * 预留品牌字段
+	 */
+	@ApiModelProperty(value = "预留品牌字段")
+	private BigDecimal brand2;
+
+	/**
+	 * 预留品牌字段
+	 */
+	@ApiModelProperty(value = "预留品牌字段")
+	private BigDecimal brand3;
+
+	/**
+	 * 预留品牌字段
+	 */
+	@ApiModelProperty(value = "预留品牌字段")
+	private BigDecimal brand4;
+
+	/**
+	 * 预留品牌字段
+	 */
+	@ApiModelProperty(value = "预留品牌字段")
+	private BigDecimal brand5;
+
+	/**
+	 * 预留品牌字段
+	 */
+	@ApiModelProperty(value = "预留品牌字段")
+	private BigDecimal brand6;
+
+	/**
+	 * 预留品牌字段
+	 */
+	@ApiModelProperty(value = "预留品牌字段")
+	private BigDecimal brand7;
+
+	/**
+	 * 预留品牌字段
+	 */
+	@ApiModelProperty(value = "预留品牌字段")
+	private BigDecimal brand8;
+
+	/**
+	 * 预留品牌字段
+	 */
+	@ApiModelProperty(value = "预留品牌字段")
+	private BigDecimal brand9;
+
+	/**
+	 * 预留品牌字段
+	 */
+	@ApiModelProperty(value = "预留品牌字段")
+	private BigDecimal brand10;
+
+
+}

+ 19 - 0
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/vo/AnnualBudgetItemVO.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.AnnualBudgetItem;
+
+/**
+ * 年度预算明细表视图实体类
+ *
+ * @author BladeX
+ * @since 2023-02-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "AnnualBudgetVO对象", description = "年度预算明细表")
+public class AnnualBudgetItemVO extends AnnualBudgetItem {
+	private static final long serialVersionUID = 1L;
+}

+ 19 - 0
blade-service-api/blade-box-tube-api/src/main/java/org/springblade/box/tube/vo/AnnualBudgetVO.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.AnnualBudget;
+
+/**
+ * 年度预算主表视图实体类
+ *
+ * @author BladeX
+ * @since 2023-02-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "AnnualBudgetVO对象", description = "年度预算主表")
+public class AnnualBudgetVO extends AnnualBudget {
+	private static final long serialVersionUID = 1L;
+}

+ 116 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/annualBudget/controller/AnnualBudgetController.java

@@ -0,0 +1,116 @@
+package org.springblade.box.tube.annualBudget.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.annualBudget.service.IAnnualBudgetService;
+import org.springblade.box.tube.entity.Agreement;
+import org.springblade.box.tube.entity.AnnualBudget;
+import org.springblade.box.tube.vo.AnnualBudgetVO;
+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("/annual")
+@Api(value = "年度预算", tags = "年度预算")
+public class AnnualBudgetController extends BladeController {
+
+	private final IAnnualBudgetService annualBudgetService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入agreement")
+	public R<AnnualBudget> detail(AnnualBudget annualBudget) {
+		AnnualBudget detail = annualBudgetService.getDetail(annualBudget);
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入annualBudget")
+	public R<IPage<AnnualBudget>> list(AnnualBudget annualBudget, Query query) {
+		LambdaQueryWrapper<AnnualBudget> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(AnnualBudget::getTenantId, AuthUtil.getTenantId())
+			.eq(AnnualBudget::getIsDeleted, 0)
+			.like(ObjectUtil.isNotEmpty(annualBudget.getTitle()), AnnualBudget::getTitle, annualBudget.getTitle())//标题
+			.like(ObjectUtil.isNotEmpty(annualBudget.getParticularYear()), AnnualBudget::getParticularYear, annualBudget.getParticularYear());//年份
+
+		IPage<AnnualBudget> page = annualBudgetService.page(Condition.getPage(query), lambdaQueryWrapper);
+
+		return R.data(page);
+	}
+
+	/**
+	 * 自定义分页
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "自定义分页", notes = "传入annualBudget")
+	public R<IPage<AnnualBudgetVO>> page(AnnualBudget annualBudget, Query query) {
+		IPage<AnnualBudgetVO> page = annualBudgetService.selectAnnualBudgetPage(Condition.getPage(query), annualBudget);
+		return R.data(page);
+	}
+
+	/**
+	 * 新增年度预算
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入annualBudget")
+	public R save(@Valid @RequestBody AnnualBudget annualBudget) {
+		return R.status(annualBudgetService.save(annualBudget));
+	}
+
+	/**
+	 * 修改年度预算
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入annualBudget")
+	public R update(@Valid @RequestBody AnnualBudget annualBudget) {
+		return R.status(annualBudgetService.updateById(annualBudget));
+	}
+
+	/**
+	 * 新增或修改 年度预算
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入annualBudget")
+	public R submit(@Valid @RequestBody AnnualBudget annualBudget) {
+		return R.data(annualBudgetService.add(annualBudget));
+	}
+
+	/**
+	 * 删除 年度预算
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(annualBudgetService.removeByIds(Func.toLongList(ids)));
+	}
+
+}

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

@@ -0,0 +1,24 @@
+package org.springblade.box.tube.annualBudget.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.box.tube.entity.AnnualBudget;
+import org.springblade.box.tube.entity.AnnualBudgetItem;
+import org.springblade.box.tube.vo.AnnualBudgetItemVO;
+import org.springblade.box.tube.vo.AnnualBudgetVO;
+
+import java.util.List;
+
+/**
+ * 年度预算明细表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2023-02-13
+ */
+public interface AnnualBudgetItemMapper extends BaseMapper<AnnualBudgetItem> {
+
+	/**
+	 * 自定义分页
+	 */
+	List<AnnualBudgetItemVO> selectAnnualBudgetItemPage(IPage page, AnnualBudgetItemVO annualBudgetItemVO);
+}

+ 29 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/annualBudget/mapper/AnnualBudgetItemMapper.xml

@@ -0,0 +1,29 @@
+<?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.annualBudget.mapper.AnnualBudgetItemMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="annualBudgetItemResultMap" type="org.springblade.box.tube.entity.AnnualBudgetItem">
+        <id column="id" property="id"/>
+        <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="remarks" property="remarks"/>
+        <result column="corp_id" property="corpId"/>
+        <result column="year" property="year"/>
+        <result column="month" property="month"/>
+        <result column="keter" property="keter"/>
+        <result column="xcentway" property="xcentway"/>
+        <result column="luxxan" property="luxxan"/>
+        <result column="drivemaster" property="drivemaster"/>
+    </resultMap>
+
+    <select id="selectAnnualBudgetItemPage" resultMap="annualBudgetItemResultMap">
+        select * from annual_budget_item where is_deleted = 0
+    </select>
+</mapper>

+ 22 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/annualBudget/mapper/AnnualBudgetMapper.java

@@ -0,0 +1,22 @@
+package org.springblade.box.tube.annualBudget.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.box.tube.entity.AnnualBudget;
+import org.springblade.box.tube.vo.AnnualBudgetVO;
+
+import java.util.List;
+
+/**
+ * 年度预算表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2023-02-13
+ */
+public interface AnnualBudgetMapper extends BaseMapper<AnnualBudget> {
+
+	/**
+	 * 自定义分页
+	 */
+	List<AnnualBudgetVO> selectAnnualBudgetPage(IPage page, AnnualBudget annualBudget);
+}

+ 25 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/annualBudget/mapper/AnnualBudgetMapper.xml

@@ -0,0 +1,25 @@
+<?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.annualBudget.mapper.AnnualBudgetMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="annualBudgetResultMap" type="org.springblade.box.tube.entity.AnnualBudget">
+        <id column="id" property="id"/>
+        <result column="sort" property="sort"/>
+        <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="remarks" property="remarks"/>
+        <result column="title" property="title"/>
+        <result column="particular_year" property="particularYear"/>
+    </resultMap>
+
+    <select id="selectAnnualBudgetPage" resultMap="annualBudgetResultMap">
+        select * from annual_budget where is_deleted = 0
+    </select>
+</mapper>

+ 39 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/annualBudget/service/IAnnualBudgetService.java

@@ -0,0 +1,39 @@
+package org.springblade.box.tube.annualBudget.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.entity.AnnualBudget;
+import org.springblade.box.tube.vo.AgreementVO;
+import org.springblade.box.tube.vo.AnnualBudgetVO;
+
+/**
+ * 年度预算表 服务类
+ *
+ * @author BladeX
+ * @since 2023-02-13
+ */
+public interface IAnnualBudgetService extends IService<AnnualBudget> {
+
+	/**
+	 * 获取年度预算详情
+	 *
+	 * @param annualBudget
+	 * @return
+	 */
+	AnnualBudget getDetail(AnnualBudget annualBudget);
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param annualBudget
+	 * @return
+	 */
+	IPage<AnnualBudgetVO> selectAnnualBudgetPage(IPage<AnnualBudgetVO> page, AnnualBudget annualBudget);
+
+	/**
+	 * 新增或修改 年度预算
+	 */
+	AnnualBudget add(AnnualBudget annualBudget);
+}

+ 121 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/annualBudget/service/impl/AnnualBudgetServiceImpl.java

@@ -0,0 +1,121 @@
+package org.springblade.box.tube.annualBudget.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.annualBudget.mapper.AnnualBudgetItemMapper;
+import org.springblade.box.tube.annualBudget.mapper.AnnualBudgetMapper;
+import org.springblade.box.tube.annualBudget.service.IAnnualBudgetService;
+import org.springblade.box.tube.entity.AnnualBudget;
+import org.springblade.box.tube.entity.AnnualBudgetItem;
+import org.springblade.box.tube.vo.AnnualBudgetVO;
+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 2023-02-13
+ */
+@Service
+@AllArgsConstructor
+public class AnnualBudgetServiceImpl extends ServiceImpl<AnnualBudgetMapper, AnnualBudget> implements IAnnualBudgetService {
+
+	private ISerialClient serialClient;//生成系统编号
+	private final AnnualBudgetItemMapper itemMapper;//明细
+
+	/**
+	 * 获得年度预算详情
+	 */
+	@Override
+	public AnnualBudget getDetail(AnnualBudget annualBudget) {
+		if (annualBudget.getId() == null) {
+			throw new SecurityException("缺少必要参数");
+		}
+		AnnualBudget detail = baseMapper.selectById(annualBudget.getId());
+		if (ObjectUtil.isNotEmpty(detail)) {
+			//获取明细信息
+			LambdaQueryWrapper<AnnualBudgetItem> filesLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			filesLambdaQueryWrapper.eq(AnnualBudgetItem::getIsDeleted, 0)
+				.eq(AnnualBudgetItem::getTenantId, AuthUtil.getTenantId())
+				.eq(AnnualBudgetItem::getPid, detail.getId());
+			List<AnnualBudgetItem> itemList = itemMapper.selectList(filesLambdaQueryWrapper);
+			detail.setItemList(itemList);
+		}
+		return detail;
+	}
+
+	/**
+	 * 自定义分页
+	 */
+	@Override
+	public IPage<AnnualBudgetVO> selectAnnualBudgetPage(IPage<AnnualBudgetVO> page, AnnualBudget annualBudget) {
+		return page.setRecords(baseMapper.selectAnnualBudgetPage(page, annualBudget));
+	}
+
+	/**
+	 * 新增或修改年度预算
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public AnnualBudget add(AnnualBudget annualBudget) {
+		if (annualBudget.getId() == null) {
+			//获取系统编号
+			R billNo = new R();
+
+			billNo = serialClient.getBillNo("NDYS", "YS", "NDYS");
+			if (!billNo.isSuccess()) {
+				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+				throw new Error("生成系统编号失败");
+			}
+
+			annualBudget.setSysNo(billNo.getData().toString());
+			annualBudget.setCreateTime(new Date());
+			annualBudget.setCreateUser(AuthUtil.getUserId());
+			annualBudget.setTenantId(AuthUtil.getTenantId());
+			annualBudget.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+			annualBudget.setStatus(0);
+			baseMapper.insert(annualBudget);
+		} else {
+			annualBudget.setUpdateTime(new Date());
+			annualBudget.setUpdateUser(AuthUtil.getUserId());
+			baseMapper.updateById(annualBudget);
+		}
+
+		//主表附件
+		List<AnnualBudgetItem> itemList = annualBudget.getItemList();
+		if (ObjectUtils.isNotNull(itemList) && itemList.size() > 0) {
+			for (AnnualBudgetItem item : itemList) {
+				if (item.getId() == null) {
+					item.setCreateUser(AuthUtil.getUserId());
+					item.setCreateTime(new Date());
+					item.setTenantId(AuthUtil.getTenantId());
+					item.setPid(annualBudget.getId());
+					itemMapper.insert(item);
+				} else {
+					item.setUpdateUser(AuthUtil.getUserId());
+					item.setUpdateTime(new Date());
+					item.setPid(annualBudget.getId());
+					itemMapper.updateById(item);
+				}
+			}
+			annualBudget.setItemList(itemList);
+		}
+
+		return annualBudget;
+	}
+}

+ 2 - 0
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/declare/DeclareCustomsController.java

@@ -71,6 +71,7 @@ public class DeclareCustomsController extends BladeController {
 			.like(ObjectUtil.isNotEmpty(declareCustoms.getCustomsNo()), DeclareCustoms::getCustomsNo, declareCustoms.getCustomsNo())//海关编号
 			.like(ObjectUtil.isNotEmpty(declareCustoms.getDeliveryNumbers()), DeclareCustoms::getDeliveryNumbers, declareCustoms.getDeliveryNumbers())//提运单号
 			.like(ObjectUtil.isNotEmpty(declareCustoms.getCustomsDeclarationPlace()), DeclareCustoms::getCustomsDeclarationPlace, declareCustoms.getCustomsDeclarationPlace())//申报地海关
+			.like(ObjectUtil.isNotEmpty(declareCustoms.getSysNo()), DeclareCustoms::getSysNo, declareCustoms.getSysNo())//系统编号
 			.eq(ObjectUtil.isNotEmpty(declareCustoms.getStatus()), DeclareCustoms::getStatus, declareCustoms.getStatus());//状态
 
 		if (declareCustoms.getDeclareDateList() != null && declareCustoms.getDeclareDateList().size() > 1) {
@@ -203,6 +204,7 @@ public class DeclareCustomsController extends BladeController {
 	@ApiOperationSupport(order = 11)
 	@ApiOperation(value = "撤销审核", notes = "传入declareCustoms")
 	public R revoke(@RequestBody DeclareCustoms declareCustoms) {
+		declareCustoms.setCheckFlag(1);
 		DeclareCustoms customs = declareCustomsService.revoke(declareCustoms);
 		return R.data(customs);
 	}

+ 42 - 17
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/DeclareCustomsServiceImpl.java

@@ -33,6 +33,7 @@ import org.springblade.client.feign.ISerialClient;
 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.finance.dto.ApplyDTO;
 import org.springblade.finance.feign.IFinanceClient;
@@ -630,6 +631,8 @@ public class DeclareCustomsServiceImpl extends ServiceImpl<DeclareCustomsMapper,
 
 	/**
 	 * 撤销审核
+	 * 初审撤销:提交后未审核,允许撤销;审核通过 admin允许撤销;提交复审后,不允许撤销
+	 * 复审撤销:提交后未审核,允许撤销;审核通过 admin允许撤销同时撤销账单;做了账款结算,需撤销帐款结算后再撤销
 	 */
 	@Override
 	@Transactional(rollbackFor = Exception.class)
@@ -639,29 +642,52 @@ public class DeclareCustomsServiceImpl extends ServiceImpl<DeclareCustomsMapper,
 		if (ObjectUtil.isEmpty(customs)) {
 			throw new SecurityException("撤销失败,未找到单据");
 		}
-		if (customs.getStatus().equals(2)) {
-			throw new SecurityException("撤销失败,订单正在审批中");
-		} else if (customs.getStatus().equals(3)) {
-			throw new SecurityException("撤销失败,订单已审核通过");
-		} else if (customs.getStatus().equals(0)) {
-			throw new SecurityException("撤销失败,订单未提交审核");
-		} else if (customs.getStatus().equals(6)) {
-			throw new SecurityException("撤销失败,订单正在复审审批中");
-		} else if (customs.getStatus().equals(7)) {
-			throw new SecurityException("撤销失败,订单复审已审核通过");
-		} else if (customs.getStatus().equals(4)) {
-			throw new SecurityException("撤销失败,订单未提交复审审核");
+		if (ObjectUtil.isEmpty(declareCustoms.getCheckFlag())){
+			throw new SecurityException("缺少必要参数");
 		}
 
-		if (customs.getStatus() == 1) {
+		String role = AuthUtil.getUserRole();
+
+		if (declareCustoms.getCheckFlag() == 1){//初审撤销
+
+			if (customs.getStatus() == 0){
+				throw new SecurityException("撤销失败,订单未提交审核");
+			}
+			if (role.contains("admin")){
+				if (customs.getStatus() > 4){
+					throw new SecurityException("撤销失败,订单已进入复审流程");
+				}
+			}else {
+				if (customs.getStatus() == 2) {
+					throw new SecurityException("撤销失败,订单正在审批中");
+				} else if (customs.getStatus() == 3) {
+					throw new SecurityException("撤销失败,订单已审核通过");
+				} else if (customs.getStatus() == 4){
+					throw new SecurityException("撤销失败,订单初审已完成");
+				}
+			}
+
 			//修改单据状态
 			customs.setStatus(0);
-			customs.setAuditStatus("初审撤销");
+			customs.setAuditStatus("录入");
 			customs.setUpdateUser(AuthUtil.getUserId());
 			customs.setUpdateTime(new Date());
 			//撤销
 			iCheckClient.deteleByBillIdOrGrade(declareCustoms.getId(), 1);
-		} else if (customs.getStatus() == 5) {
+
+		} else if (declareCustoms.getCheckFlag() == 2){//复审撤销
+
+			if (customs.getStatus() == 4){
+				throw new SecurityException("撤销失败,订单未提交审核");
+			}
+			if (!role.contains("admin")){
+				if (customs.getStatus() == 6) {
+					throw new SecurityException("撤销失败,订单正在复审审批中");
+				} else if (customs.getStatus() == 7) {
+					throw new SecurityException("撤销失败,订单复审已审核通过");
+				}
+			}
+
 			//获取账单信息
 			Acc acc = new Acc();
 			acc.setSrcParentId(customs.getId());
@@ -686,7 +712,7 @@ public class DeclareCustomsServiceImpl extends ServiceImpl<DeclareCustomsMapper,
 
 			//修改单据状态
 			customs.setStatus(4);
-			customs.setAuditStatus("复审撤销");
+			customs.setAuditStatus("初审完成");
 			customs.setUpdateUser(AuthUtil.getUserId());
 			customs.setUpdateTime(new Date());
 
@@ -703,7 +729,6 @@ public class DeclareCustomsServiceImpl extends ServiceImpl<DeclareCustomsMapper,
 			}
 			//撤销
 			iCheckClient.deteleByBillIdOrGrade(declareCustoms.getId(), 2);
-
 		}
 
 		baseMapper.updateById(customs);

+ 3 - 3
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -1152,19 +1152,19 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			.eq(Order::getTenantId, AuthUtil.getTenantId())
 			.eq(Order::getSrcId, salesOrder.getId()));
 		if (ObjectUtil.isNotEmpty(orderPurchase)) {//判断采购订单是否存在
-			throw new SecurityException("采购订单已存在,禁止撤销");
+			throw new SecurityException("采购订单已存在,请删除后重新申请");
 		}
 
 		//根据订单号获得收发货
 		List<Delivery> deliveryList = deliveryClient.getOrgMessage(salesOrder.getOrderNo(), OrderTypeEnum.DOMESTIC.getType());
 		if (CollectionUtils.isNotEmpty(deliveryList)) {//判断收发货是否存在
-			throw new SecurityException("收发货单据已存在,禁止撤销");
+			throw new SecurityException("收发货单据已存在,请删除后重新申请");
 		}
 
 		//获得财务收款信息
 		List<Settlement> settlementList = financeClient.selectSrcOrderNo(salesOrder.getOrderNo());
 		if (CollectionUtils.isNotEmpty(settlementList)) {//判断收款是否存在
-			throw new SecurityException("收款单据已存在,禁止撤销");
+			throw new SecurityException("收款单据已存在,请删除后重新申请");
 		}
 
 		//审批数据