Browse Source

Merge remote-tracking branch 'origin/dev' into dev

lazhaoqian 3 years ago
parent
commit
c9004ca03a
20 changed files with 475 additions and 49 deletions
  1. 4 0
      blade-service-api/blade-check-api/src/main/java/org/springblade/check/entity/AuditProecess.java
  2. 4 0
      blade-service-api/blade-check-api/src/main/java/org/springblade/check/vo/AuditOrderVO.java
  3. 29 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/IMessageClient.java
  4. 3 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/Order.java
  5. 3 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/OrderFees.java
  6. 30 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/feign/IOrderFeesClient.java
  7. 8 0
      blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/entity/Acc.java
  8. 8 0
      blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/entity/Items.java
  9. 3 1
      blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/feign/IFinanceClient.java
  10. 3 0
      blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/Order.java
  11. 2 0
      blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/OrderFees.java
  12. 20 1
      blade-service/blade-check/src/main/java/org/springblade/check/controller/AuditProecessController.java
  13. 2 0
      blade-service/blade-check/src/main/java/org/springblade/check/entity/AuditProecess.java
  14. 52 3
      blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java
  15. 1 1
      blade-service/blade-client/src/main/java/org/springblade/client/goods/controller/GoodsDescController.java
  16. 94 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/scheduled/OrderCreditDateCheckTimer.java
  17. 11 7
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java
  18. 91 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/tools/DateUtils.java
  19. 97 28
      blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java
  20. 10 8
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/component/impl/DefaultOrderSaveImpl.java

+ 4 - 0
blade-service-api/blade-check-api/src/main/java/org/springblade/check/entity/AuditProecess.java

@@ -126,5 +126,9 @@ public class AuditProecess implements Serializable {
 
 		private Long srcBillId;
 
+		private String url;
+
+		private String processType;
+
 
 }

+ 4 - 0
blade-service-api/blade-check-api/src/main/java/org/springblade/check/vo/AuditOrderVO.java

@@ -6,6 +6,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.check.entity.AuditProecess;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 @Data
@@ -21,4 +22,7 @@ public class AuditOrderVO extends AuditProecess
 
 	 @ApiModelProperty(value = "订单日期")
  	 private Date orderDate;
+
+	@ApiModelProperty(value = "订单日期")
+	private BigDecimal amount;
 }

+ 29 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/IMessageClient.java

@@ -0,0 +1,29 @@
+package org.springblade.client.feign;
+
+import org.springblade.client.entity.Message;
+import org.springblade.client.entity.StorageDesc;
+import org.springblade.common.constant.LauncherConstant;
+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.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+import java.util.Map;
+
+@FeignClient(
+	value = LauncherConstant.APPLICATION_CLIENT_NAME
+)
+/**
+ * 仓库信息对外访问API
+ */
+public interface IMessageClient {
+
+
+    @PostMapping("message/save")
+	R save(@RequestBody Message message);
+
+
+}

+ 3 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/Order.java

@@ -678,4 +678,7 @@ public class Order implements Serializable {
 	@ApiModelProperty(value = "特价占比")
 	private BigDecimal specialOfferOf;
 
+	@ApiModelProperty(value = "外币-已收/已付账款")
+	private BigDecimal foreignSettlmentAmount;
+
 }

+ 3 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/OrderFees.java

@@ -175,5 +175,8 @@ public class OrderFees implements Serializable {
 	//@TableField(exist = false)
 	private String corpName;
 
+	@ApiModelProperty(value = "1.应收 2.应付")
+	private int feesType;
+
 
 }

+ 30 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/feign/IOrderFeesClient.java

