Browse Source

修改提交

ioioio 3 years ago
parent
commit
47d2571ea3

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

@@ -25,6 +25,7 @@ public interface IOrderDescClient {
 	String GET_BY_ORDER_NO=API_PREFIX+"/getByOrderNo";
 	String GET_BY_ID=API_PREFIX+"/getById";
 	String GET_BY_CONDITIONS=API_PREFIX+"/getByConditions";
+	String GET_BY_CG_LIST=API_PREFIX+"/getByCgList";
 
 	/**
 	 * 修改采购订单状态
@@ -43,4 +44,7 @@ public interface IOrderDescClient {
 	@PostMapping(GET_BY_CONDITIONS)
 	R<List<Order>> getByConditions(@RequestBody Order order);
 
+	@PostMapping(GET_BY_CG_LIST)
+	R<List<Order>> getByCgList(@RequestBody Order order);
+
 }

+ 309 - 3
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java

@@ -230,6 +230,83 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 	@GlobalTransactional
 	@Transactional(rollbackFor = Exception.class)
 	public R submit(Delivery delivery) {
+
+		Long deliveryId = delivery.getId();
+		Delivery select = baseMapper.selectById(deliveryId);
+		//销售-发货-生成凭证, 如果销售订单号为空, 则代表是手动录入的发货单,不可以参与生成凭证
+		if (AuthUtil.getTenantId().equals("681169") && delivery.getTradeType().equals("GN") )
+		{
+
+			//=============生成凭证所需信息==============
+			if(select==null)
+			{
+				throw new SecurityException("未查到相关数据,操作失败");
+			}
+			Long corpId = select.getCorpId();
+			String corpName=null;
+			//销售订单号
+			String saleOrderNo=select.getOrderNo();
+			//采购订单号
+			String purchaseOrderNo=null;
+			//根据销售订单号,查询采购订单号
+			Order order=new Order();
+			order.setBillType("CG");
+			order.setOrgOrderNo(saleOrderNo);
+			order.setTenantId(AuthUtil.getTenantId());
+			R<List<Order>> listR = orderDescClient.getByCgList(order);
+			if(listR.isSuccess() && CollectionUtils.isNotEmpty(listR.getData()))
+			{
+				purchaseOrderNo=listR.getData().get(0).getOrderNo();
+			}
+
+
+			String wareHouse=null;
+
+			//客户信息
+			R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(corpId);
+			if(corpMessage.isSuccess()&&corpMessage.getData()!=null)
+			{
+				corpName=corpMessage.getData().getCname();
+			}
+			//仓库信息
+			StorageDesc storageDesc = iStorageClient.findById(select.getStorageId());
+			if(storageDesc!=null)
+			{
+				wareHouse=storageDesc.getCname();
+			}
+
+
+			//计算明细的入库金额(明细的总采购价 和 总销售价)
+			LambdaQueryWrapper<DeliveryItems> deliveryItemsLambdaQueryWrapper=new LambdaQueryWrapper<>();
+			deliveryItemsLambdaQueryWrapper
+				.eq(DeliveryItems::getPid,deliveryId)
+				.eq(DeliveryItems::getIsDeleted,0);
+			List<DeliveryItems> deliveryItems = deliveryItemsMapper.selectList(deliveryItemsLambdaQueryWrapper);
+			BigDecimal pricetotal1 = deliveryItems.stream().filter(e -> e.getPurchaseTotalAmount() != null).map(DeliveryItems::getPurchaseTotalAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal pricetotal2 = deliveryItems.stream().filter(e -> e.getDeliveryAmount() != null).map(DeliveryItems::getDeliveryAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+			//明细总采购价
+			String purchaseTotalAmount=CollectionUtils.isEmpty(deliveryItems)?"0":pricetotal1.toString();
+			//明细总销售价
+			String deliveryAmount=CollectionUtils.isEmpty(deliveryItems)?"0":pricetotal2.toString();
+
+			//=============生成凭证所需信息==============
+
+				try
+				{
+					String accountName="金蝶开发者测试账套";
+					//测试账套-收货生成凭证
+					this.testDeliverGoodsSaveVoucher(accountName,corpName,wareHouse,purchaseTotalAmount,deliveryAmount,saleOrderNo,purchaseOrderNo);
+				}
+				catch (Exception exception)
+				{
+					throw new SecurityException(exception.getMessage());
+				}
+		}
+
+
+
+
 		//计算返利
 		if(delivery.getTradeType().equals("GN"))
 		{
@@ -253,10 +330,12 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
            if(delivery.getDeliveryType() == 1)
            {
 			   this.createProfit(saleOrder,delivery.getCreateProfit());
+
 		   }
 		   //撤销发货
            else if(delivery.getDeliveryType() == 2)
 		   {
+			   //操作返利
 			   this.createProfit(saleOrder,delivery.getCreateProfit().negate());
 		   }
 
@@ -371,13 +450,16 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 
 		Long corpId = select.getCorpId();
 
+		//计算明细的入库金额(明细的总采购价)
         LambdaQueryWrapper<DeliveryItems> deliveryItemsLambdaQueryWrapper=new LambdaQueryWrapper<>();
 		deliveryItemsLambdaQueryWrapper
 			.eq(DeliveryItems::getPid,deliveryId)
 			.eq(DeliveryItems::getIsDeleted,0);
 		List<DeliveryItems> deliveryItems = deliveryItemsMapper.selectList(deliveryItemsLambdaQueryWrapper);
-		BigDecimal pricetotal = deliveryItems.stream().filter(e -> e.getPrice() != null).map(DeliveryItems::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+		BigDecimal pricetotal = deliveryItems.stream().filter(e -> e.getDeliveryAmount() != null).map(DeliveryItems::getDeliveryAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+		//明细总采购价
 		String acoount=CollectionUtils.isEmpty(deliveryItems)?"0":pricetotal.toString();
+
 		String corpName=null;
 		String orderNo=select.getOrderNo();
 		String wareHouse=null;
@@ -729,6 +811,57 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		}
 	}
 
+	//发货生成凭证
+	public void testDeliverGoodsSaveVoucher(String accountName,String copsName,String warehouse ,String purchaseTotalAmount,String deliveryAmount,String saleOrderNo,String purchaseOrder) throws Exception
+	{
+		//非达沃特用户直接返回
+		if(!AuthUtil.getTenantId().equals("681169"))
+		{
+			return;
+		}
+		//获取token
+		String token = this.getAccountGroupRequest();
+		//获取套账url
+		String getAccountUrl="https://api.kingdee.com/jdy/sys/accountGroup?access_token="+token;
+		Map<String, String> urlParams=new HashMap<>();
+		String result = this.doPost(getAccountUrl, urlParams);
+		JdyTool.getAccountGroup getAccountGroup = JSONObject.parseObject(result, JdyTool.getAccountGroup.class);
+
+		List<JdyTool.AccountGroup> list=new ArrayList<>();
+		if(!CollectionUtils.isNotEmpty(getAccountGroup.getData()))
+		{
+			throw new SecurityException("操作失败,暂无账套信息");
+		}
+		//获取此账号下,全部账套
+		getAccountGroup.getData().forEach(e->{
+			list.addAll(e.getAccountGroups());
+		});
+		//匹配账套
+		List<JdyTool.AccountGroup> groupList = list.stream().filter(e -> e.getAccountName().equals(accountName)).collect(Collectors.toList());
+		if(!CollectionUtils.isNotEmpty(groupList))
+		{
+			throw new SecurityException("未找到: "+accountName+" 的套账信息");
+		}
+		JdyTool.AccountGroup group = groupList.get(0);
+
+
+		//1.获取套账信息
+		LambdaQueryWrapper<JdTenant> jdTenantLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		jdTenantLambdaQueryWrapper
+			.eq(JdTenant::getIsEnable,1)
+			.eq(JdTenant::getTenantId,AuthUtil.getTenantId())
+			.eq(JdTenant::getAccountName,accountName);
+		JdTenant jdTenant = jdTenantMapper.selectOne(jdTenantLambdaQueryWrapper);
+		if(jdTenant==null)
+		{
+
+			return;
+		}
+
+		//2.收货,组装model,保存凭证
+		toDeliverJinDie(saleOrderNo,purchaseOrder,purchaseTotalAmount,deliveryAmount,copsName,warehouse,jdTenant.getAccountId(),group.getGroupName(),jdTenant);
+
+	}
 
 	//收货生成凭证
 	public void testTakeGoodsSaveVoucher(String accountName,String copsName,String warehouse ,String acoount,String orderNo) throws Exception
@@ -781,6 +914,179 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		toTakeJinDie(orderNo,acoount,copsName,warehouse,jdTenant.getAccountId(),group.getGroupName(),jdTenant);
 	}
 
+   	public void toDeliverJinDie(String saleOrderNo,String purchaseOrder,String purchaseTotalAmount,String deliveryAmount,String copsName,String warehouse,String accountId,String groupName,JdTenant jdTenant)
+    {
+		//不是某一家 直接返回
+		if (!AuthUtil.getTenantId().equals("681169"))
+		{
+			return;
+		}
+		List<JDYitems> jdYitems= new ArrayList<>();
+        //凭证1
+		JDYitems item1 = new JDYitems();
+		JDYitems item2 = new JDYitems();
+		item1.setDate(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
+		item2.setDate(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
+		List<JDYentries> entriesList1 = new ArrayList<>();
+		List<JDYentries> entriesList2 = new ArrayList<>();
+
+
+
+		/**======================第一个凭证==================== */
+		//财务借方凭证1
+		JDYentries d = new JDYentries();
+		d.setDc("1");
+
+		LambdaQueryWrapper<JdModule> dLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		dLambdaQueryWrapper
+			.eq(JdModule::getAccountId,accountId)
+			.eq(JdModule::getModule,"主发货")
+			.eq(JdModule::getDc,"1")
+			.last("limit 1")
+			.eq(JdModule::getTenantId,AuthUtil.getTenantId());
+		JdModule dModule = moduleMapper.selectOne(dLambdaQueryWrapper);
+		if(dModule==null)
+		{
+			throw new SecurityException("获取销售订单科目号失败");
+		}
+		d.setExplanation(saleOrderNo + "-收入");
+		d.setAccount_number(dModule.getProjectCode());
+		d.setDebitamount(deliveryAmount);
+
+		//===========辅助核算=================
+		List<JDYassist> dList=new ArrayList<>();
+
+
+		warehouse="测试客户";//具体到时候用哪个,需要关联查询传参,今天先用测试的
+		LambdaQueryWrapper<JdCorps> corpsQueryWrapper=new LambdaQueryWrapper<>();
+		corpsQueryWrapper
+			.eq(JdCorps::getCorpsType,1)
+			.eq(JdCorps::getAccountId,accountId)
+			.eq(JdCorps::getTenantId,AuthUtil.getTenantId())
+			.last("limit 1")
+			.eq(JdCorps::getCorpsName,warehouse);
+		JdCorps jdCorps = corpsMapper.selectOne(corpsQueryWrapper);
+
+		JDYassist jdYassist=new JDYassist();
+		jdYassist.setType("bd_customer");
+		if(jdCorps!=null)
+		{
+			jdYassist.setNumber(jdCorps.getCorpsCode());
+		}
+		dList.add(jdYassist);
+		d.setAssist(dList);
+		entriesList1.add(d);
+		//===========辅助核算=================
+
+
+		//财务贷方凭证1
+		JDYentries c = new JDYentries();
+		c.setDc("-1");
+
+		LambdaQueryWrapper<JdModule> cLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		cLambdaQueryWrapper
+			.eq(JdModule::getAccountId,accountId)
+			.eq(JdModule::getModule,"主发货")
+			.eq(JdModule::getDc,"-1")
+			.last("limit 1")
+			.eq(JdModule::getTenantId,AuthUtil.getTenantId());
+		JdModule cModule = moduleMapper.selectOne(cLambdaQueryWrapper);
+		if(cModule==null)
+		{
+			throw new SecurityException("获取销售订单科目号失败");
+		}
+
+		c.setExplanation(saleOrderNo + "-收入");
+		c.setAccount_number(cModule.getProjectCode());
+		c.setCreditamount(deliveryAmount);
+		entriesList1.add(c);
+		item1.setEntries(entriesList1);
+		jdYitems.add(item1);
+
+		/**======================第一个凭证==================== */
+
+
+		/**======================第二个凭证==================== */
+		//财务借方凭证2
+		JDYentries d2 = new JDYentries();
+		d2.setDc("1");
+
+		LambdaQueryWrapper<JdModule> dLambdaQueryWrapper2=new LambdaQueryWrapper<>();
+		dLambdaQueryWrapper2
+			.eq(JdModule::getAccountId,accountId)
+			.eq(JdModule::getModule,"次发货")
+			.eq(JdModule::getDc,"1")
+			.last("limit 1")
+			.eq(JdModule::getTenantId,AuthUtil.getTenantId());
+		JdModule dModule2 = moduleMapper.selectOne(dLambdaQueryWrapper2);
+		if(dModule2==null)
+		{
+			throw new SecurityException("获取销售订单科目号失败");
+		}
+		d2.setExplanation(purchaseOrder + "-结转成本");
+		d2.setAccount_number(dModule2.getProjectCode());
+		d2.setDebitamount(purchaseTotalAmount);
+		entriesList2.add(d2);
+
+		//财务贷方凭证2
+		JDYentries c2 = new JDYentries();
+		c2.setDc("-1");
+
+		LambdaQueryWrapper<JdModule> cLambdaQueryWrapper2=new LambdaQueryWrapper<>();
+		cLambdaQueryWrapper2
+			.eq(JdModule::getAccountId,accountId)
+			.eq(JdModule::getModule,"次发货")
+			.eq(JdModule::getDc,"-1")
+			.last("limit 1")
+			.eq(JdModule::getTenantId,AuthUtil.getTenantId());
+		JdModule cModule2 = moduleMapper.selectOne(cLambdaQueryWrapper2);
+		if(cModule2==null)
+		{
+			throw new SecurityException("获取销售订单科目号失败");
+		}
+		c2.setExplanation(purchaseOrder + "-结转成本");
+		c2.setAccount_number(cModule2.getProjectCode());
+		c2.setDebitamount(purchaseTotalAmount);
+
+		//===========辅助核算=================
+		List<JDYassist> cList2=new ArrayList<>();
+
+
+		warehouse="测试仓库";//具体到时候用哪个,需要关联查询传参,今天先用测试的
+		LambdaQueryWrapper<JdCorps> corpsQueryWrapper2=new LambdaQueryWrapper<>();
+		corpsQueryWrapper2
+			.eq(JdCorps::getCorpsType,4)
+			.eq(JdCorps::getAccountId,accountId)
+			.eq(JdCorps::getTenantId,AuthUtil.getTenantId())
+			.last("limit 1")
+			.eq(JdCorps::getCorpsName,warehouse);
+		JdCorps jdCorps2 = corpsMapper.selectOne(corpsQueryWrapper2);
+
+		JDYassist jdYassist2=new JDYassist();
+		jdYassist2.setType("bd_store");
+		if(jdCorps2!=null)
+		{
+			jdYassist2.setNumber(jdCorps2.getCorpsCode());
+		}
+		cList2.add(jdYassist2);
+		c2.setAssist(cList2);
+		entriesList2.add(c2);
+		item2.setEntries(entriesList2);
+		//===========辅助核算=================
+		jdYitems.add(item2);
+		/**======================第二个凭证==================== */
+
+		//组装数据,生成凭证
+		try {
+			String token = this.getAccountGroupRequest();
+			String saveUrl="http://api.kingdee.com/jdy/gl/voucher_save?access_token="+token;
+			JdyTool.testSaveVoucher(saveUrl,accountId,groupName,jdYitems);
+		} catch (Exception exception) {
+			throw new SecurityException("操作失败,保存金蝶错误:"+exception.getMessage());
+		}
+
+	}
+
 
 	//金蝶保存凭证测试-销售生成凭证
 	public void toTakeJinDie(String orderNo,String acoount,String copsName,String warehouse,String accountId,String groupName,JdTenant jdTenant) {
@@ -882,7 +1188,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 
 		JDYassist jdYassist2=new JDYassist();
 		jdYassist2.setType("bd_supplier");
-		if(jdCorps!=null)
+		if(jdCorps2!=null)
 		{
 			jdYassist2.setNumber(jdCorps2.getCorpsCode());
 		}
@@ -937,7 +1243,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		tokenDTO tokenDTO = JSONObject.parseObject(result, tokenDTO.class);
 		if(tokenDTO.errcode==1006)
 		{
-			throw new SecurityException("当前密码错误次数超过限定值");
+			throw new SecurityException("当前密码错误次数超过限定值,请稍后再试");
 		}
 		String accessToken = tokenDTO.getData().getAccess_token();
 		return accessToken;

+ 21 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/feign/OrderDescClient.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 
 
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tenant.annotation.NonDS;
@@ -80,5 +81,25 @@ public class OrderDescClient implements IOrderDescClient {
 
 	}
 
+	@Override
+	@GetMapping(GET_BY_CG_LIST)
+	public R<List<Order>> getByCgList(Order order)
+	{
+		LambdaQueryWrapper<Order> orderLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		orderLambdaQueryWrapper.eq(Order::getTenantId, AuthUtil.getTenantId());
+		orderLambdaQueryWrapper.eq(Order::getIsDeleted, 0);
+		orderLambdaQueryWrapper.eq(StringUtils.isNotBlank(order.getBillType()),Order::getBillType, order.getBillType());
+		orderLambdaQueryWrapper.eq(StringUtils.isNotBlank(order.getOrgOrderNo()),Order::getOrgOrderNo, order.getOrgOrderNo());
+		List<Order> list = iOrderService.list(orderLambdaQueryWrapper);
+		if(CollectionUtils.isNotEmpty(list))
+		{
+			return R.data(list);
+		}
+		else
+		{
+			return R.data(Collections.EMPTY_LIST);
+		}
+	}
+
 
 }

