Parcourir la source

Merge remote-tracking branch 'origin/master'

caozj il y a 1 an
Parent
commit
a6e9f1b3b1

+ 8 - 0
hx-account/src/main/java/com/fjhx/account/controller/account/AccountRunningWaterController.java

@@ -107,4 +107,12 @@ public class AccountRunningWaterController {
         accountRunningWaterService.taxRefund(dto);
     }
 
+    /**
+     * 内部转账
+     */
+    @PostMapping("/internalTransfer")
+    public void internalTransfer(@RequestBody AccountRunningWaterDto dto) {
+        accountRunningWaterService.internalTransfer(dto);
+    }
+
 }

+ 26 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountRunningWaterDto.java

@@ -5,6 +5,8 @@ import com.fjhx.account.entity.tax.po.TaxRefundDetails;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotBlank;
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -22,4 +24,28 @@ public class AccountRunningWaterDto extends AccountRunningWater {
      */
     List<TaxRefundDetails> taxRefundDetailsList;
 
+    /**
+     * 转入账户-管理表ID
+     */
+    private Long inAccountManagementId;
+    /**
+     * 转入金额
+     */
+    private BigDecimal inAmount;
+
+    /**
+     * 转入币种(字典account_currency)
+     */
+    private String inCurrency;
+
+    /**
+     * 手续费金额
+     */
+    private BigDecimal commissionAmount;
+
+    /**
+     * 手续费币种(字典account_currency)
+     */
+    private String commissionCurrency;
+
 }

+ 6 - 0
hx-account/src/main/java/com/fjhx/account/service/account/AccountRunningWaterService.java

@@ -1,5 +1,6 @@
 package com.fjhx.account.service.account;
 
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.account.entity.account.dto.AccountRunningWaterDto;
 import com.fjhx.account.entity.account.dto.AccountRunningWaterSelectDto;
@@ -66,4 +67,9 @@ public interface AccountRunningWaterService extends BaseService<AccountRunningWa
      * 退税添加
      */
     void taxRefund(AccountRunningWaterDto dto);
+
+    /**
+     * 内部转账
+     */
+    void internalTransfer(AccountRunningWaterDto dto);
 }

+ 6 - 2
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRequestFundsServiceImpl.java