@@ -0,0 +1,30 @@
+package org.springblade.purchase.sales.feign;
+
+import org.springblade.common.constant.LauncherConstant;
+import org.springblade.core.tool.api.R;
+import org.springblade.purchase.sales.entity.Order;
+import org.springblade.purchase.sales.entity.OrderFees;
+import org.springblade.purchase.sales.entity.OrderItems;
+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.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import javax.validation.Valid;
+import java.math.BigDecimal;
+
+@FeignClient(
+	value = LauncherConstant.APPLICATION_PURCHASE_SALES_NAME
+)
+public interface IOrderFeesClient {
+
+
+
+	@GetMapping("/orderfees/detail")
+	R<OrderFees> detail(OrderFees orderFees);
+
+	@PostMapping("/orderfees/submit")
+	R submit(@RequestBody OrderFees orderFees);
+
+}

+ 8 - 0
blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/entity/Acc.java

@@ -287,4 +287,12 @@ public class Acc implements Serializable {
 	@TableField(exist = false)
 	private String createEndDate;
 
+	@ApiModelProperty(value = "采购or销售 费用明细id")
+	@TableField("Src_fees_id")
+	private Long srcFeesId;
+
+	@ApiModelProperty(value = "类型: 1.采购or销售主表货款申请 2. 采购or销售-费用明细申请")
+	@TableField("Src_type")
+	private int srcType;
+
 }

+ 8 - 0
blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/entity/Items.java

@@ -207,4 +207,12 @@ public class Items implements Serializable {
 	@ApiModelProperty(value = "本次金额")
 	private BigDecimal thisAmount;
 
+	@ApiModelProperty(value = "采购or销售 费用明细id")
+	@TableField("Src_fees_id")
+	private Long srcFeesId;
+
+	@ApiModelProperty(value = "类型: 1.采购or销售主表货款申请 2. 采购or销售-费用明细申请")
+	@TableField("Src_type")
+	private int srcType;
+
 }

+ 3 - 1
blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/feign/IFinanceClient.java

@@ -2,6 +2,7 @@ package org.springblade.finance.feign;
 
 import io.swagger.annotations.ApiParam;
 import org.springblade.core.tool.api.R;
+import org.springblade.finance.entity.Settlement;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -27,5 +28,6 @@ public interface IFinanceClient
     @GetMapping("/settlement/getFinanceAcc")
 	R getFinanceAcc(@RequestParam("accSysNo")String accSysNo);
 
-
+	@GetMapping("/settlement/detail")
+	R<Settlement> detail(Settlement settlement);
 }

+ 3 - 0
blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/Order.java

@@ -599,4 +599,7 @@ public class Order extends OrderBase {
 	@ApiModelProperty(value = "最迟付款日期")
 	private Date latestDate;
 
+	@ApiModelProperty(value = "外币-已收/已付账款")
+	private BigDecimal foreignSettlmentAmount;
+
 }

+ 2 - 0
blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/OrderFees.java

@@ -161,5 +161,7 @@ public class OrderFees extends OrderBase {
 	@TableField(exist = false)
 	private String corpName;
 
+	@ApiModelProperty(value = "1.应收 2.应付")
+	private int feesType;
 
 }

+ 20 - 1
blade-service/blade-check/src/main/java/org/springblade/check/controller/AuditProecessController.java

@@ -19,6 +19,7 @@ package org.springblade.check.controller;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.BeanUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import org.springblade.check.dto.AuditProecessDTO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -35,6 +36,8 @@ 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.BeanUtil;
+import org.springblade.finance.entity.Settlement;
+import org.springblade.finance.feign.IFinanceClient;
 import org.springblade.purchase.sales.entity.Order;
 import org.springblade.purchase.sales.feign.IOrderDescClient;
 import org.springblade.system.user.feign.IUserClient;