+ 7 - 1
blade-service/trade-finance/src/main/java/org/springblade/finance/controller/SettlementController.java

@@ -371,7 +371,13 @@ public class SettlementController extends BladeController {
 		return R.success("操作成功");
 	}
 
-
+	@GetMapping("getProjectList")
+	public R<String> getProjectList(@RequestParam(value = "search",required = true)String search,
+									@RequestParam(value = "accountName",required = true)String accountName
+									)
+	{
+		return R.data(settlementService.getProjectList(search, accountName));
+	}
 
 
 

+ 2 - 0
blade-service/trade-finance/src/main/java/org/springblade/finance/service/ISettlementService.java

@@ -68,4 +68,6 @@ public interface ISettlementService extends IService<Settlement> {
 
 	void createInvoiceItem(Settlement settlement);
 
+	String getProjectList(String search,String accountName);
+
 }

+ 14 - 0
blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java

@@ -1254,6 +1254,20 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 		invoiceItem.setCreateUser(AuthUtil.getUserId());
 		invoiceItemMapper.updateById(invoiceItem);
 	}
+
+	@Override
+	@Transactional
+	public String getProjectList(String search,String accountName)
+	{
+		LambdaQueryWrapper<JdTenant> jdTenantLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		jdTenantLambdaQueryWrapper
+			.eq(JdTenant::getTenantId,AuthUtil.getTenantId())
+			.eq(JdTenant::getAccountName,accountName)
+			.eq(JdTenant::getIsEnable,1);
+
+		return null;
+	}
+
 	//金蝶保存凭证测试-采购付款生成凭证
 	public void toPurchaseJinDie(String Account,String corpName,String accountId,String groupName,JdTenant jdTenant)
 	{