diff --git a/oms_web/oms_vue/src/api/finance/payable.js b/oms_web/oms_vue/src/api/finance/payable.js new file mode 100644 index 00000000..2ddeb1a1 --- /dev/null +++ b/oms_web/oms_vue/src/api/finance/payable.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +// 查询采购应付单列表 +export function listPayable(query) { + return request({ + url: '/finance/payable/list', + method: 'post', + data: query + }) +} + +// 查询付款计划列表 +export function getPaymentPlan(payableBillId) { + return request({ + url: `/finance/payable/plan/${payableBillId}`, + method: 'get' + }) +} + +// 更新付款计划 +export function updatePaymentPlan(payableBillId, data) { + return request({ + url: `/finance/payable/plan/${payableBillId}`, + method: 'post', + data: data + }) +} diff --git a/oms_web/oms_vue/src/layout/components/Sidebar/SidebarItem.vue b/oms_web/oms_vue/src/layout/components/Sidebar/SidebarItem.vue index cc67cfc3..ec29417b 100644 --- a/oms_web/oms_vue/src/layout/components/Sidebar/SidebarItem.vue +++ b/oms_web/oms_vue/src/layout/components/Sidebar/SidebarItem.vue @@ -99,7 +99,7 @@ export default { diff --git a/oms_web/oms_vue/src/views/finance/payable/components/EditForm.vue b/oms_web/oms_vue/src/views/finance/payable/components/EditForm.vue new file mode 100644 index 00000000..c667ed8c --- /dev/null +++ b/oms_web/oms_vue/src/views/finance/payable/components/EditForm.vue @@ -0,0 +1,156 @@ + + + + diff --git a/oms_web/oms_vue/src/views/finance/payable/components/MergePaymentDialog.vue b/oms_web/oms_vue/src/views/finance/payable/components/MergePaymentDialog.vue new file mode 100644 index 00000000..c1b83c8d --- /dev/null +++ b/oms_web/oms_vue/src/views/finance/payable/components/MergePaymentDialog.vue @@ -0,0 +1,330 @@ + + + + + diff --git a/oms_web/oms_vue/src/views/finance/payable/components/PaymentPlan.vue b/oms_web/oms_vue/src/views/finance/payable/components/PaymentPlan.vue new file mode 100644 index 00000000..ad10131b --- /dev/null +++ b/oms_web/oms_vue/src/views/finance/payable/components/PaymentPlan.vue @@ -0,0 +1,286 @@ + + + + + diff --git a/oms_web/oms_vue/src/views/finance/payable/index.vue b/oms_web/oms_vue/src/views/finance/payable/index.vue new file mode 100644 index 00000000..39dc1902 --- /dev/null +++ b/oms_web/oms_vue/src/views/finance/payable/index.vue @@ -0,0 +1,339 @@ + + + diff --git a/oms_web/oms_vue/src/views/inventory/outer/index.vue b/oms_web/oms_vue/src/views/inventory/outer/index.vue index fe3a8136..c99fdd33 100644 --- a/oms_web/oms_vue/src/views/inventory/outer/index.vue +++ b/oms_web/oms_vue/src/views/inventory/outer/index.vue @@ -28,7 +28,7 @@ - 导出 + 导出 diff --git a/oms_web/oms_vue/src/views/system/role/index.vue b/oms_web/oms_vue/src/views/system/role/index.vue index 4d52ea81..e1be50e1 100644 --- a/oms_web/oms_vue/src/views/system/role/index.vue +++ b/oms_web/oms_vue/src/views/system/role/index.vue @@ -534,15 +534,15 @@ export default { /** 分配数据权限操作 */ handleDataScope(row) { this.reset() - const deptTreeSelect = this.getDeptTree(row.roleId) + // const deptTreeSelect = this.getDeptTree(row.roleId) getRole(row.roleId).then(response => { this.form = response.data this.openDataScope = true - this.$nextTick(() => { - deptTreeSelect.then(res => { - this.$refs.dept.setCheckedKeys(res.checkedKeys) - }) - }) + // this.$nextTick(() => { + // deptTreeSelect.then(res => { + // this.$refs.dept.setCheckedKeys(res.checkedKeys) + // }) + // }) }) this.title = "分配数据权限" }, diff --git a/ruoyi-admin/src/main/resources/application-test.yml b/ruoyi-admin/src/main/resources/application-test.yml new file mode 100644 index 00000000..cb914275 --- /dev/null +++ b/ruoyi-admin/src/main/resources/application-test.yml @@ -0,0 +1,72 @@ +flowable: + database-schema-update: false +ruoyi: + excelTemplate: /home/application/excelTemplate + profile: /home/application/uploadPath +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 主库数据源 + master: + url: jdbc:mysql://121.199.168.157:3306/unis_pms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true + username: root + password: unis@db + # 从库数据源 + slave: + # 从数据源开关/默认关闭 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置连接超时时间 + connectTimeout: 30000 + # 配置网络超时时间 + socketTimeout: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: ruoyi + login-password: 123456 + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true +unis: + order: + # 执行单截止时间 + endHour: 96 + mail: + enabled: false \ No newline at end of file diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPayablePlanController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPayablePlanController.java new file mode 100644 index 00000000..e96ec3dc --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/OmsPayablePlanController.java @@ -0,0 +1,35 @@ +package com.ruoyi.sip.controller; + +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; + +import com.ruoyi.sip.oms.domain.OmsPayablePaymentPlan; + +import com.ruoyi.sip.oms.service.IOmsPayablePaymentPlanService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/finance/payable/plan") +public class OmsPayablePlanController extends BaseController { + + + + @Autowired + private IOmsPayablePaymentPlanService paymentPlanService; + + + + @GetMapping("/{payableBillId}") + public AjaxResult getPaymentPlan(@PathVariable("payableBillId") Long payableBillId) { + return AjaxResult.success(paymentPlanService.selectOmsPayablePaymentPlanListByPayableBillId(payableBillId)); + } + + @PostMapping("/{payableBillId}") + public AjaxResult updatePaymentPlan(@PathVariable("payableBillId") Long payableBillId, @RequestBody List paymentPlanList) { + paymentPlanService.updatePaymentPlans(payableBillId, paymentPlanList); + return AjaxResult.success(); + } +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/oms/domain/OmsPayablePaymentPlan.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/oms/domain/OmsPayablePaymentPlan.java new file mode 100644 index 00000000..68fbc446 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/oms/domain/OmsPayablePaymentPlan.java @@ -0,0 +1,27 @@ +package com.ruoyi.sip.oms.domain; + +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +@Data +public class OmsPayablePaymentPlan extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** 主键 */ + private Long id; + + /** 应付单ID */ + private Long payableBillId; + + /** 计划付款时间 */ + private Date planPaymentDate; + + /** 计划付款金额 */ + private BigDecimal planAmount; + + /** 计划付款比例 */ + private BigDecimal planRate; + +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/oms/mapper/OmsPayablePaymentPlanMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/oms/mapper/OmsPayablePaymentPlanMapper.java new file mode 100644 index 00000000..bce73065 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/oms/mapper/OmsPayablePaymentPlanMapper.java @@ -0,0 +1,63 @@ +package com.ruoyi.sip.oms.mapper; + +import java.util.List; +import com.ruoyi.sip.oms.domain.OmsPayablePaymentPlan; +import org.apache.ibatis.annotations.Param; + +public interface OmsPayablePaymentPlanMapper { + /** + * 根据应付单ID查询付款计划列表 + * + * @param payableBillId 应付单ID + * @return 付款计划集合 + */ + public List selectOmsPayablePaymentPlanListByPayableBillId(Long payableBillId); + + /** + * 插入单个付款计划 + * + * @param omsPayablePaymentPlan 付款计划对象 + * @return 结果 + */ + public int insertOmsPayablePaymentPlan(OmsPayablePaymentPlan omsPayablePaymentPlan); + + /** + * 更新单个付款计划 + * + * @param omsPayablePaymentPlan 付款计划对象 + * @return 结果 + */ + public int updateOmsPayablePaymentPlan(OmsPayablePaymentPlan omsPayablePaymentPlan); + + /** + * 批量新增付款计划 + * + * @param omsPayablePaymentPlanList 付款计划列表 + * @return 结果 + */ + public int batchOmsPayablePaymentPlan(List omsPayablePaymentPlanList); + + /** + * 根据应付单ID删除付款计划 + * + * @param payableBillId 应付单ID + * @return 结果 + */ + public int deleteOmsPayablePaymentPlanByPayableBillId(Long payableBillId); + + /** + * 根据ID删除付款计划 + * + * @param id 付款计划ID + * @return 结果 + */ + public int deleteOmsPayablePaymentPlanById(Long id); + + /** + * 根据应付单ID查询所有付款计划的ID + * + * @param payableBillId 应付单ID + * @return 付款计划ID列表 + */ + public List selectOmsPayablePaymentPlanIdsByPayableBillId(Long payableBillId); +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/oms/service/IOmsPayablePaymentPlanService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/oms/service/IOmsPayablePaymentPlanService.java new file mode 100644 index 00000000..27ab7a91 --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/oms/service/IOmsPayablePaymentPlanService.java @@ -0,0 +1,22 @@ +package com.ruoyi.sip.oms.service; + +import java.util.List; +import com.ruoyi.sip.oms.domain.OmsPayablePaymentPlan; + +public interface IOmsPayablePaymentPlanService { + /** + * 根据应付单ID查询付款计划列表 + * + * @param payableBillId 应付单ID + * @return 付款计划集合 + */ + public List selectOmsPayablePaymentPlanListByPayableBillId(Long payableBillId); + + /** + * 更新付款计划 + * + * @param payableBillId 应付单ID + * @param paymentPlanList 付款计划列表 + */ + public void updatePaymentPlans(Long payableBillId, List paymentPlanList); +} diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/oms/service/impl/OmsPayablePaymentPlanServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/oms/service/impl/OmsPayablePaymentPlanServiceImpl.java new file mode 100644 index 00000000..53f04a1a --- /dev/null +++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/oms/service/impl/OmsPayablePaymentPlanServiceImpl.java @@ -0,0 +1,58 @@ +package com.ruoyi.sip.oms.service.impl; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import com.ruoyi.common.utils.ShiroUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.ruoyi.sip.oms.mapper.OmsPayablePaymentPlanMapper; +import com.ruoyi.sip.oms.domain.OmsPayablePaymentPlan; +import com.ruoyi.sip.oms.service.IOmsPayablePaymentPlanService; + + +@Service +public class OmsPayablePaymentPlanServiceImpl implements IOmsPayablePaymentPlanService { + @Autowired + private OmsPayablePaymentPlanMapper omsPayablePaymentPlanMapper; + + @Override + public List selectOmsPayablePaymentPlanListByPayableBillId(Long payableBillId) { + return omsPayablePaymentPlanMapper.selectOmsPayablePaymentPlanListByPayableBillId(payableBillId); + } + + @Override + @Transactional + public void updatePaymentPlans(Long payableBillId, List paymentPlanList) { + // 获取数据库中现有付款计划的ID + List existingPlanIds = omsPayablePaymentPlanMapper.selectOmsPayablePaymentPlanIdsByPayableBillId(payableBillId); + Set existingPlanIdSet = existingPlanIds.stream().collect(Collectors.toSet()); + + // 用于存放前端传入的有效(非新增或已删除)的计划ID + Set incomingPlanIdSet = paymentPlanList.stream() + .filter(plan -> plan.getId() != null) + .map(OmsPayablePaymentPlan::getId) + .collect(Collectors.toSet()); + + for (OmsPayablePaymentPlan plan : paymentPlanList) { + plan.setPayableBillId(payableBillId); + if (plan.getId() == null) { + // 新增付款计划 + plan.setCreateBy(ShiroUtils.getLoginName()); + omsPayablePaymentPlanMapper.insertOmsPayablePaymentPlan(plan); + } else if (existingPlanIdSet.contains(plan.getId())) { + // 更新现有付款计划 + omsPayablePaymentPlanMapper.updateOmsPayablePaymentPlan(plan); + } + // 如果plan.getId()不为null但不在existingPlanIdSet中,说明是前端新添加但带有id的脏数据,或者是非法数据,这里不处理 + } + + // 删除数据库中存在但前端未提交的付款计划 + existingPlanIdSet.removeAll(incomingPlanIdSet); + for (Long idToDelete : existingPlanIdSet) { + omsPayablePaymentPlanMapper.deleteOmsPayablePaymentPlanById(idToDelete); + } + } +}