@@ -42,6 +45,7 @@ import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -64,6 +68,8 @@ public class AuditProecessController extends BladeController {
 
 	private final ICorpsDescClient corpsDescClient;
 
+	private final IFinanceClient financeClient;
+
 	/**
 	 * 分页 审批流记录
 	 */
@@ -73,7 +79,7 @@ public class AuditProecessController extends BladeController {
 	public R list(AuditProecess auditProecess, Query query) {
 		LambdaQueryWrapper<AuditProecess> lambdaQueryWrapper=new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.like(AuditProecess::getAuditUserId, String.valueOf(AuthUtil.getUserId()));
-		lambdaQueryWrapper.eq(AuditProecess::getAuditStatus, "S");
+		lambdaQueryWrapper.eq(StringUtils.isNotBlank(auditProecess.getAuditStatus()),AuditProecess::getAuditStatus, auditProecess.getAuditStatus());
 		IPage pages = auditProecessService.page(Condition.getPage(query), lambdaQueryWrapper);
 		List<AuditProecess> auditProecessList = pages.getRecords();
 		if(CollectionUtils.isNotEmpty(auditProecessList))
@@ -82,6 +88,7 @@ public class AuditProecessController extends BladeController {
 			auditProecessList.forEach(e->{
 				AuditOrderVO auditOrderVO=new AuditOrderVO();
 				BeanUtil.copyProperties(e,auditOrderVO);
+				//采购销售表相关数据
 				if(e.getBillId()!=null)
 				{
 					Order order = orderDescClient.getById(e.getBillId());
@@ -96,6 +103,18 @@ public class AuditProecessController extends BladeController {
 
 					}
 				}
+				//财务明细表相关数据
+				if(e.getSrcBillId()!=null)
+				{
+					Settlement settlement=new Settlement();
+					settlement.setId(e.getSrcBillId());
+					R<Settlement> detail = financeClient.detail(settlement);
+					if(detail.isSuccess())
+					{
+						BigDecimal amount = detail.getData().getAmount();
+						auditOrderVO.setAmount(amount);
+					}
+				}
 				auditOrderVOS.add(auditOrderVO);
 
 			});

+ 2 - 0
blade-service/blade-check/src/main/java/org/springblade/check/entity/AuditProecess.java

@@ -136,5 +136,7 @@ public class AuditProecess implements Serializable {
 	    private Integer operate;
 
 		private Long srcBillId;
+	    @ApiModelProperty(value = "审批类型")
+		private String processType;
 
 }

+ 52 - 3
blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java

@@ -17,6 +17,9 @@
 package org.springblade.check.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springblade.client.entity.Message;
+import org.springblade.client.feign.IMessageClient;
+import org.springblade.core.tool.api.R;
 import org.springblade.finance.feign.IFinanceClient;
 import lombok.AllArgsConstructor;
 import org.springblade.check.dto.AuditProecessDTO;
@@ -52,6 +55,8 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 
     private IFinanceClient financeClient;
 
+    private IMessageClient messageClient;
+
 	@Override
 	public IPage<AuditProecessVO> selectAuditProecessPage(IPage<AuditProecessVO> page, AuditProecessVO auditProecess) {
 		return page.setRecords(baseMapper.selectAuditProecessPage(page, auditProecess));
@@ -112,6 +117,17 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 	@GlobalTransactional
 	public void operationFinanceProcess(AuditProecess auditProecess)
 	{
+		//信息
+		Message message=new Message();
+		message.setUserName(AuthUtil.getUserName());
+		message.setUserId(AuthUtil.getUserId());
+		message.setToUserId(auditProecess.getSendUserId());
+		message.setToUserName(auditProecess.getSendName());
+		message.setMessageType(1);
+		message.setTenantId(AuthUtil.getTenantId());
+		message.setCreateUser(AuthUtil.getUserId());
+		message.setCreateTime(new Date());
+
 		//用户操作 1.通过  2.驳回
 		Integer operate = auditProecess.getOperate();
 		//查看当前审批是否为最后一级
@@ -149,7 +165,18 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 			{
 				auditProecess.setAuditStatus("B");
               //todo 调用feign取消
-				financeClient.passCancel(auditProecess.getSrcBillId());
+				R r = financeClient.passCancel(auditProecess.getSrcBillId());
+				if(!r.isSuccess())
+				{
+					throw new SecurityException("修改财务数据失败");
+				}
+
+				message.setMessageBody("您的请核未通过,请查看原因");
+				R save = messageClient.save(message);
+				if(!save.isSuccess())
+				{
+					throw new SecurityException("发送消息失败");
+				}
 			}
 
 		}
@@ -161,14 +188,36 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 			{
 				//todo 调用feign直接通过
 				auditProecess.setAuditStatus("A");
-				financeClient.passCheck(auditProecess.getSrcBillId());
+				R r = financeClient.passCheck(auditProecess.getSrcBillId());
+				if(!r.isSuccess())
+				{
+					throw new SecurityException("修改财务数据失败");
+				}
+
+
+				message.setMessageBody("您的请核已通过,请继续操作");
+				R save = messageClient.save(message);
+				if(!save.isSuccess())
+				{
+					throw new SecurityException("发送消息失败");
+				}
 			}
 			//不通过
 			else if(operate==2)
 			{
 				//todo 调用feign取消
 				auditProecess.setAuditStatus("B");
-				financeClient.passCancel(auditProecess.getSrcBillId());
+				R r = financeClient.passCancel(auditProecess.getSrcBillId());
+				if(!r.isSuccess())
+				{
+					throw new SecurityException("修改财务数据失败");
+				}
+				message.setMessageBody("您的请核未通过,请查看原因");
+				R save = messageClient.save(message);
+				if(!save.isSuccess())
+				{
+					throw new SecurityException("发送消息失败");
+				}
 			}
 		}
 		else

+ 1 - 1
blade-service/blade-client/src/main/java/org/springblade/client/goods/controller/GoodsDescController.java

@@ -171,7 +171,7 @@ public class GoodsDescController extends BladeController {
 	public R<?> modify(@RequestBody GoodsDesc goodsDesc)
 	{
 		goodsDescService.modify(goodsDesc);
-		return R.success("操作成功");
+		return R.data(goodsDesc);
 	}
 
 	@DeleteMapping("delete")

+ 94 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/scheduled/OrderCreditDateCheckTimer.java

@@ -0,0 +1,94 @@
+package org.springblade.purchase.sales.scheduled;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.client.entity.Message;
+import org.springblade.client.feign.IMessageClient;
+import org.springblade.core.tool.api.R;
+import org.springblade.purchase.sales.entity.Order;
+import org.springblade.purchase.sales.service.IOrderService;
+import org.springblade.purchase.sales.tools.DateUtils;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 定时任务-采购订单-信用到期时间提前2天提醒
+ * */
+@Component
+@Configuration
+@EnableScheduling
+@Slf4j
+@AllArgsConstructor
+public class OrderCreditDateCheckTimer
+{
+    private final IOrderService orderService;
+
+    private final IMessageClient messageClient;
+
+    //每日零点开始检查
+	@Scheduled(cron="0 0 0 * * ?")
+	public void creditDateCheck() throws ParseException {
+		log.info("=================信用到期时间定时任务开启================");
+		SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
+		Date date=new Date();
+		String todayStr = simpleDateFormat.format(date);
+		//过滤只要年月日的日期
+		Calendar todayCalendar = Calendar.getInstance();
+		todayCalendar.setTime(simpleDateFormat.parse(todayStr));
+		//查找所有订单
+		LambdaQueryWrapper<Order> orderLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		orderLambdaQueryWrapper
+			.eq(Order::getIsDeleted,0)
+			.isNotNull(Order::getCreditDate);
+		List<Order> list = orderService.list(orderLambdaQueryWrapper);
+		if(CollectionUtils.isNotEmpty(list))
+		{
+			log.info("=================信用到期开始检查================");
+			//开始循环检查
+			list.forEach(e->{
+				Calendar targetCalendar = Calendar.getInstance();
+				String creditDateStr = simpleDateFormat.format(e.getCreditDate());
+				try
+				{
+					targetCalendar.setTime(simpleDateFormat.parse(creditDateStr));
+					//开始比较
+					int day = DateUtils.dateDiff('d', targetCalendar, todayCalendar);
+					//只关注还有2天到期的, 之前的不在处理
+					if(day ==2 )
+					{
+
+						Message message=new Message();
+						message.setCreateTime(new Date());
+						message.setToUserId(e.getCreateUser());
+						message.setToUserName(e.getCreateUserName());
+						message.setMessageType(2);
+						message.setMessageBody("订单号为:"+e.getOrderNo()+"的单据,信用证还有2天时间到期, 请及时处理");
+						R save = messageClient.save(message);
+						if(save.isSuccess())
+						{
+							log.info("订单号为:"+e.getOrderNo()+"=========>已发送通知");
+						}
+					}
+
+				}
+				catch (ParseException parseException)
+				{
+					log.info("===============解析时间错误==============");
+				}
+
+			});
+		}
+	}
+}

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

@@ -100,15 +100,19 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	@Transactional
 	public R saveOrderMessage(Order order) {
 		//校验单号重复
-		LambdaQueryWrapper<Order> orderLambdaQueryWrapper=new LambdaQueryWrapper<>();
-		orderLambdaQueryWrapper
-			.eq(Order::getOrderNo,order.getOrderNo())
-			.eq(Order::getTenantId, AuthUtil.getTenantId());
-		Integer count = baseMapper.selectCount(orderLambdaQueryWrapper);
-		if(count!=null&&count>0)
+		if(order.getId()==null)
 		{
-			throw new SecurityException("合同号:"+order.getOrderNo()+"已存在,禁止重复添加");
+			LambdaQueryWrapper<Order> orderLambdaQueryWrapper=new LambdaQueryWrapper<>();
+			orderLambdaQueryWrapper
+				.eq(Order::getOrderNo,order.getOrderNo())
+				.eq(Order::getTenantId, AuthUtil.getTenantId());
+			Integer count = baseMapper.selectCount(orderLambdaQueryWrapper);
+			if(count!=null&&count>0)
+			{
+				throw new SecurityException("合同号:"+order.getOrderNo()+"已存在,禁止重复添加");
+			}
 		}
+
 		Date date = new Date();//订单时间
 		//保存订单主表信息
 		if (order.getId() == null){

+ 91 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/tools/DateUtils.java

@@ -0,0 +1,91 @@
+package org.springblade.purchase.sales.tools;
+
+import java.sql.Timestamp;
+import java.util.Calendar;
+import java.util.Date;
+
+public class DateUtils
+{
+
+	// 以毫秒表示的时间
+	private static final long DAY_IN_MILLIS = 24 * 3600 * 1000;
+	private static final long HOUR_IN_MILLIS = 3600 * 1000;
+	private static final long MINUTE_IN_MILLIS = 60 * 1000;
+	private static final long SECOND_IN_MILLIS = 1000;
+
+	/**
+	 * 计算两个时间之间的差值,根据标志的不同而不同
+	 *
+	 * @param flag   计算标志,表示按照年/月/日/时/分/秒等计算
+	 * @param calSrc 减数
+	 * @param calDes 被减数
+	 * @return 两个日期之间的差值
+	 */
+	public static int dateDiff(char flag, Calendar calSrc, Calendar calDes) {
+
+		long millisDiff = getMillis(calSrc) - getMillis(calDes);
+
+		if (flag == 'y') {
+			return (calSrc.get(Calendar.YEAR) - calDes.get(Calendar.YEAR));
+		}
+
+		if (flag == 'd') {
+			return (int) (millisDiff / DAY_IN_MILLIS);
+		}
+
+		if (flag == 'h') {
+			return (int) (millisDiff / HOUR_IN_MILLIS);
+		}
+
+		if (flag == 'm') {
+			return (int) (millisDiff / MINUTE_IN_MILLIS);
+		}
+
+		if (flag == 's') {
+			return (int) (millisDiff / SECOND_IN_MILLIS);
+		}
+
+		return 0;
+	}
+
+	/**
+	 * 系统时间的毫秒数
+	 *
+	 * @return 系统时间的毫秒数
+	 */
+	public static long getMillis() {
+		return System.currentTimeMillis();
+	}
+
+
+	/**
+	 * 指定日历的毫秒数
+	 *
+	 * @param cal 指定日历
+	 * @return 指定日历的毫秒数
+	 */
+	public static long getMillis(Calendar cal) {
+		// --------------------return cal.getTimeInMillis();
+		return cal.getTime().getTime();
+	}
+
+	/**
+	 * 指定日期的毫秒数
+	 *
+	 * @param date 指定日期
+	 * @return 指定日期的毫秒数
+	 */
+	public static long getMillis(Date date) {
+		return date.getTime();
+	}
+
+	/**
+	 * 指定时间戳的毫秒数
+	 *
+	 * @param ts 指定时间戳
+	 * @return 指定时间戳的毫秒数
+	 */
+	public static long getMillis(Timestamp ts) {
+		return ts.getTime();
+	}
+}

+ 97 - 28
blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java

@@ -42,7 +42,9 @@ import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.ISerialClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.purchase.sales.entity.Order;
+import org.springblade.purchase.sales.entity.OrderFees;
 import org.springblade.purchase.sales.feign.IOrderDescClient;
+import org.springblade.purchase.sales.feign.IOrderFeesClient;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -76,6 +78,8 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 
     private ICheckClient iCheckClient;
 
+    private final IOrderFeesClient orderFeesClient;
+
 
 
 	@Override
@@ -110,7 +114,7 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 				e.setUpdateUser(AuthUtil.getUserId());
 				e.setUpdateUserName(AuthUtil.getUser().getRoleName());
 				itemsMapper.updateById(e);
-				cancelPayAcc(settlementDTO,e);
+				cancelPayAcc(settlementDTO,e,e.getSrcType());
 			});
 		}
 		model.setItemsList(itemsList);
@@ -154,7 +158,7 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 					e.setCreateUser(AuthUtil.getUserId());
 					e.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
 					itemsMapper.insert(e);
-					payAcc(settlementDTO,e);
+					payAcc(settlementDTO,e,e.getSrcType());
 				});
 			}
 		}