@@ -93,8 +93,12 @@ public class AccountRequestFundsServiceImpl extends ServiceImpl<AccountRequestFu
         Set<String> permissionList = sysRoleService.selectRolePermissionByUserId(SecurityUtils.getUserId());
         DynamicDataSourceContextHolder.poll();
         if (ObjectUtil.isNotEmpty(permissionList)) {
-            //if in[总经理、财务主管、出纳]可查看所有数据else只能看自己的
-            if (!permissionList.contains("ceo") && !permissionList.contains("financeOfficer") && !permissionList.contains("cashier")) {
+            //if in[总经理、财务主管、出纳、实习出纳]可查看所有数据else只能看自己的
+            if (!permissionList.contains("ceo")
+                    && !permissionList.contains("financeOfficer")
+                    && !permissionList.contains("cashier")
+                    && !permissionList.contains("Intern_cashier")
+            ) {
                 // 添加权限自己看自己
                 wrapper.eq("arf.create_user", SecurityUtils.getUserId());
             }

+ 103 - 95
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountRunningWaterServiceImpl.java

@@ -2,7 +2,6 @@ package com.fjhx.account.service.account.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -28,7 +27,6 @@ import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.common.utils.Assert;
 import com.fjhx.common.utils.ExchangeRateUtil;
 import com.fjhx.item.util.excel.util.ExcelUtil;
-//import com.fjhx.socket.service.WebSocketServer;
 import com.fjhx.tenant.entity.dict.dto.DictTenantDataSelectDto;
 import com.fjhx.tenant.entity.dict.vo.DictTenantDataVo;
 import com.fjhx.tenant.service.dict.DictTenantDataService;
@@ -37,7 +35,6 @@ import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
@@ -264,63 +261,14 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
         //先回滚历史数据
         //获取历史的流水信息信息
         AccountRunningWater oldAccountRunningWater = getById(accountRunningWaterDto.getId());
-        //获取余额
-        AccountRemainder accountRemainder = accountRemainderService.getOne(q -> q
-                .eq(AccountRemainder::getAccountManagementId, oldAccountRunningWater.getAccountManagementId())
-                .eq(AccountRemainder::getCurrency, oldAccountRunningWater.getCurrency())
-        );
-        if (ObjectUtil.isEmpty(accountRemainder)) {
-            throw new ServiceException("历史数据 该账户不存在此币种,请前往资金账户添加");
-        }
-        boolean update = false;
-        if ("10".equals(oldAccountRunningWater.getStatus())) {
-            BigDecimal subtract = accountRemainder.getRemainder().subtract(oldAccountRunningWater.getAmount());
-            if (subtract.compareTo(BigDecimal.ZERO) < 0) {
-                throw new ServiceException("修改前数据 账户余额不足");
-            }
-            update = accountRemainderService.update(q -> q
-                    .setSql("remainder = remainder - " + oldAccountRunningWater.getAmount())
-                    .setSql("change_remainder = " + oldAccountRunningWater.getAmount())
-                    .eq(AccountRemainder::getId, accountRemainder.getId())
-                    .apply("remainder - {0} >= 0", oldAccountRunningWater.getAmount())
-            );
-        } else {
-            update = accountRemainderService.update(q -> q
-                    .setSql("remainder = remainder + " + oldAccountRunningWater.getAmount())
-                    .setSql("change_remainder = " + oldAccountRunningWater.getAmount())
-                    .eq(AccountRemainder::getId, accountRemainder.getId())
-            );
-        }
-        Assert.eqTrue(update, "余额回滚操作失败");
+        //回滚余额 修改操作类型 收入变支出 支出变收入
+        String status = "10".equals(oldAccountRunningWater.getStatus()) ? "20" : "10";
+        oldAccountRunningWater.setStatus(status);
+        //回滚原数据
+        changeRemainder(oldAccountRunningWater);
+
         //再操作修改后数据
-        //获取余额
-        AccountRemainder accountRemainder1 = accountRemainderService.getOne(q -> q
-                .eq(AccountRemainder::getAccountManagementId, accountRunningWaterDto.getAccountManagementId())
-                .eq(AccountRemainder::getCurrency, accountRunningWaterDto.getCurrency())
-        );
-        if (ObjectUtil.isEmpty(accountRemainder)) {
-            throw new ServiceException("修改后数据 该账户不存在此币种,请前往资金账户添加");
-        }
-        boolean update1 = false;
-        if ("10".equals(accountRunningWaterDto.getStatus())) {
-            update1 = accountRemainderService.update(q -> q
-                    .setSql("remainder = remainder + " + accountRunningWaterDto.getAmount())
-                    .setSql("change_remainder = " + accountRunningWaterDto.getAmount())
-                    .eq(AccountRemainder::getId, accountRemainder1.getId())
-            );
-        } else {
-            BigDecimal subtract = accountRemainder1.getRemainder().subtract(accountRunningWaterDto.getAmount());
-            if (subtract.compareTo(BigDecimal.ZERO) < 0) {
-                throw new ServiceException("修改后数据 账户余额不足");
-            }
-            update1 = accountRemainderService.update(q -> q
-                    .setSql("remainder = remainder - " + accountRunningWaterDto.getAmount())
-                    .setSql("change_remainder = " + accountRunningWaterDto.getAmount())
-                    .eq(AccountRemainder::getId, accountRemainder1.getId())
-                    .apply("remainder - {0} >= 0", accountRunningWaterDto.getAmount())
-            );
-        }
-        Assert.eqTrue(update1, "余额修改操作失败");
+        changeRemainder(accountRunningWaterDto);
 
         this.updateById(accountRunningWaterDto);
     }
@@ -331,43 +279,12 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
         AccountRunningWater accountRunningWater = getById(id);
         Assert.notEmpty(accountRunningWater, "获取不到该流水信息");
 
+        //回滚余额 修改操作类型 收入变支出 支出变收入
+        String status = "10".equals(accountRunningWater.getStatus()) ? "20" : "10";
+        accountRunningWater.setStatus(status);
 
-        // 修改账户余额表的余额
-        AccountRemainder accountRemainder = accountRemainderService.getOne(q -> q
-                .eq(AccountRemainder::getAccountManagementId, accountRunningWater.getAccountManagementId())
-                .eq(AccountRemainder::getCurrency, accountRunningWater.getCurrency())
-        );
-        if (ObjectUtil.isEmpty(accountRemainder)) {
-            throw new ServiceException("该账户不存在此币种,请前往资金账户添加");
-        }
-        BigDecimal amount = accountRunningWater.getAmount();
-        String status = accountRunningWater.getStatus();
-        BigDecimal remainder = accountRemainder.getRemainder();
-
-        accountRemainder.setStatus(status);
-        accountRemainder.setChangeRemainder(amount);
-
-        boolean update = false;
-        if ("10".equals(accountRunningWater.getStatus())) {
-            BigDecimal subtract = remainder.subtract(amount);
-            if (subtract.compareTo(BigDecimal.ZERO) < 0) {
-                throw new ServiceException("账户余额不足");
-            }
-
-            update = accountRemainderService.update(q -> q
-                    .setSql("remainder = remainder - " + accountRunningWater.getAmount())
-                    .setSql("change_remainder = " + accountRunningWater.getAmount())
-                    .eq(AccountRemainder::getId, accountRemainder.getId())
-                    .apply("remainder - {0} >= 0", accountRunningWater.getAmount())
-            );
-        } else {
-            update = accountRemainderService.update(q -> q
-                    .setSql("remainder = remainder + " + accountRunningWater.getAmount())
-                    .setSql("change_remainder = " + accountRunningWater.getAmount())
-                    .eq(AccountRemainder::getId, accountRemainder.getId())
-            );
-        }
-        Assert.eqTrue(update, "余额操作失败操作失败");
+        //操作余额
+        changeRemainder(accountRunningWater);
 
         this.removeById(id);
     }
