From e377fda7e5f0ad36db1afb09f7e36db9b43c480a Mon Sep 17 00:00:00 2001 From: fl <3098731433@qq.com> Date: Thu, 12 Jun 2025 17:27:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E7=A8=8B=E9=A0=90=E4=BB=98=E6=AC=BE?= =?UTF-8?q?=E5=86=B2=E9=94=80=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manager/basic/entity/AccountBean.java | 22 ++++++++ .../bm/controller/PrepaymentController.java | 4 -- .../boot/manager/ca/bm/dao/PrepaymentDao.java | 14 ++++- .../manager/ca/bm/entity/OperationsBean.java | 2 + .../manager/ca/bm/entity/PrepaymentBean.java | 2 + .../service/impl/PrepaymentServiceImpl.java | 49 +++++++++++------ .../manager/controller/UtilController.java | 10 ++++ .../boot/manager/manager/dao/UtilDao.java | 3 ++ .../manager/manager/service/UtilService.java | 3 ++ .../manager/service/impl/UtilServiceImpl.java | 54 +++++++++++++++++++ src/main/resources/application.properties | 4 +- .../resources/mappers/basic/UtilMapper.xml | 17 ++++++ .../resources/mappers/ca/PrepaymentMapper.xml | 45 ++++++++++++++-- .../static/js/prepayment/addOperations.js | 30 +++++++++-- .../resources/static/js/prepayment/proForm.js | 11 ++-- src/main/resources/static/js/select.js | 30 +++++++++++ .../pages/prepayment/addOperations.html | 9 ++++ 17 files changed, 274 insertions(+), 35 deletions(-) create mode 100644 src/main/java/com/bonus/boot/manager/basic/entity/AccountBean.java diff --git a/src/main/java/com/bonus/boot/manager/basic/entity/AccountBean.java b/src/main/java/com/bonus/boot/manager/basic/entity/AccountBean.java new file mode 100644 index 0000000..facf605 --- /dev/null +++ b/src/main/java/com/bonus/boot/manager/basic/entity/AccountBean.java @@ -0,0 +1,22 @@ +package com.bonus.boot.manager.basic.entity; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class AccountBean { + + private String key; + private String value; + private String remark; + private String month; + private String reverseId; + private String type; + private BigDecimal amount; + private String proId; + private String id; + + + +} diff --git a/src/main/java/com/bonus/boot/manager/ca/bm/controller/PrepaymentController.java b/src/main/java/com/bonus/boot/manager/ca/bm/controller/PrepaymentController.java index 97868a7..8b668d9 100644 --- a/src/main/java/com/bonus/boot/manager/ca/bm/controller/PrepaymentController.java +++ b/src/main/java/com/bonus/boot/manager/ca/bm/controller/PrepaymentController.java @@ -110,8 +110,6 @@ public class PrepaymentController { int i = service.addOperations(bean); if(i>0){ ar.setFailMsg(GlobalConst.SAVE_SUCCEED); - }else if(i==-1){ - ar.setFailMsg("当前月份已经存在"); } else{ ar.setFailMsg(GlobalConst.SAVE_FAIL); } @@ -126,8 +124,6 @@ public class PrepaymentController { int i = service.updateOperations(bean); if(i>0){ ar.setFailMsg(GlobalConst.SAVE_SUCCEED); - }else if(i==-1){ - ar.setFailMsg("当前月份已经存在"); } else{ ar.setFailMsg(GlobalConst.SAVE_FAIL); } diff --git a/src/main/java/com/bonus/boot/manager/ca/bm/dao/PrepaymentDao.java b/src/main/java/com/bonus/boot/manager/ca/bm/dao/PrepaymentDao.java index 79f9f19..919c48e 100644 --- a/src/main/java/com/bonus/boot/manager/ca/bm/dao/PrepaymentDao.java +++ b/src/main/java/com/bonus/boot/manager/ca/bm/dao/PrepaymentDao.java @@ -2,7 +2,6 @@ package com.bonus.boot.manager.ca.bm.dao; import com.bonus.boot.manager.ca.bm.entity.OperationsBean; import com.bonus.boot.manager.ca.bm.entity.PrepaymentBean; -import com.bonus.boot.manager.tools.entity.ToolsBean; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -49,6 +48,19 @@ public interface PrepaymentDao { */ OperationsBean getOperationsById(String id); + /** + * 将子表的数据删除。 + * @param prepaymentId + */ + void delOperationsByPrepaymentId(Long prepaymentId); + + /** + * 获取 agingMonths + * @param id + * @return + */ + String getAgingMonths(String id); + List getDictList(@Param("params") Map params, @Param("offset") Integer offset, @Param("limit") Integer limit); PrepaymentBean getById(Long id); diff --git a/src/main/java/com/bonus/boot/manager/ca/bm/entity/OperationsBean.java b/src/main/java/com/bonus/boot/manager/ca/bm/entity/OperationsBean.java index 02c3c84..c515754 100644 --- a/src/main/java/com/bonus/boot/manager/ca/bm/entity/OperationsBean.java +++ b/src/main/java/com/bonus/boot/manager/ca/bm/entity/OperationsBean.java @@ -44,4 +44,6 @@ public class OperationsBean { private String userName; //用户名 private String projectName; //工程名称 + + private String reverseId; } diff --git a/src/main/java/com/bonus/boot/manager/ca/bm/entity/PrepaymentBean.java b/src/main/java/com/bonus/boot/manager/ca/bm/entity/PrepaymentBean.java index ebef3ad..160012a 100644 --- a/src/main/java/com/bonus/boot/manager/ca/bm/entity/PrepaymentBean.java +++ b/src/main/java/com/bonus/boot/manager/ca/bm/entity/PrepaymentBean.java @@ -35,6 +35,8 @@ public class PrepaymentBean { private String updatedTime;//更新时间 private String keyword; //关键字 + private String month;//备注 + private String agingMonths; //账龄(月) private String state; //状态 diff --git a/src/main/java/com/bonus/boot/manager/ca/bm/service/impl/PrepaymentServiceImpl.java b/src/main/java/com/bonus/boot/manager/ca/bm/service/impl/PrepaymentServiceImpl.java index 0b389fa..34749d2 100644 --- a/src/main/java/com/bonus/boot/manager/ca/bm/service/impl/PrepaymentServiceImpl.java +++ b/src/main/java/com/bonus/boot/manager/ca/bm/service/impl/PrepaymentServiceImpl.java @@ -16,7 +16,10 @@ import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; import java.net.URLEncoder; +import java.time.YearMonth; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -46,6 +49,17 @@ public class PrepaymentServiceImpl implements PrepaymentService { public int addPrepayment(PrepaymentBean prepaymentBean) { prepaymentBean.setOperator(UserUtil.getLoginUser().getId().toString()); int i = dao.addPrepayment(prepaymentBean); + if(i>0){ + //将初始金额新增进去 + OperationsBean bean = new OperationsBean(); + bean.setPrepaymentId(prepaymentBean.getId()); + bean.setMonth(prepaymentBean.getFirstPaymentDate().substring(0,7)); + bean.setOperationType("2"); + bean.setAmount(prepaymentBean.getInitialAmount()); + bean.setExecutor(UserUtil.getLoginUser().getId().toString()); + bean.setRemarks("初始金额"); + int k = dao.addOperations(bean); + } return i; } @@ -53,22 +67,30 @@ public class PrepaymentServiceImpl implements PrepaymentService { public int addOperations(OperationsBean bean) { bean.setOperator(UserUtil.getLoginUser().getId().toString()); int i = 0; - int j = dao.getMath(bean); - if(j>0){ - i = -1; - }else{ - int k = dao.addOperations(bean); - if(k>0){ - dao.updatePrepaymentId(bean); - i = 1; - } + int k = dao.addOperations(bean); + if(k>0){ + dao.updatePrepaymentId(bean); + i = 1; } return i; } @Override public PrepaymentBean getListById(String id) { - return dao.getListById(id); + PrepaymentBean bean = dao.getListById(id); + //单独查账龄 + String month = dao.getAgingMonths(id); + if(month != null){ + // 解析字符串为 YearMonth 对象 + YearMonth ym1 = YearMonth.parse(month); + YearMonth ym2 = YearMonth.now(); + // 计算两个日期之间的月份数差 + long monthsBetween = ChronoUnit.MONTHS.between(ym1, ym2) + 1; + bean.setAgingMonths(String.valueOf(monthsBetween)); + }else{ + bean.setAgingMonths("0"); + } + return bean; } @Override @@ -86,22 +108,19 @@ public class PrepaymentServiceImpl implements PrepaymentService { public void delPrepayment(Long id) { String userId =UserUtil.getLoginUser().getId().toString(); dao.delPrepayment(id,userId); + //将子表的删除数据也删除 + dao.delOperationsByPrepaymentId(id); } @Override public int updateOperations(OperationsBean bean) { bean.setOperator(UserUtil.getLoginUser().getId().toString()); int i = 0; - int j = dao.getMath(bean); - if(j>0){ - i = -1; - }else{ int k = dao.updateOperations(bean); if(k>0){ dao.updatePrepaymentId(bean); i = 1; } - } return i; } diff --git a/src/main/java/com/bonus/boot/manager/manager/controller/UtilController.java b/src/main/java/com/bonus/boot/manager/manager/controller/UtilController.java index fc9f4d0..f1573b3 100644 --- a/src/main/java/com/bonus/boot/manager/manager/controller/UtilController.java +++ b/src/main/java/com/bonus/boot/manager/manager/controller/UtilController.java @@ -1,5 +1,6 @@ package com.bonus.boot.manager.manager.controller; +import com.bonus.boot.manager.basic.entity.AccountBean; import com.bonus.boot.manager.basic.entity.MapBean; import com.bonus.boot.manager.manager.annotation.LogAnnotation; import com.bonus.boot.manager.manager.entity.R; @@ -89,5 +90,14 @@ public class UtilController { List list = service.getSetMeal(o); return R.okTable(list, list.size()); } + + @LogAnnotation + @PostMapping(value = "/getNeedReverse") + @ApiOperation(value = "人冲销列表select列表") + public List getNeedReverse(AccountBean o) { + List result = service.getNeedReverse(o); + return result; + } + } diff --git a/src/main/java/com/bonus/boot/manager/manager/dao/UtilDao.java b/src/main/java/com/bonus/boot/manager/manager/dao/UtilDao.java index 5df5cbf..a64e668 100644 --- a/src/main/java/com/bonus/boot/manager/manager/dao/UtilDao.java +++ b/src/main/java/com/bonus/boot/manager/manager/dao/UtilDao.java @@ -7,6 +7,7 @@ */ package com.bonus.boot.manager.manager.dao; +import com.bonus.boot.manager.basic.entity.AccountBean; import com.bonus.boot.manager.basic.entity.MapBean; import org.apache.ibatis.annotations.Mapper; @@ -56,4 +57,6 @@ public interface UtilDao { int userteltpone(String phone); List getHazard(); + + List getNeedReverse(AccountBean o); } diff --git a/src/main/java/com/bonus/boot/manager/manager/service/UtilService.java b/src/main/java/com/bonus/boot/manager/manager/service/UtilService.java index ada25d0..d08cda2 100644 --- a/src/main/java/com/bonus/boot/manager/manager/service/UtilService.java +++ b/src/main/java/com/bonus/boot/manager/manager/service/UtilService.java @@ -1,5 +1,6 @@ package com.bonus.boot.manager.manager.service; +import com.bonus.boot.manager.basic.entity.AccountBean; import com.bonus.boot.manager.basic.entity.MapBean; import java.util.List; @@ -40,4 +41,6 @@ public interface UtilService { List getSetMeal(MapBean bean); List getHazard(); + + List getNeedReverse(AccountBean o); } diff --git a/src/main/java/com/bonus/boot/manager/manager/service/impl/UtilServiceImpl.java b/src/main/java/com/bonus/boot/manager/manager/service/impl/UtilServiceImpl.java index 1bc363d..4bca5ce 100644 --- a/src/main/java/com/bonus/boot/manager/manager/service/impl/UtilServiceImpl.java +++ b/src/main/java/com/bonus/boot/manager/manager/service/impl/UtilServiceImpl.java @@ -1,12 +1,18 @@ package com.bonus.boot.manager.manager.service.impl; +import com.bonus.boot.manager.basic.entity.AccountBean; import com.bonus.boot.manager.basic.entity.MapBean; import com.bonus.boot.manager.manager.dao.UtilDao; import com.bonus.boot.manager.manager.service.UtilService; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; @Service("utilService") public class UtilServiceImpl implements UtilService { @@ -55,4 +61,52 @@ public class UtilServiceImpl implements UtilService { public List getHazard() { return utilDao.getHazard(); } + + @Override + public List getNeedReverse(AccountBean o) { + String reverseId = o.getReverseId(); + o.setReverseId(""); + o.setType("2"); + List result2 = utilDao.getNeedReverse(o); + o.setType("1"); + o.setReverseId(reverseId); + List result1 = utilDao.getNeedReverse(o); + + // 分组合并 result1 + List collect1 = result1.stream() + .collect(Collectors.groupingBy(AccountBean::getReverseId, + Collectors.reducing(new AccountBean(), (a, b) -> { + AccountBean merged = new AccountBean(); + merged.setKey(b.getReverseId()); + merged.setAmount((a.getAmount() == null ? BigDecimal.ZERO : a.getAmount()) + .add(b.getAmount() == null ? BigDecimal.ZERO : b.getAmount())); + return merged; + }))) + .values().stream() + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + // 构建 collect1 的 key -> AccountBean 映射 + Map collect1Map = collect1.stream() + .collect(Collectors.toMap(AccountBean::getKey, a -> a)); + + // 处理 result2 + List finalResult = new ArrayList<>(); + for (AccountBean bean : result2) { + AccountBean compareBean = collect1Map.get(bean.getKey()); + if (compareBean == null) { + bean.setValue(bean.getAmount()+" "+bean.getRemark()); + finalResult.add(bean); + } else { + BigDecimal diff = bean.getAmount() + .subtract(compareBean.getAmount() == null ? BigDecimal.ZERO : compareBean.getAmount()); + if (diff.compareTo(BigDecimal.ZERO) > 0) { + bean.setAmount(diff); + bean.setValue(diff+" "+bean.getRemark()+"(已冲销部分)"); + finalResult.add(bean); + } + } + } + return finalResult; + } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 02c9ccb..e5dbd82 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,8 +1,8 @@ -server.port=2002 +server.port=20020 #????·?? server.servlet.context-path=/yncw #mysql????????? -spring.datasource.url=jdbc:mysql://192.168.0.14:4418/yncw1?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true +spring.datasource.url=jdbc:mysql://192.168.0.14:4418/yncw_real?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true spring.datasource.username=root spring.datasource.password=Bonus@admin123! #spring.datasource.url=jdbc:mysql://127.0.0.1:3306/yncw_real?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true diff --git a/src/main/resources/mappers/basic/UtilMapper.xml b/src/main/resources/mappers/basic/UtilMapper.xml index 2d3ac31..6daf80c 100644 --- a/src/main/resources/mappers/basic/UtilMapper.xml +++ b/src/main/resources/mappers/basic/UtilMapper.xml @@ -61,6 +61,23 @@ select count(1) from pm_base_physical where telep_number=#{0} and is_active='1' + diff --git a/src/main/resources/mappers/ca/PrepaymentMapper.xml b/src/main/resources/mappers/ca/PrepaymentMapper.xml index d54c61c..c4aecf0 100644 --- a/src/main/resources/mappers/ca/PrepaymentMapper.xml +++ b/src/main/resources/mappers/ca/PrepaymentMapper.xml @@ -4,7 +4,7 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + INSERT INTO `bm_project_prepayment` (`project_code`, `project_name`, `business_unit`, `contact_unit`, `type`, `initial_amount`, `first_payment_date`, `current_balance`, `remarks`, `operator`, `is_active`) @@ -15,7 +15,11 @@ INSERT INTO `bm_monthly_operations` (`p_id`, `month`, `operation_type`, `amount`, `executor`, `remarks`, `next_month`, `proposed_amount`, `handler`, `next_remarks`, `is_active`, - `operator`,`current_balance`) + `operator`,`current_balance` + + , reverse_id + + ) VALUES (#{prepaymentId}, #{month}, #{operationType}, @@ -25,7 +29,11 @@ #{nextMonth}, #{proposedAmount}, #{handler}, - #{nextRemarks}, '1', #{operator},#{currentBalance}) + #{nextRemarks}, '1', #{operator},#{currentBalance} + + ,#{reverseId} + + ) @@ -73,6 +81,10 @@ UPDATE `bm_monthly_operations` SET `month` = #{month}, `operation_type` = #{operationType}, `amount` = #{amount}, `executor` = #{executor},operator = #{operator} + + + ,reverse_id = #{reverseId} + ,remarks = #{remarks} @@ -101,6 +113,11 @@ operator = #{userId} WHERE `id` = #{id} + + UPDATE `bm_monthly_operations` + SET `is_active` = '0' + WHERE `p_id` = #{prepaymentId} + UPDATE `bm_monthly_operations` @@ -172,7 +189,7 @@ operator, created_time as createdTime, updated_time as updatedTime, - GREATEST(PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(first_payment_date, '%Y%m')) + 1, 1) AS agingMonths, + DATE_FORMAT(first_payment_date, '%Y-%m') as `month`, CASE WHEN current_balance = 0 THEN 0 ELSE 1 @@ -190,7 +207,7 @@ bm.amount, u2.username as executor, bm.remarks, bm.next_month as nextMonth, bm.proposed_amount as proposedAmount, bm.handler, bm.next_remarks as nextRemarks, u.username as operator, bm.created_time as createdTime, bm.updated_time as updatedTime - ,pro.project_name as projectName + ,pro.project_name as projectName,bm.reverse_id as reverseId FROM `bm_monthly_operations` bm LEFT JOIN bm_project_prepayment pro ON pro.id = bm.p_id LEFT JOIN sys_user u ON u.id = bm.operator @@ -261,4 +278,22 @@ SELECT id,`name` FROM bm_project_prepayment_dict WHERE IS_ACTIVE = 1 AND type = '2' + + \ No newline at end of file diff --git a/src/main/resources/static/js/prepayment/addOperations.js b/src/main/resources/static/js/prepayment/addOperations.js index 8721cb2..c75893f 100644 --- a/src/main/resources/static/js/prepayment/addOperations.js +++ b/src/main/resources/static/js/prepayment/addOperations.js @@ -1,4 +1,5 @@ var id = localStorage.getItem("id"); +var reverseId = localStorage.getItem("reverseId"); var prepaymentId = localStorage.getItem("prepaymentId"); var currentBalance = localStorage.getItem("currentBalance"); @@ -10,6 +11,12 @@ layui.use(['table', 'layer', 'laydate', 'jquery', 'form'], function(){ form = layui.form; laydate = layui.laydate; + //如果是新增类型的修改,则隐藏冲销按钮 + if(id !=="" && (reverseId === "" || reverseId === "null")){ + $("#reverse").css("display", "none"); + } + getNeedReverse(form, prepaymentId,id,reverseId); + // 获取当前月份 var currentDate = getCurrentMonth(); console.log("currentDate:", currentDate) @@ -39,7 +46,13 @@ layui.use(['table', 'layer', 'laydate', 'jquery', 'form'], function(){ $('.radio-button').on('click', function() { $('.radio-button').removeClass('active'); $(this).addClass('active'); - $('#operationType').val($(this).data('value')); + var operationType = $(this).data('value'); + $('#operationType').val(operationType); + if(operationType == 1){ + $("#reverse").css("display", "flex"); + }else { + $("#reverse").css("display", "none"); + } }); initData(); @@ -58,9 +71,10 @@ layui.use(['table', 'layer', 'laydate', 'jquery', 'form'], function(){ } // 如果是冲销,检查是否超过当前余额 + var split = $('#reverseId option:checked').text().split(" "); if ($('#operationType').val() === '1') { - if (parseFloat(value) > currentBalance) { - return '请输入正确冲销或新增金额,冲销金额不能大于当前余额' + currentBalance; + if (parseFloat(value) > parseFloat(split[0])) { + return '请输入正确冲销或新增金额,冲销金额不能大于当前余额' + split[0]; } } }, @@ -149,6 +163,16 @@ function calculateNewBalance() { } function add(formData) { + var operationType = $('#operationType').val(); + if (operationType == 1) { + var reverseId = $('#reverseId').val(); + if (reverseId == null || reverseId == "") { + layer.msg('具体冲销项', {icon: 5}); + return; + }else{ + formData.field.reverseId = reverseId; + } + } //先保证未进行冲销或新增金额 formData.field.currentBalance = currentBalance; // 计算更新后的余额 diff --git a/src/main/resources/static/js/prepayment/proForm.js b/src/main/resources/static/js/prepayment/proForm.js index 0762c15..030a008 100644 --- a/src/main/resources/static/js/prepayment/proForm.js +++ b/src/main/resources/static/js/prepayment/proForm.js @@ -31,7 +31,7 @@ layui.use(['table', 'form', 'laydate'], function(){ // {field: 'operation', title: '操作', width: 220, align: 'center', fixed: 'right', rowspan: 2} { field: 'operation', title: '操作', width: 220, align: 'center', fixed: 'right', rowspan: 2, templet: function (d) { if (d.LAY_INDEX === 0) { - return `修改 删除`; + return `修改 删除`; } else { return `禁止操作`; } @@ -135,7 +135,7 @@ function addForm(){ localStorage.setItem("currentBalance", currentBalance); localStorage.setItem("prepaymentUserId", userId); localStorage.setItem("prepaymentUserName", userName); - openForm("","新增"); + openForm("","","新增"); } function updateForm() { @@ -152,8 +152,9 @@ function updateForm() { /** * 新增-修改功能 */ -function openForm(id,title){ +function openForm(id,reverseId,title){ localStorage.setItem("id",id); + localStorage.setItem("reverseId",reverseId); var index = layer.open({ title: [title, 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'], type: 2, @@ -163,8 +164,8 @@ function openForm(id,title){ }); } -function edit(id){ - openForm(id,"修改") +function edit(id,reverseId){ + openForm(id,reverseId,"修改") } function del(id) { diff --git a/src/main/resources/static/js/select.js b/src/main/resources/static/js/select.js index 6231d64..0a6bbf8 100644 --- a/src/main/resources/static/js/select.js +++ b/src/main/resources/static/js/select.js @@ -24,4 +24,34 @@ function getRole(form,roleId) { console.log("获取人员角色下拉列表出错:", err); } }); +} + + +function getNeedReverse(form,proId,id,reverseId) { + $("#reverseId").html(""); + $.ajax({ + type: 'post', + url: ctxPath + '/utilConnection/getNeedReverse', + data: { + proId:proId, + id:id + }, + async: false, + success: function (data) { + var html = ''; + for (var i = 0; i < data.length; i++) { + if (reverseId == data[i].key) { + html += ''; + } else { + html += ''; + } + } + $("#reverseId").html(html); + layui.form.render('select'); + //这里就是我们要渲染的地方了 + }, + error: function (err) { + console.log("获取冲销列表下拉列表出错:", err); + } + }); } \ No newline at end of file diff --git a/src/main/resources/static/pages/prepayment/addOperations.html b/src/main/resources/static/pages/prepayment/addOperations.html index ddcb03a..65e8024 100644 --- a/src/main/resources/static/pages/prepayment/addOperations.html +++ b/src/main/resources/static/pages/prepayment/addOperations.html @@ -119,6 +119,14 @@ +
+
具体冲销项:
+
+ +
+
+
冲销或新增金额:
@@ -187,6 +195,7 @@ +