@@ -181,7 +185,7 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 						e.setCreateUser(AuthUtil.getUserId());
 						e.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
 						itemsMapper.insert(e);
-						payAcc(settlementDTO,e);
+						payAcc(settlementDTO,e,e.getSrcType());
 					}
 					else
 					{
@@ -190,7 +194,7 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 						e.setUpdateUser(AuthUtil.getUserId());
 						e.setUpdateUserName(AuthUtil.getUser().getRoleName());
 						itemsMapper.updateById(e);
-						payAcc(settlementDTO,e);
+						payAcc(settlementDTO,e,e.getSrcType());
 					}
 
 				});
@@ -225,7 +229,7 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 
 	}
 	//撤销
-	public void  cancelPayAcc(SettlementDTO settlementDTO,Items items)
+	public void  cancelPayAcc(SettlementDTO settlementDTO,Items items,int type)
 	{
 		Long accId = items.getAccId();
 		if(accId==null)
@@ -251,29 +255,58 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 		}
 		accMapper.updateById(acc);
 		//修改原业务表数据
-		Long srcParentId = acc.getSrcParentId();
-		if(srcParentId==null)
-		{
-			throw new SecurityException("撤销账单失败,未获取到原业务信息");
-		}
-		Order client = orderDescClient.getById(srcParentId);
-		if(client==null)
+		if(type==1)
 		{
-			throw new SecurityException("撤销账单失败,未获取到原业务信息");
+			Long srcParentId = acc.getSrcParentId();
+			if(srcParentId==null)
+			{
+				throw new SecurityException("撤销账单失败,未获取到原业务信息");
+			}
+			Order client = orderDescClient.getById(srcParentId);
+			if(client==null)
+			{
+				throw new SecurityException("撤销账单失败,未获取到原业务信息");
+			}
+			//回退原业务表数据
+			if(client.getSettlmentAmount() == null)
+			{
+				throw new SecurityException("撤销账单失败,原业务表已收金额为空");
+			}
+			client.setSettlmentAmount(client.getSettlmentAmount().subtract(items.getThisAmount()));
+			orderDescClient.updateOrder(client);
 		}