@@ -468,4 +385,95 @@ public class AccountRunningWaterServiceImpl extends ServiceImpl<AccountRunningWa
         taxRefundDetailsService.saveBatch(taxRefundDetailsList);
     }
 
+    /**
+     * 内部转账
+     */
+    @DSTransactional
+    @Override
+    public void internalTransfer(AccountRunningWaterDto dto) {
+        //生成转出流水
+        dto.setStatus("20");//支出
+        dto.setType("50");//内部转账
+        //操作余额
+        changeRemainder(dto);
+        this.save(dto);
+
+        //如果手续费不为0生成手续费
+        if (ObjectUtil.isNotEmpty(dto.getCommissionAmount()) && dto.getCommissionAmount().compareTo(BigDecimal.ZERO) != 0) {
+            AccountRunningWater commissionAccountRunningWater = new AccountRunningWater();
+            commissionAccountRunningWater.setStatus("20");
+            commissionAccountRunningWater.setType("50");//内部转账
+            commissionAccountRunningWater.setRemarks(dto.getRemarks());
+            commissionAccountRunningWater.setTransactionTime(dto.getTransactionTime());
+
+            commissionAccountRunningWater.setAccountManagementId(dto.getAccountManagementId());
+            commissionAccountRunningWater.setAmount(dto.getCommissionAmount());
+            Assert.notEmpty(dto.getCommissionCurrency(), "手续费币种不能为空");
+            commissionAccountRunningWater.setCurrency(dto.getCommissionCurrency());
+            commissionAccountRunningWater.setRemarks("手续费");
+            //操作余额
+            changeRemainder(commissionAccountRunningWater);
+            this.save(commissionAccountRunningWater);
+        }
+
+        //生成收入流水
+        AccountRunningWater inAccountRunningWater = new AccountRunningWater();
+        inAccountRunningWater.setStatus("10");
+        inAccountRunningWater.setType("50");//内部转账
+        inAccountRunningWater.setRemarks(dto.getRemarks());
+        inAccountRunningWater.setTransactionTime(dto.getTransactionTime());
+
+        inAccountRunningWater.setAccountManagementId(dto.getInAccountManagementId());
+        inAccountRunningWater.setAmount(dto.getInAmount());
+        Assert.notEmpty(dto.getInCurrency(), "收入币种不能为空");
+        inAccountRunningWater.setCurrency(dto.getInCurrency());
+        //操作余额
+        changeRemainder(inAccountRunningWater);
+        this.save(inAccountRunningWater);
+    }
+
+    /**
+     * 余额操作
+     */
+    private void changeRemainder(AccountRunningWater accountRunningWater) {
+        // 修改账户余额表的余额
+        AccountRemainder accountRemainder = accountRemainderService.getOne(q -> q
+                .eq(AccountRemainder::getAccountManagementId, accountRunningWater.getAccountManagementId())
+                .eq(AccountRemainder::getCurrency, accountRunningWater.getCurrency())
+        );
+        if (ObjectUtil.isEmpty(accountRemainder)) {
+            throw new ServiceException("该账户不存在此币种,请前往资金账户添加");
+        }
+        BigDecimal amount = accountRunningWater.getAmount();
+        String status = accountRunningWater.getStatus();
+        BigDecimal remainder = accountRemainder.getRemainder();
+
+        accountRemainder.setStatus(status);
+        accountRemainder.setChangeRemainder(amount);
+
+        boolean update = false;
+        if ("10".equals(accountRunningWater.getStatus())) {
+            //收入操作
+            update = accountRemainderService.update(q -> q
+                    .setSql("remainder = remainder + " + accountRunningWater.getAmount())
+                    .setSql("change_remainder = " + accountRunningWater.getAmount())
+                    .eq(AccountRemainder::getId, accountRemainder.getId())
+            );
+        } else {
+            //支出操作
+            BigDecimal subtract = remainder.subtract(amount);
+            if (subtract.compareTo(BigDecimal.ZERO) < 0) {
+                throw new ServiceException("账户余额不足");
+            }
+
+            update = accountRemainderService.update(q -> q
+                    .setSql("remainder = remainder - " + accountRunningWater.getAmount())
+                    .setSql("change_remainder = " + accountRunningWater.getAmount())
+                    .eq(AccountRemainder::getId, accountRemainder.getId())
+                    .apply("remainder - {0} >= 0", accountRunningWater.getAmount())
+            );
+        }
+        Assert.eqTrue(update, "余额操作失败,请重试!!!");
+    }
+
 }

