|
|
@@ -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;
|