-		//回退原业务表数据
-		if(client.getSettlmentAmount() == null)
+		//修改费用明细
+		else if(type==2)
 		{
-			throw new SecurityException("撤销账单失败,原业务表已收金额为空");
+			Long srcFeesId = acc.getSrcFeesId();
+			if(srcFeesId==null)
+			{
+				throw new SecurityException("撤销账单失败,未获取到原业务信息");
+			}
+			OrderFees orderFees=new OrderFees();
+			orderFees.setId(srcFeesId);
+			orderFees.setTenantId(AuthUtil.getTenantId());
+			R<OrderFees> detail = orderFeesClient.detail(orderFees);
+			if(detail==null)
+			{
+				throw new SecurityException("修改原单据失败");
+			}
+			OrderFees fees = detail.getData();
+			//回退原业务表数据
+			if(fees.getSettlmentAmount() == null)
+			{
+				throw new SecurityException("撤销账单失败,原业务表已收金额为空");
+			}
+			fees.setSettlmentAmount(fees.getSettlmentAmount().subtract(items.getThisAmount()));
+			orderFeesClient.submit(fees);
 		}
-		client.setSettlmentAmount(client.getSettlmentAmount().subtract(items.getThisAmount()));
-		orderDescClient.updateOrder(client);
+
 	}
 
 
 
     //修改财务账单和订单表已收金额