+ 31 - 0
hx-customer/src/main/java/com/fjhx/customer/entity/customer/po/Customer.java

@@ -101,4 +101,35 @@ public class Customer extends BasePo {
     @TableField(exist = false)
     private Integer count;
 
+
+    /**
+     * beneficiaryName
+     */
+    private String beneficiaryName;
+
+    /**
+     * beneficiaryBank
+     */
+    private String beneficiaryBank;
+
+    /**
+     * beneficiaryBankAddress
+     */
+    private String beneficiaryBankAddress;
+
+    /**
+     * beneficiaryAddress
+     */
+    private String beneficiaryAddress;
+
+    /**
+     * beneficiaryName
+     */
+    private String swiftCode;
+
+    /**
+     * beneficiaryAccountNumber
+     */
+    private String beneficiaryAccountNumber;
+
 }

+ 5 - 6
hx-sale/src/main/java/com/fjhx/sale/entity/purchase/dto/EhsdPurchaseSelectDto.java

@@ -13,12 +13,6 @@ import lombok.Setter;
 @Getter
 @Setter
 public class EhsdPurchaseSelectDto extends BaseSelectDto {
-
-    /**
-     * 采购状态
-     */
-    private Integer purchaseStatus;
-
     /**
      * 到货状态
      */
@@ -33,4 +27,9 @@ public class EhsdPurchaseSelectDto extends BaseSelectDto {
      * 供应商名称
      */
     private String supplyName;
+
+    /**
+     * 采购状态
+     */
+    private Integer status;
 }

+ 0 - 2
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractProductServiceImpl.java

@@ -241,7 +241,6 @@ public class ContractProductServiceImpl extends ServiceImpl<ContractProductMappe
                 for (ContractProduct contractProduct : list) {
                     List<EhsdPurchaseProduct> ehsdPurchaseProductList = collect.get(contractProduct.getId());
                     if (ObjectUtil.isEmpty(ehsdPurchaseProductList)) {
-                        contractProduct.setExpendQuantity(BigDecimal.ZERO);
                         continue;
                     }
                     BigDecimal purchaseQuantity = ehsdPurchaseProductList.stream().map(EhsdPurchaseProduct::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -363,7 +362,6 @@ public class ContractProductServiceImpl extends ServiceImpl<ContractProductMappe
                 for (ContractProduct contractProduct : list) {
                     List<EhsdPurchaseProduct> ehsdPurchaseProductList = collect.get(contractProduct.getId());
                     if (ObjectUtil.isEmpty(ehsdPurchaseProductList)) {
-                        contractProduct.setExpendQuantity(BigDecimal.ZERO);
                         continue;
                     }
                     BigDecimal purchaseQuantity = ehsdPurchaseProductList.stream().map(EhsdPurchaseProduct::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);

+ 9 - 7
hx-sale/src/main/java/com/fjhx/sale/service/purchase/impl/EhsdPurchaseServiceImpl.java

@@ -127,8 +127,8 @@ public class EhsdPurchaseServiceImpl extends ServiceImpl<EhsdPurchaseMapper, Ehs
     public Page<EhsdPurchaseVo> getPage(EhsdPurchaseSelectDto dto) {
         IWrapper<EhsdPurchase> wrapper = getWrapper();
         wrapper.orderByDesc("t1", EhsdPurchase::getCreateTime);
-        if (ObjectUtils.isNotEmpty(dto.getPurchaseStatus())) {
-            wrapper.eq("t1", EhsdPurchase::getStatus, dto.getPurchaseStatus());
+        if (ObjectUtils.isNotEmpty(dto.getStatus())) {
+            wrapper.eq("t1", EhsdPurchase::getStatus, dto.getStatus());
         }
         if (ObjectUtils.isNotEmpty(dto.getPayStatus())) {
             wrapper.eq("t1", EhsdPurchase::getPayStatus, dto.getPayStatus());
@@ -137,8 +137,10 @@ public class EhsdPurchaseServiceImpl extends ServiceImpl<EhsdPurchaseMapper, Ehs
             wrapper.keyword(dto.getKeyword(), new SqlField("t2.name"), new SqlField("t1.`code`"));
         }
 
-        //不显示已变更数据
-        wrapper.ne(EhsdPurchase::getStatus, FlowStatusEnum1.UPDATE.getKey());
+        if (ObjectUtils.isEmpty(dto.getStatus()) || FlowStatusEnum1.UPDATE.getKey() != dto.getStatus()) {
+            //不显示已变更数据
+            wrapper.ne(EhsdPurchase::getStatus, FlowStatusEnum1.UPDATE.getKey());
+        }
 
         //不显示 在审批中 但是 有历史合同id的数据
         wrapper.not(q -> q
@@ -224,7 +226,7 @@ public class EhsdPurchaseServiceImpl extends ServiceImpl<EhsdPurchaseMapper, Ehs
         //赋值产品待采购数量信息
         if (ObjectUtils.isNotEmpty(ehsdPurchaseProductList)) {
             //申购来源
-            List<EhsdPurchaseProductVo> subscribeSource = ehsdPurchaseProductVos.stream().filter(item -> Objects.equals(item.getDataResource(),0)).collect(Collectors.toList());
+            List<EhsdPurchaseProductVo> subscribeSource = ehsdPurchaseProductVos.stream().filter(item -> Objects.equals(item.getDataResource(), 0)).collect(Collectors.toList());
             if (ObjectUtils.isNotEmpty(subscribeSource)) {
                 List<Long> subscribeDetailSourceIds = subscribeSource.stream().map(EhsdPurchaseProductVo::getDataResourceId).distinct().collect(Collectors.toList());
                 Map<Long, SubscribeDetail> contractProductMap = subscribeDetailService.mapKEntity(SubscribeDetail::getId, q -> q.in(SubscribeDetail::getId, subscribeDetailSourceIds));
@@ -238,7 +240,7 @@ public class EhsdPurchaseServiceImpl extends ServiceImpl<EhsdPurchaseMapper, Ehs
                 }
             }
             //合同来源
-            List<EhsdPurchaseProductVo> contractSource = ehsdPurchaseProductVos.stream().filter(item -> Objects.equals(item.getDataResource(),1)).collect(Collectors.toList());
+            List<EhsdPurchaseProductVo> contractSource = ehsdPurchaseProductVos.stream().filter(item -> Objects.equals(item.getDataResource(), 1)).collect(Collectors.toList());
             if (ObjectUtils.isNotEmpty(contractSource)) {
                 List<Long> contractSourceIds = contractSource.stream().map(EhsdPurchaseProductVo::getDataResourceId).distinct().collect(Collectors.toList());
                 Map<Long, ContractProduct> contractProductMap = contractProductService.mapKEntity(ContractProduct::getId, q -> q.in(ContractProduct::getId, contractSourceIds));
@@ -248,7 +250,7 @@ public class EhsdPurchaseServiceImpl extends ServiceImpl<EhsdPurchaseMapper, Ehs
                 }
             }
             //样品单来源
-            List<EhsdPurchaseProductVo> sampleSource = ehsdPurchaseProductVos.stream().filter(item -> Objects.equals(item.getDataResource(),2)).collect(Collectors.toList());
+            List<EhsdPurchaseProductVo> sampleSource = ehsdPurchaseProductVos.stream().filter(item -> Objects.equals(item.getDataResource(), 2)).collect(Collectors.toList());
             if (ObjectUtils.isNotEmpty(sampleSource)) {
                 List<Long> sampleSourceIds = sampleSource.stream().map(EhsdPurchaseProductVo::getDataResourceId).distinct().collect(Collectors.toList());
                 Map<Long, SampleProduct> sampleProductMap = sampleProductService.mapKEntity(SampleProduct::getId, q -> q.in(SampleProduct::getId, sampleSourceIds));

+ 1 - 1
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java

@@ -543,7 +543,7 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
     /**
      * 改变库存数量
      */
-    private void changeStock(List<? extends InOutBo> list, Long warehouseId, JournalType journalType) {
+    private synchronized void changeStock(List<? extends InOutBo> list, Long warehouseId, JournalType journalType) {
 
         Map<Long, BigDecimal> map = list.stream().collect(Collectors.toMap(
                 InOutBo::getProductId,