Browse Source

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

# Conflicts:
#	blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/feign/IFinanceClient.java
lazhaoqian 4 years ago
parent
commit
3b807e03ce
16 changed files with 321 additions and 19 deletions
  1. 20 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/UnReadDTO.java
  2. 4 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/FeesType.java
  3. 5 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/Message.java
  4. 3 0
      blade-service-api/blade-project-api/src/main/java/org/springblade/project/entity/ServiceProjectItem.java
  5. 22 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/vo/OrderStatisticAnalysisVO.java
  6. 6 0
      blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/feign/IFinanceClient.java
  7. 15 1
      blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java
  8. 8 1
      blade-service/blade-client/src/main/java/org/springblade/client/message/controller/MessageController.java
  9. 20 9
      blade-service/blade-client/src/main/java/org/springblade/client/message/handler/WebSocketHandler.java
  10. 2 1
      blade-service/blade-client/src/main/java/org/springblade/client/message/service/IMessageService.java
  11. 10 4
      blade-service/blade-client/src/main/java/org/springblade/client/message/service/impl/MessageServiceImpl.java
  12. 1 1
      blade-service/blade-project/src/main/java/org/springblade/project/controller/ProjectController.java
  13. 6 0
      blade-service/blade-purchase-sales/pom.xml
  14. 180 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderController.java
  15. 2 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.xml
  16. 17 0
      blade-service/trade-finance/src/main/java/org/springblade/finance/controller/AccController.java

+ 20 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/UnReadDTO.java

@@ -0,0 +1,20 @@
+package org.springblade.client.dto;
+
+import lombok.Data;
+
+@Data
+public class UnReadDTO
+{
+	private Boolean unRead;
+
+	private Integer unReadNum;
+
+	@Override
+	public String toString()
+	{
+		return "{" +
+			"\"unRead\":" + unRead +
+			",\"unReadNum\":" + unReadNum +
+			'}';
+	}
+}

+ 4 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/FeesType.java