-	public void  payAcc(SettlementDTO settlementDTO,Items items)
+	public void  payAcc(SettlementDTO settlementDTO,Items items,int type)
 	{
 		Long accId = items.getAccId();
 		if(accId==null)
@@ -295,18 +328,46 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 		}
 		accMapper.updateById(acc);
 		//修改原业务表数据
-		Long srcParentId = acc.getSrcParentId();
-		if(srcParentId==null)
+		if(type==1)
+		{   Long srcParentId = acc.getSrcParentId();
+			if(srcParentId==null)
+			{
+				throw new SecurityException("操作失败,未获取到原业务信息");
+			}
+			Order client = orderDescClient.getById(srcParentId);
+			if(client==null)
+			{
+				throw new SecurityException("修改原单据失败");
+			}
+			client.setSettlmentAmount(client.getSettlmentAmount()!=null?client.getSettlmentAmount().add(items.getThisAmount()):new BigDecimal("0").add(items.getThisAmount()));
+			orderDescClient.updateOrder(client);
+
+		}
+		//修改费用明细数据
+		else if(type==2)
 		{
-			throw new SecurityException("操作失败,未获取到原业务信息");
+			Long srcFeesId = acc.getSrcFeesId();
+			if(srcFeesId==null)
+			{
+				throw new SecurityException("操作失败,未获取到原业务信息");
+			}
+			OrderFees orderFees=new OrderFees();
+			orderFees.setId(srcFeesId);
+			orderFees.setTenantId(AuthUtil.getTenantId());
+			R<OrderFees> detail = orderFeesClient.detail(orderFees);
+			if(detail==null)
+			{
+				throw new SecurityException("修改原单据失败");
+			}
+			OrderFees fees = detail.getData();
+			fees.setSettlmentAmount(fees.getSettlmentAmount()!=null?fees.getSettlmentAmount().add(items.getThisAmount()):new BigDecimal("0").add(items.getThisAmount()));
+			orderFeesClient.submit(fees);
 		}
-		Order client = orderDescClient.getById(srcParentId);
-        if(client==null)
-        {
-        	throw new SecurityException("修改原单据失败");
+		else
+		{
+			throw new SecurityException("操作失败,财务类型为空无法结算");
 		}
-		client.setSettlmentAmount(client.getSettlmentAmount()!=null?client.getSettlmentAmount().add(items.getThisAmount()):new BigDecimal("0").add(items.getThisAmount()));
-		orderDescClient.updateOrder(client);
+
 		//验证结算总金额是否超限
 
 		/*BigDecimal orderAmount = client.getSettlmentAmount();
@@ -391,6 +452,8 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 	public void check(Settlement settlement)
 	{
 		Settlement selectOne = baseMapper.selectById(settlement.getId());
+		List<Items> items = itemsMapper.selectList(new LambdaQueryWrapper<Items>().eq(Items::getPid, settlement.getId()));
+
 		//判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
 		  AuditPathsActs pathsActs = iCheckClient.getActsByActId(1, "check_status");
 		  //没开启审批流直接走 通过流程
@@ -407,6 +470,10 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 			  List<AuditPathsLevels> auditPathsLevels = iCheckClient.listLevelsByActId(1, "check_status");
 
 			  AuditProecessDTO auditProecessDTO=new AuditProecessDTO();
+			  //追加跳转路由url
+			  auditProecessDTO.setUrl("to_finance_page");
+			  //增加审批类型
+			  auditProecessDTO.setProcessType("付费审批");
 			  auditProecessDTO.setPathsLevelsList(auditPathsLevels);
 			  auditProecessDTO.setActId(1);
 			  auditProecessDTO.setSrcBillId(selectOne.getId());
@@ -550,6 +617,8 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 				acc.setStatus(0);
 				acc.setCreateUser(AuthUtil.getUserId());
 				acc.setCostType(e.getCostType());
+				acc.setSrcFeesId(e.getSrcFeesId());
+				acc.setSrcType(e.getSrcType());
 				accMapper.insert(acc);
 
 				//绑定accId,从申请表传递给结算表,后续结算时操作账单表的结算金额

+ 10 - 8
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/component/impl/DefaultOrderSaveImpl.java

@@ -80,16 +80,18 @@ public class DefaultOrderSaveImpl implements IOrderSave {
 	 */
 	private Order saveOrder(OrderSubmitDto order) {
         //校验单号重复
-		LambdaQueryWrapper<Order> orderLambdaQueryWrapper=new LambdaQueryWrapper<>();
-		orderLambdaQueryWrapper
-			.eq(Order::getOrderNo,order.getOrderNo())
-			.eq(Order::getTenantId,AuthUtil.getTenantId());
-		Integer count = orderService.selectCount(orderLambdaQueryWrapper);
-		if(count!=null&&count>0)
+		if(order.getId()==null)
 		{
-			throw new SecurityException("合同号:"+order.getOrderNo()+"已存在,禁止重复添加");
+			LambdaQueryWrapper<Order> orderLambdaQueryWrapper=new LambdaQueryWrapper<>();
+			orderLambdaQueryWrapper
+				.eq(Order::getOrderNo,order.getOrderNo())
+				.eq(Order::getTenantId,AuthUtil.getTenantId());
+			Integer count = orderService.selectCount(orderLambdaQueryWrapper);
+			if(count!=null&&count>0)
+			{
+				throw new SecurityException("合同号:"+order.getOrderNo()+"已存在,禁止重复添加");
+			}
 		}
-
 		order.setBillType(order.getBillType());
 		order.setTradeType(order.getTradeType());
 		if (Func.isBlank(order.getSysNo())) {