@@ -19,9 +19,11 @@ package org.springblade.client.entity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -93,6 +95,8 @@ public class FeesType implements Serializable {
 	 * 创建时间
 	 */
 	@ApiModelProperty(value = "创建时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
 	private Date createTime;
 	/**
 	 * 创建时间

+ 5 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/Message.java

@@ -105,5 +105,10 @@ public class Message implements Serializable {
 		@ApiModelProperty(value = "租户id")
 		private String tenantId;
 
+		private String url;
+
+		private String parameter;
+	;
+
 
 }

+ 3 - 0
blade-service-api/blade-project-api/src/main/java/org/springblade/project/entity/ServiceProjectItem.java

@@ -136,5 +136,8 @@ public class ServiceProjectItem extends TenantEntity implements Serializable {
     @TableField(exist = false)
 	private BigDecimal grossIncome;
 
+	@TableField(exist = false)
+	private Long cornId;
+
 
 }

+ 22 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/vo/OrderStatisticAnalysisVO.java

@@ -40,5 +40,27 @@ public class OrderStatisticAnalysisVO
    private Long createUser;
    //时间
    private Date createTime;
+   //发票抬头
+   private String vbrk;
+   //利润
+   private BigDecimal profit;
+   	//物流费用
+   	private BigDecimal deliverMoney;
+	//开票金额
+	private BigDecimal InvoiceAmount;
+	//成本金额
+	private BigDecimal costAmount;
+	//成本单价
+	private BigDecimal unitPrice;
+	//关税
+	private BigDecimal customDutyMoney;
+	//配额
+	private BigDecimal quotaMoney;
+	//增值税
+	private BigDecimal gstMoney;
+	//货款
+	private BigDecimal itemMoney;
+
+
 
 }

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

@@ -2,13 +2,16 @@ package org.springblade.finance.feign;
 
 import io.swagger.annotations.ApiParam;
 import org.springblade.core.tool.api.R;
+import org.springblade.finance.entity.Acc;
 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;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
 
+import javax.validation.Valid;
 import java.math.BigDecimal;
 import java.util.List;
 
@@ -31,4 +34,7 @@ public interface IFinanceClient
 
 	@GetMapping("/settlement/detail")
 	R<Settlement> detail(Settlement settlement);
+
+	@PostMapping("/acc/getAccListByCondition")
+	R<List<Acc>> getAccListByCondition( @RequestBody Acc acc);
 }

+ 15 - 1
blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java

@@ -147,7 +147,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 		}
 		//信息
 		Message message=new Message();
-		message.setUserName(AuthUtil.getUserName());
+ 		message.setUserName(AuthUtil.getUserName());
 		message.setUserId(AuthUtil.getUserId());
 		message.setToUserId(auditProecess.getSendUserId());
 		message.setToUserName(auditProecess.getSendName());
@@ -175,11 +175,17 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				LambdaQueryWrapper<AuditProecess> auditProecessLambdaQueryWrapper=new LambdaQueryWrapper<>();
 				auditProecessLambdaQueryWrapper
 					.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)
 				{
@@ -187,6 +193,14 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				}
 				proecess.setAuditStatus("S");
 				baseMapper.updateById(proecess);
+				//消息通知下一级
+				message.setToUserId(proecess.getSendUserId());
+				message.setToUserName(proecess.getSendName());
+				R save = messageClient.save(message);
+				if(!save.isSuccess())
+				{
+					throw new SecurityException("发送消息失败");
+				}
 			}
             //不通过
 			else if(operate==2)

+ 8 - 1
blade-service/blade-client/src/main/java/org/springblade/client/message/controller/MessageController.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.client.message.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -29,7 +30,9 @@ import org.springblade.client.message.service.IMessageService;
 import org.springblade.client.vo.MessageVO;
 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.AesUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
 import org.springblade.core.boot.ctrl.BladeController;
@@ -66,7 +69,11 @@ public class MessageController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入message")
 	public R<IPage<Message>> list(Message message, Query query) {
-		IPage<Message> pages = messageService.page(Condition.getPage(query), Condition.getQueryWrapper(message));
+		LambdaQueryWrapper<Message> messageLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		messageLambdaQueryWrapper
+			.like(Message::getToUserId, AuthUtil.getUserId())
+			.eq(Message::getTenantId,AuthUtil.getTenantId());
+		IPage<Message> pages = messageService.page(Condition.getPage(query), messageLambdaQueryWrapper);
 		return R.data(pages);
 	}
 

+ 20 - 9
blade-service/blade-client/src/main/java/org/springblade/client/message/handler/WebSocketHandler.java

@@ -2,6 +2,7 @@ package org.springblade.client.message.handler;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.reflect.FieldUtils;
+import org.springblade.client.dto.UnReadDTO;
 import org.springblade.client.message.service.impl.MessageServiceImpl;
 import org.springblade.core.tool.utils.SpringUtil;
 import org.springblade.system.feign.IApiScopeClient;
@@ -47,13 +48,23 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 	 * webSocket连接创建后调用
 	 */
 	@Override
-	public void afterConnectionEstablished(WebSocketSession session) {
+	public void afterConnectionEstablished(WebSocketSession session)
+	{
+
 		// 获取参数
 		String userId = String.valueOf(session.getAttributes().get("user"));
+
+		//当前用户已开启socket的话, 就不需要再次开启了
+		if(userMap.containsKey(userId))
+		{
+			log.info("【当前用户userId】:==>"+userId+",已经开启socket通道,不再开辟新通道");
+			return;
+		}
 		String sessionId = getSessionId(session);
 		userMap.put(userId, getSessionId(session));
-		sessionMap.put(sessionId, session);
-		log.info("【当前socket链接人数】:==>"+sessionMap.size());
+		sessionMap.put(userId, session);
+		log.info("【当前socket在线人数】:==>"+userMap.size());
+		log.info("【当前socket连接数】:==>"+sessionMap.size());
 		send(userId);
 	}
 
@@ -97,12 +108,12 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 	/**
 	 * 后端发送消息
 	 */
-	public void sendMessage(String user, String message) {
+	public void sendMessage(String user, UnReadDTO unReadDTO) {
 		String sessionId = userMap.get(user);
-		WebSocketSession session = sessionMap.get(sessionId);
+		WebSocketSession session = sessionMap.get(user);
 		try {
-			log.info("【websocket消息】 单点消息:"+message);
-			session.sendMessage(new TextMessage(message));
+			log.info("【websocket消息】 单点消息:"+unReadDTO.toString());
+			session.sendMessage(new TextMessage(unReadDTO.toString()));
 		} catch (IOException e) {
 			e.printStackTrace();
 		}
@@ -115,8 +126,8 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 			while(true)
 			{
 				MessageServiceImpl messageService = SpringUtil.getBean(MessageServiceImpl.class);
-				Map<String, Object> userMessage = messageService.getUserMessage(Long.valueOf(userId));
-				sendMessage(userId,userMessage.toString());
+				UnReadDTO unReadDTO = messageService.getUserMessage(Long.valueOf(userId));
+				sendMessage(userId,unReadDTO);
 				Thread.sleep(60000);
 			}
 		}

+ 2 - 1
blade-service/blade-client/src/main/java/org/springblade/client/message/service/IMessageService.java

@@ -20,6 +20,7 @@ package org.springblade.client.message.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import lombok.AllArgsConstructor;
+import org.springblade.client.dto.UnReadDTO;
 import org.springblade.client.entity.Message;
 import org.springblade.client.vo.MessageVO;
 import org.springframework.stereotype.Service;
@@ -48,6 +49,6 @@ public interface IMessageService extends IService<Message> {
 	//通过用户角色推送
 	void pushByUserRole(String role,String Message,Integer MessageType);
 
-	Map<String,Object> getUserMessage(Long userId);
+	UnReadDTO getUserMessage(Long userId);
 
 }

+ 10 - 4
blade-service/blade-client/src/main/java/org/springblade/client/message/service/impl/MessageServiceImpl.java

@@ -19,6 +19,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
+import lombok.Data;
+import org.springblade.client.dto.UnReadDTO;
 import org.springblade.client.entity.Message;
 import org.springblade.client.message.mapper.MessageMapper;
 import org.springblade.client.message.service.IMessageService;
@@ -120,7 +122,7 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
 	}
 
 	@Override
-	public Map<String, Object> getUserMessage(Long userId)
+	public UnReadDTO getUserMessage(Long userId)
 	{
 		//消息列表
 	/*	LambdaQueryWrapper<Message> messageLambdaQueryWrapper=new LambdaQueryWrapper<>();
@@ -139,12 +141,16 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
 			.eq(Message::getIsRead,0);
 		Integer count = baseMapper.selectCount(readMessageLambdaQueryWrapper);
 		Map map=new HashMap();
-		map.put("unRead",count!=null&&count>0?true:false);
-		map.put("unReadNum",count!=null&&count>0?count:0);
+		UnReadDTO dto=new UnReadDTO();
+		dto.setUnRead(count!=null&&count>0?true:false);
+		dto.setUnReadNum(count!=null&&count>0?count:0);
+
 		/*map.put("list",records);*/
-     return map;
+     return dto;
 	}
 
 
 
+
+
 }

+ 1 - 1
blade-service/blade-project/src/main/java/org/springblade/project/controller/ProjectController.java

@@ -280,7 +280,7 @@ public class ProjectController {
 				  e.setStrStatus(str[e.getStatus()]);
 				  Long corpId = serviceProjectService.getOne(new LambdaQueryWrapper<ServiceProject>()
 					  .eq(ServiceProject::getId,e.getPId())).getCorpId();
-
+				  e.setCornId(corpId);
 				  R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(corpId);
 				  if(corpMessage.isSuccess())
 				  {

+ 6 - 0
blade-service/blade-purchase-sales/pom.xml

@@ -71,6 +71,12 @@
             <version>2.8.2.RELEASE</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>trade-finance-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
 </project>

+ 180 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderController.java

@@ -30,13 +30,17 @@ import lombok.AllArgsConstructor;
 import javax.validation.Valid;
 
 import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.entity.FeesDesc;
 import org.springblade.client.feign.ICorpsDescClient;
+import org.springblade.client.feign.IFeesDescClient;
 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.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.finance.entity.Acc;
+import org.springblade.finance.feign.IFinanceClient;
 import org.springblade.purchase.sales.entity.OrderFees;
 import org.springblade.purchase.sales.entity.OrderItems;
 import org.springblade.purchase.sales.service.*;
@@ -74,6 +78,8 @@ public class OrderController extends BladeController {
 	private final IOrderPartsService orderPartsService;
 	private final ICorpsDescClient corpsDescClient;//获取客户信息
 	private final IUserClient userClient;//获取用户信息
+	private final IFeesDescClient feesDescClient;
+	private final IFinanceClient iFinanceClient;
 
 	/**
 	 * 详情
@@ -349,11 +355,184 @@ public class OrderController extends BladeController {
 						e.setSaleCorpName(corpsDescClientCorpMessage.getData().getCname());
 					}
 				}
-
+				//采购主表id
 				Long orderId = e.getOrderId();
+				LambdaQueryWrapper<Order> orderLambdaQueryWrapper=new LambdaQueryWrapper<>();
+				orderLambdaQueryWrapper
+					.eq(Order::getId,orderId)
+					.eq(Order::getTenantId,AuthUtil.getTenantId())
+					.eq(Order::getIsDeleted,0);
+
+				Order service = orderService.getOne(orderLambdaQueryWrapper);
+
 
+				//调用-费用微服务-获取费用设置详情
+				R<FeesDesc> customDuty = feesDescClient.getFeesByName("关税");
+				Long customDutyId=null;
+                if(customDuty.isSuccess())
+                {
+					customDutyId=customDuty.getData().getId();
+				}
 
+				Long quotaId=null;
+				R<FeesDesc> quota = feesDescClient.getFeesByName("配额");
+				if(quota.isSuccess())
+				{
+					quotaId=quota.getData().getId();
+				}
 
+				Long gstId=null;
+				R<FeesDesc> GST = feesDescClient.getFeesByName("增值税");
+				if(GST.isSuccess())
+				{
+					gstId=GST.getData().getId();
+				}
+
+                Long deliverId=null;
+				R<FeesDesc> deliver = feesDescClient.getFeesByName("物流费");
+				if(deliver.isSuccess())
+				{
+					deliverId=deliver.getData().getId();
+				}
+
+				//获取关税账单明细
+				Acc customDutyAcc=new Acc();
+				customDutyAcc.setSrcType(2);
+				customDutyAcc.setSrcFeesId(customDutyId);
+				customDutyAcc.setSrcParentId(orderId);
+				R<List<Acc>> accListByCondition = iFinanceClient.getAccListByCondition(customDutyAcc);
+				//关税
+				BigDecimal customDutyMoney=BigDecimal.ZERO;
+				if(accListByCondition.isSuccess())
+				{
+					List<Acc> customDutyList = accListByCondition.getData();
+						//关税
+
+						if(CollectionUtils.isNotEmpty(customDutyList))
+						{
+							customDutyMoney=customDutyList.stream().reduce(BigDecimal.ZERO,(x,y) ->{ return x.add(y.getAmount().multiply(y.getExchangeRate())); },BigDecimal::add);
+						}
+						else
+						{
+							customDutyMoney=BigDecimal.ZERO;
+						}
+
+				}
+                e.setCustomDutyMoney(customDutyMoney);
+
+				//获取配额账单明细
+				Acc quotaAcc=new Acc();
+				quotaAcc.setSrcType(2);
+				quotaAcc.setSrcFeesId(quotaId);
+				quotaAcc.setSrcParentId(orderId);
+				R<List<Acc>> accListByCondition2 = iFinanceClient.getAccListByCondition(quotaAcc);
+				//配额
+				BigDecimal quotaMoney=BigDecimal.ZERO;
+				if(accListByCondition2.isSuccess())
+				{
+					List<Acc> quotaList = accListByCondition2.getData();
+						//配额
+						if(CollectionUtils.isNotEmpty(quotaList))
+						{
+							quotaMoney=quotaList.stream().reduce(BigDecimal.ZERO,(x,y) ->{ return x.add(y.getAmount().multiply(y.getExchangeRate())); },BigDecimal::add);
+						}
+						else
+						{
+							quotaMoney=BigDecimal.ZERO;
+						}
+
+				}
+                e.setQuotaMoney(quotaMoney);
+				//获取增值税账单明细
+				Acc gstAcc=new Acc();
+				gstAcc.setSrcType(2);
+				gstAcc.setSrcFeesId(gstId);
+				gstAcc.setSrcParentId(orderId);
+				R<List<Acc>> accListByCondition3 = iFinanceClient.getAccListByCondition(gstAcc);
+				//增值税
+				BigDecimal gstMoney=BigDecimal.ZERO;
+				if(accListByCondition3.isSuccess())
+				{
+					List<Acc> gstList = accListByCondition3.getData();
+
+						//增值税
+						if(CollectionUtils.isNotEmpty(gstList))
+						{
+							gstMoney=gstList.stream().reduce(BigDecimal.ZERO,(x,y) ->{ return x.add(y.getAmount().multiply(y.getExchangeRate())); },BigDecimal::add);
+						}
+						else
+						{
+							gstMoney=BigDecimal.ZERO;
+						}
+
+				}
+                e.setGstMoney(gstMoney);
+				//获取货款账单明细
+				Acc itemAcc=new Acc();
+				itemAcc.setSrcType(1);
+				itemAcc.setSrcFeesId(null);
+				itemAcc.setSrcParentId(orderId);
+				R<List<Acc>> accListByCondition4 = iFinanceClient.getAccListByCondition(itemAcc);
+				//货款
+				BigDecimal itemMoney=BigDecimal.ZERO;
+				if(accListByCondition4.isSuccess())
+				{
+					List<Acc> itemList = accListByCondition4.getData();
+					if(CollectionUtils.isNotEmpty(itemList))
+					{
+						//货款
+						itemMoney=itemList.stream().reduce(BigDecimal.ZERO,(x,y) ->{ return x.add(y.getAmount().multiply(y.getExchangeRate())); },BigDecimal::add);
+					}
+					else
+					{
+						itemMoney=BigDecimal.ZERO;
+					}
+				}
+				e.setItemMoney(itemMoney);
+				//销售主表信息
+				LambdaQueryWrapper<Order> saleOrderWrapper=new LambdaQueryWrapper<>();
+				saleOrderWrapper.eq(Order::getId,e.getOrderSaleId()).eq(Order::getTenantId,AuthUtil.getTenantId());
+				Order serviceOne = orderService.getOne(saleOrderWrapper);
+
+				//成本单价=(货款+关税+配额)/发票重量---精确小数点2位
+                BigDecimal unitPrice=((itemMoney.add(quotaMoney)).add(customDutyMoney)).divide(service.getInvoiceWeight(),2,BigDecimal.ROUND_DOWN);
+                e.setUnitPrice(unitPrice);
+				if(serviceOne.getExchangeRate()==null)
+				{
+                   throw new SecurityException("销售订单:"+serviceOne.getOrderNo()+",汇率未填,无法完成统计");
+				}
+				//开票金额= 销售订单明细总价*销售订单主表的汇率
+				BigDecimal InvoiceAmount=e.getAmount().multiply(serviceOne.getExchangeRate());
+				e.setInvoiceAmount(InvoiceAmount);
+				//成本金额=提货数量*成本价格
+				BigDecimal costAmount=e.getSaleBillWeight().multiply(unitPrice);
+				e.setCostAmount(costAmount);
+				//物流费用
+				Acc deliverAcc=new Acc();
+				deliverAcc.setSrcType(2);
+				deliverAcc.setSrcFeesId(deliverId);
+				deliverAcc.setSrcParentId(e.getOrderSaleId());
+				R<List<Acc>> accListByCondition5 = iFinanceClient.getAccListByCondition(gstAcc);
+				BigDecimal deliverMoney=BigDecimal.ZERO;
+				if(accListByCondition5.isSuccess())
+				{
+					List<Acc> deliverMoneyList = accListByCondition5.getData();
+					//关税
+
+					if(CollectionUtils.isNotEmpty(deliverMoneyList))
+					{
+						deliverMoney=deliverMoneyList.stream().reduce(BigDecimal.ZERO,(x,y) ->{ return x.add(y.getAmount().multiply(y.getExchangeRate())); },BigDecimal::add);
+					}
+					else
+					{
+						deliverMoney=BigDecimal.ZERO;
+					}
+
+				}
+				e.setDeliverMoney(deliverMoney);
+                //利润=开票金额-成本金额-物流费用
+				BigDecimal profit=(InvoiceAmount.subtract(costAmount)).subtract(deliverMoney);
+                e.setProfit(profit);
 			});
 		}
 		orderStatisticAnalysisVOIPage.setRecords(records);

+ 2 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.xml

@@ -414,7 +414,8 @@
         b.amount as amount,
         b.create_user as createUser,
         b.create_time as createTime,
-        b.org_order_no as orgOrderNo
+        b.org_order_no as orgOrderNo,
+        b.vbrk as vbrk
         FROM
         business_order a,
         business_order_items b

+ 17 - 0
blade-service/trade-finance/src/main/java/org/springblade/finance/controller/AccController.java

@@ -19,6 +19,8 @@ package org.springblade.finance.controller;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.springblade.client.entity.Message;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.finance.vo.AccVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -172,5 +174,20 @@ public class AccController extends BladeController {
 		return R.status(accService.removeByIds(Func.toLongList(ids)));
 	}
 
+	@PostMapping("/getAccListByCondition")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "获取", notes = "传入ids")
+	public R<List<Acc>> getAccListByCondition(@Valid @RequestBody Acc acc)
+	{
+        LambdaQueryWrapper<Acc> accLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		accLambdaQueryWrapper
+			.eq(Acc::getTenantId, AuthUtil.getTenantId())
+			.eq(Acc::getSrcType,acc.getSrcType())
+			.eq(acc.getSrcParentId()!=null,Acc::getSrcParentId,acc.getSrcParentId())
+			.eq(acc.getSrcFeesId()!=null,Acc::getSrcFeesId,acc.getSrcFeesId());
+		List<Acc> list = accService.list(accLambdaQueryWrapper);
+		return R.data(list);
+
+	}
 
 }