From 11086496c9ff48986f18da0d2497fe032cbabc68 Mon Sep 17 00:00:00 2001 From: lSun <15893999301@qq.com> Date: Wed, 16 Apr 2025 17:10:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E7=A8=8B=E9=A2=84=E4=BB=98=E6=AC=BE?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bm/controller/PrepaymentController.java | 171 ++++++++++++++ .../boot/manager/ca/bm/dao/PrepaymentDao.java | 50 ++++ .../manager/ca/bm/entity/OperationsBean.java | 42 ++++ .../manager/ca/bm/entity/PrepaymentBean.java | 41 ++++ .../ca/bm/service/PrepaymentService.java | 89 +++++++ .../service/impl/PrepaymentServiceImpl.java | 113 +++++++++ .../resources/mappers/ca/PrepaymentMapper.xml | 210 +++++++++++++++++ src/main/resources/static/js/common.js | 7 + .../static/js/prepayment/addOperations.js | 184 +++++++++++++++ .../resources/static/js/prepayment/addPro.js | 108 +++++++++ .../resources/static/js/prepayment/proForm.js | 185 +++++++++++++++ .../resources/static/js/prepayment/proList.js | 165 +++++++++++++ .../pages/prepayment/addOperations.html | 193 +++++++++++++++ .../static/pages/prepayment/addPro.html | 102 ++++++++ .../static/pages/prepayment/proForm.html | 222 ++++++++++++++++++ .../static/pages/prepayment/proList.html | 94 ++++++++ 16 files changed, 1976 insertions(+) create mode 100644 src/main/java/com/bonus/boot/manager/ca/bm/controller/PrepaymentController.java create mode 100644 src/main/java/com/bonus/boot/manager/ca/bm/dao/PrepaymentDao.java create mode 100644 src/main/java/com/bonus/boot/manager/ca/bm/entity/OperationsBean.java create mode 100644 src/main/java/com/bonus/boot/manager/ca/bm/entity/PrepaymentBean.java create mode 100644 src/main/java/com/bonus/boot/manager/ca/bm/service/PrepaymentService.java create mode 100644 src/main/java/com/bonus/boot/manager/ca/bm/service/impl/PrepaymentServiceImpl.java create mode 100644 src/main/resources/mappers/ca/PrepaymentMapper.xml create mode 100644 src/main/resources/static/js/prepayment/addOperations.js create mode 100644 src/main/resources/static/js/prepayment/addPro.js create mode 100644 src/main/resources/static/js/prepayment/proForm.js create mode 100644 src/main/resources/static/js/prepayment/proList.js create mode 100644 src/main/resources/static/pages/prepayment/addOperations.html create mode 100644 src/main/resources/static/pages/prepayment/addPro.html create mode 100644 src/main/resources/static/pages/prepayment/proForm.html create mode 100644 src/main/resources/static/pages/prepayment/proList.html 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 new file mode 100644 index 0000000..73982c1 --- /dev/null +++ b/src/main/java/com/bonus/boot/manager/ca/bm/controller/PrepaymentController.java @@ -0,0 +1,171 @@ +package com.bonus.boot.manager.ca.bm.controller; + +import com.bonus.boot.manager.ca.bm.entity.GoodsInfoBean; +import com.bonus.boot.manager.ca.bm.entity.OperationsBean; +import com.bonus.boot.manager.ca.bm.entity.PrepaymentBean; +import com.bonus.boot.manager.ca.bm.service.PrepaymentService; +import com.bonus.boot.manager.manager.annotation.LogAnnotation; +import com.bonus.boot.manager.manager.entity.R; +import com.bonus.boot.manager.manager.model.SysUser; +import com.bonus.boot.manager.manager.table.PageTableRequest; +import com.bonus.boot.manager.manager.utils.AjaxRes; +import com.bonus.boot.manager.manager.utils.GlobalConst; +import com.bonus.boot.manager.manager.utils.UserUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * packageName com.bonus.boot.manager.ca.bm.controller + * + * @author lsun + * @version 1.0.0 + * @className ProController (此处以class为例) + * @date 2025/4/15 + */ + +@Api(tags = "工程预付款统计") +@RestController +@RequestMapping(value = "/prepayment") +public class PrepaymentController { + + @Resource(name = "PrepaymentService") + private PrepaymentService service; + + @PostMapping("/getList") + @ApiOperation(value = "查询") +// @PreAuthorize("hasAuthority('sys:prepayment:query')") + public R getList(PageTableRequest request) { + List list = service.getList(request.getParams(), request.getOffset(), request.getLimit()); + return list.size() > 0 ? R.okTable(list, list.size()):R.failTable("暂无数据"); + } + + @RequestMapping(value = "addPrepayment", method = RequestMethod.POST) + @ResponseBody + @ApiOperation(value = "工程预付款统计-新增") +// @PreAuthorize("hasAuthority('sys:payable:add')") + public AjaxRes addPrepayment(@RequestBody PrepaymentBean prepaymentBean) { + AjaxRes ar = new AjaxRes(); + int i = service.addPrepayment(prepaymentBean); + if(i>0){ + ar.setFailMsg(GlobalConst.SAVE_SUCCEED); + }else{ + ar.setFailMsg(GlobalConst.SAVE_FAIL); + } + return ar; + } + + @RequestMapping(value = "getListById", method = RequestMethod.POST) + @ResponseBody + @ApiOperation(value = "工程预付款统计-查询信息") + public AjaxRes getListById(String id){ + AjaxRes ar = new AjaxRes(); + PrepaymentBean bean = service.getListById(id); + bean.setUserId(UserUtil.getLoginUser().getId().toString()); + bean.setUserName(UserUtil.getLoginUser().getUsername()); + Map map = new HashMap<>(); + if(bean !=null){ + map.put("prepaymentBean",bean); + } + ar.setSucceed(map,GlobalConst.DATA_SUCCEED); + return ar; + } + + @RequestMapping(value = "updatePrepayment", method = RequestMethod.POST) + @ResponseBody + @ApiOperation(value = "工程预付款统计-修改") +// @PreAuthorize("hasAuthority('sys:payable:add')") + public AjaxRes updatePrepayment(@RequestBody PrepaymentBean bean) { + AjaxRes ar = new AjaxRes(); + int i = service.updatePrepayment(bean); + if(i>0){ + ar.setFailMsg(GlobalConst.SAVE_SUCCEED); + }else{ + ar.setFailMsg(GlobalConst.SAVE_FAIL); + } + return ar; + } + + @LogAnnotation + @DeleteMapping("/delPrepayment/{id}") + @ApiOperation(value = "工程预付款统计-删除") +// @PreAuthorize("hasAuthority('sys:goods:del')") + public void delPrepayment(@PathVariable Long id) { + service.delPrepayment(id); + } + + + @RequestMapping(value = "addOperations", method = RequestMethod.POST) + @ResponseBody + @ApiOperation(value = "工程预付款统计-数据更新-新增") +// @PreAuthorize("hasAuthority('sys:payable:add')") + public AjaxRes addOperations(@RequestBody OperationsBean bean) { + AjaxRes ar = new AjaxRes(); + 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); + } + return ar; + } + + @RequestMapping(value = "updateOperations", method = RequestMethod.POST) + @ResponseBody + @ApiOperation(value = "工程预付款统计-数据更新-修改") +// @PreAuthorize("hasAuthority('sys:payable:add')") + public AjaxRes updateOperations(@RequestBody OperationsBean bean) { + AjaxRes ar = new AjaxRes(); + 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); + } + return ar; + } + + @RequestMapping(value = "getOperationsById", method = RequestMethod.POST) + @ResponseBody + @ApiOperation(value = "工程预付款统计-数据更新-查询信息") + public AjaxRes getOperationsById(String id){ + AjaxRes ar = new AjaxRes(); + OperationsBean bean = service.getOperationsById(id); + Map map = new HashMap<>(); + if(bean !=null){ + map.put("operationsBean",bean); + } + ar.setSucceed(map,GlobalConst.DATA_SUCCEED); + return ar; + } + + @LogAnnotation + @DeleteMapping("/delOperations/{id}") + @ApiOperation(value = "工程预付款统计-数据更新-删除") +// @PreAuthorize("hasAuthority('sys:goods:del')") + public void delOperations(@PathVariable Long id) { + service.delOperations(id); + } + + + + + @PostMapping("/getOperationsList") + @ApiOperation(value = "数据更新-查询") +// @PreAuthorize("hasAuthority('sys:prepayment:query')") + public R getOperationsList(PageTableRequest request) { + List list = service.getOperationsList(request.getParams(), request.getOffset(), request.getLimit()); + return list.size() > 0 ? R.okTable(list, list.size()):R.failTable("暂无数据"); + } + +} 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 new file mode 100644 index 0000000..4a1a325 --- /dev/null +++ b/src/main/java/com/bonus/boot/manager/ca/bm/dao/PrepaymentDao.java @@ -0,0 +1,50 @@ +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 org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; + +/** + * packageName com.bonus.boot.manager.ca.bm.dao + * + * @author lsun + * @version 1.0.0 + * @className ProDao (此处以class为例) + * @date 2025/4/15 + */ +@Repository(value = "PrepaymentDao") +public interface PrepaymentDao { + + List getList(@Param("params") Map params, @Param("offset") Integer offset, @Param("limit") Integer limit); + + int addPrepayment(PrepaymentBean prepaymentBean); + + int addOperations(OperationsBean bean); + + void updatePrepaymentId(OperationsBean bean); + + PrepaymentBean getListById(String id); + + List getOperationsList(@Param("params") Map params, @Param("offset") Integer offset, @Param("limit") Integer limit); + + int updatePrepayment(PrepaymentBean bean); + + void delPrepayment(@Param("id")Long id, @Param("userId")String userId); + + int getMath(OperationsBean bean); + + int updateOperations(OperationsBean bean); + + void delOperations(@Param("id")Long id, @Param("userId")String userId); + + /** + * 查询工程预付款统计数据更新id + * @param id + * @return + */ + OperationsBean getOperationsById(String 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 new file mode 100644 index 0000000..a89d203 --- /dev/null +++ b/src/main/java/com/bonus/boot/manager/ca/bm/entity/OperationsBean.java @@ -0,0 +1,42 @@ +package com.bonus.boot.manager.ca.bm.entity; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author lsun + */ +@Data +public class OperationsBean { + private String id; + private String prepaymentId;//关联的预付款记录ID + private String month;//月份 + private String operationType;//1:冲销,2:新增 + + @JsonSerialize(using = ToStringSerializer.class) + private BigDecimal amount;//调整金额 + + private String executor;//经办人 + private String remarks;//备注 + private String nextMonth;//下月工作计划,月度冲销计划及措施 + + @JsonSerialize(using = ToStringSerializer.class) + private BigDecimal proposedAmount;//拟冲销金额或新增金额 + + private String handler;//负责人 + private String nextRemarks;//下月备注 + private String createdTime;//创建时间 + private String updatedTime;//更新时间 + private String keyword; //关键字 + + private String operator;//更新人 + + @JsonSerialize(using = ToStringSerializer.class) + private BigDecimal currentBalance;//当前余额 + + private String userId; //用户id + private String userName; //用户名 +} 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 new file mode 100644 index 0000000..17f09f4 --- /dev/null +++ b/src/main/java/com/bonus/boot/manager/ca/bm/entity/PrepaymentBean.java @@ -0,0 +1,41 @@ +package com.bonus.boot.manager.ca.bm.entity; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author lsun + */ +@Data +public class PrepaymentBean { + private String id; + private String projectCode;//承揽合同编码 + private String projectName;//承揽合同名称(工程名称) + private String businessUnit;//责任单位 + private String contactUnit;//往来单位 + private String type;//预付款类型 + + @JsonSerialize(using = ToStringSerializer.class) + private BigDecimal initialAmount;//初始金额 + + private String firstPaymentDate;//首次支付日期 + + @JsonSerialize(using = ToStringSerializer.class) + private BigDecimal currentBalance;//当前余额 + + private String remarks;//备注 + private String operator;//更新人 + private String createdTime;//创建时间 + private String updatedTime;//更新时间 + private String keyword; //关键字 + + private String agingMonths; //账龄(月) + private String state; //状态 + + private String userId; //用户id + private String userName; //用户名 + +} diff --git a/src/main/java/com/bonus/boot/manager/ca/bm/service/PrepaymentService.java b/src/main/java/com/bonus/boot/manager/ca/bm/service/PrepaymentService.java new file mode 100644 index 0000000..b807085 --- /dev/null +++ b/src/main/java/com/bonus/boot/manager/ca/bm/service/PrepaymentService.java @@ -0,0 +1,89 @@ +package com.bonus.boot.manager.ca.bm.service; + +import com.bonus.boot.manager.ca.bm.entity.OperationsBean; +import com.bonus.boot.manager.ca.bm.entity.PrepaymentBean; + +import java.util.List; +import java.util.Map; + +/** + * packageName com.bonus.boot.manager.ca.bm.service + * + * @author lsun + * @version 1.0.0 + * @className ProService (此处以class为例) + * @date 2025/4/15 + */ +public interface PrepaymentService { + /** + * 查询工程预付款统计 + * @param params + * @param offset + * @param limit + * @return + */ + List getList(Map params, Integer offset, Integer limit); + + /** + * 新增工程预付款统计 + * @param prepaymentBean + * @return + */ + int addPrepayment(PrepaymentBean prepaymentBean); + + /** + * 查询工程预付款统计id + * @param id + * @return + */ + PrepaymentBean getListById(String id); + + /** + * 修改工程预付款统计 + * @param bean + * @return + */ + int updatePrepayment(PrepaymentBean bean); + + /** + * 删除工程预付款统计 + * @param id + */ + void delPrepayment(Long id); + + /** + * 查询工程预付款统计数据更新 + * @param params + * @param offset + * @param limit + * @return + */ + List getOperationsList(Map params, Integer offset, Integer limit); + + /** + * 新增工程预付款统计数据更新 + * @param bean + * @return + */ + int addOperations(OperationsBean bean); + + /** + * 修改工程预付款统计数据更新 + * @param bean + * @return + */ + int updateOperations(OperationsBean bean); + + /** + * 删除工程预付款统计数据更新 + * @param id + */ + void delOperations(Long id); + + /** + * 查询工程预付款统计数据更新id + * @param id + * @return + */ + OperationsBean getOperationsById(String id); +} 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 new file mode 100644 index 0000000..853a44e --- /dev/null +++ b/src/main/java/com/bonus/boot/manager/ca/bm/service/impl/PrepaymentServiceImpl.java @@ -0,0 +1,113 @@ +package com.bonus.boot.manager.ca.bm.service.impl; + +import com.bonus.boot.manager.ca.bm.dao.PrepaymentDao; +import com.bonus.boot.manager.ca.bm.entity.OperationsBean; +import com.bonus.boot.manager.ca.bm.entity.PrepaymentBean; +import com.bonus.boot.manager.ca.bm.service.PrepaymentService; +import com.bonus.boot.manager.ca.im.dao.PayableDao; +import com.bonus.boot.manager.manager.entity.LoginUser; +import com.bonus.boot.manager.manager.utils.UserUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * packageName com.bonus.boot.manager.ca.bm.service.impl + * + * @author lsun + * @version 1.0.0 + * @className ProServiceImpl (此处以class为例) + * @date 2025/4/15 + */ +@Service(value = "PrepaymentService") +public class PrepaymentServiceImpl implements PrepaymentService { + + @Resource(name = "PrepaymentDao") + private PrepaymentDao dao; + + @Override + public List getList(Map params, Integer offset, Integer limit) { + return dao.getList(params,offset,limit); + } + + @Override + public int addPrepayment(PrepaymentBean prepaymentBean) { + prepaymentBean.setOperator(UserUtil.getLoginUser().getId().toString()); + int i = dao.addPrepayment(prepaymentBean); + return i; + } + + @Override + 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; + } + } + return i; + } + + @Override + public PrepaymentBean getListById(String id) { + return dao.getListById(id); + } + + @Override + public List getOperationsList(Map params, Integer offset, Integer limit) { + return dao.getOperationsList(params,offset,limit); + } + + @Override + public int updatePrepayment(PrepaymentBean bean) { + bean.setOperator(UserUtil.getLoginUser().getId().toString()); + return dao.updatePrepayment(bean); + } + + @Override + public void delPrepayment(Long id) { + String userId =UserUtil.getLoginUser().getId().toString(); + dao.delPrepayment(id,userId); + } + + @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; + } + + @Override + public void delOperations(Long id) { + String userId =UserUtil.getLoginUser().getId().toString(); + dao.delOperations(id,userId); + } + + /** + * 查询工程预付款统计数据更新id + * @param id + * @return + */ + @Override + public OperationsBean getOperationsById(String id) { + return dao.getOperationsById(id); + } +} diff --git a/src/main/resources/mappers/ca/PrepaymentMapper.xml b/src/main/resources/mappers/ca/PrepaymentMapper.xml new file mode 100644 index 0000000..4713e41 --- /dev/null +++ b/src/main/resources/mappers/ca/PrepaymentMapper.xml @@ -0,0 +1,210 @@ + + + + + + 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`) + VALUES (#{projectCode},#{projectName},#{businessUnit},#{contactUnit},#{type}, + #{initialAmount},#{firstPaymentDate},#{initialAmount},#{remarks},#{operator},'1') + + + + INSERT INTO `bm_monthly_operations` ( `p_id`, `month`, `operation_type`, `amount`, `executor`, `remarks`, + `next_month`, `proposed_amount`, `handler`, `next_remarks`,`is_active`,`operator` ) + VALUES + ( + #{prepaymentId}, + #{month}, + #{operationType}, + #{amount}, + #{executor}, + #{remarks}, + #{nextMonth}, + #{proposedAmount}, + #{handler}, + #{nextRemarks},'1',#{operator}) + + + UPDATE `bm_project_prepayment` SET `current_balance` = #{currentBalance}, `operator` = #{operator} WHERE `id` = #{prepaymentId} + + + UPDATE `bm_project_prepayment` SET `operator` = #{operator} + + ,project_code = #{projectCode} + + + ,project_name = #{projectName} + + + ,business_unit = #{businessUnit} + + + ,contact_unit = #{contactUnit} + + + ,type = #{type} + + + ,initial_amount = #{initialAmount} + + + ,first_payment_date = #{firstPaymentDate} + + + ,current_balance = #{currentBalance} + + + ,remarks = #{remarks} + + WHERE `id` = #{id} + + + UPDATE `bm_monthly_operations` SET `month` = #{month}, `operation_type` = #{operationType}, + `amount` = #{amount}, `executor` = #{executor},operator = #{operator}, + + ,remarks = #{remarks} + + + ,next_month = #{nextMonth} + + + ,proposed_amount = #{proposedAmount} + + + ,handler = #{handler} + + + ,next_remarks = #{nextRemarks} + + WHERE `id` = #{id} and is_active = '1' + + + + UPDATE `bm_project_prepayment` SET `is_active` = '0' , operator = #{userId} WHERE `id` = #{id} + + + + UPDATE `bm_monthly_operations` SET `is_active` = '0' , operator = #{userId} WHERE `id` = #{id} + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/common.js b/src/main/resources/static/js/common.js index 42dfc78..a75ae6e 100644 --- a/src/main/resources/static/js/common.js +++ b/src/main/resources/static/js/common.js @@ -31,4 +31,11 @@ function getUrlParam(key) { return param[1]; } } +} + +function getCurrentMonth() { + var now = new Date(); + var year = now.getFullYear(); + var month = now.getMonth() + 1; // 月份从 0 开始 + return year + '-' + (month < 10 ? '0' + month : month); } \ 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 new file mode 100644 index 0000000..3bdd379 --- /dev/null +++ b/src/main/resources/static/js/prepayment/addOperations.js @@ -0,0 +1,184 @@ +var id = localStorage.getItem("id"); +var prepaymentId = localStorage.getItem("prepaymentId"); +var currentBalance = localStorage.getItem("currentBalance"); + +var prepaymentUserId = localStorage.getItem("prepaymentUserId"); +var prepaymentUserName = localStorage.getItem("prepaymentUserName"); +let form; +layui.use(['table', 'layer', 'laydate', 'jquery', 'form'], function(){ + var layer = layui.layer; + form = layui.form; + laydate = layui.laydate; + + // 获取当前月份 + var currentDate = getCurrentMonth(); + // 渲染 + laydate.render({ + elem: '#month', + type: 'month', + format: 'yyyy-MM', + value: currentDate, + max: currentDate, + }); + $("#executor").val(prepaymentUserName); + $("#prepaymentUserId").val(prepaymentUserId); + $('.radio-button').on('click', function() { + $('.radio-button').removeClass('active'); + $(this).addClass('active'); + $('#operationType').val($(this).data('value')); + }); + + initData(); + form.render(); + // 自定义验证规则 + form.verify({ + // 金额验证:必须是数字且最多两位小数 + amount: function(value, item) { + if (value === '') { + return '请输入金额'; + } + + // 检查是否为数字且最多两位小数 + if (!/^[0-9]+(\.[0-9]{1,2})?$/.test(value)) { + return '金额必须为数字且最多保留两位小数'; + } + + // 如果是冲销,检查是否超过当前余额 + if ($('#operationType').val() === 'offset') { + if (parseFloat(value) > currentBalance) { + return '冲销金额不能大于当前余额' + currentBalance; + } + } + }, + + // 拟冲销金额验证:如果填写,必须是数字且最多两位小数 + proposedAmount: function(value, item) { + if (value === '') { + return; // 允许为空 + } + + // 检查是否为数字且最多两位小数 + if (!/^[0-9]+(\.[0-9]{1,2})?$/.test(value)) { + return '拟冲销金额必须为数字且最多保留两位小数'; + } + } + + }); + form.on('submit(formDemo)', function (data) { + add(data); + }); +}); + + + +function initData(){ + if(id != ""){ + $.ajax({ + type: 'POST', + async: false, // 默认异步true,false表示同步 + url: ctxPath + '/prepayment/getOperationsById',// 请求地址 + dataType: 'json', // 服务器返回数据类型 + data: {'id': id}, //获取提交的表单字段 + success: function (data) { + var resMsg = data.resMsg; + console.log("data",data); + if ("数据获取成功" === resMsg) { + let info = data.obj.operationsBean; + + $("#prepaymentUserId").val(info.userId); + $("#month").val(info.month); + + // 动态设置 operationType 的值 + let operationType = info.operationType; + $("#operationType").val(operationType); + + // 根据 operationType 设置对应的 radio-button 样式 + $(".radio-button").removeClass("active"); + $(`.radio-button[data-value="${operationType}"]`).addClass("active"); + + $("#amount").val(info.amount); + $("#executor").val(info.userName); + $("#remarks").val(info.remarks); + + $("#nextMonth").val(info.nextMonth); + $("#proposedAmount").val(info.proposedAmount); + $("#handler").val(info.handler); + $("#nextRemarks").val(info.nextRemarks); + } + }, + error: function (XMLHttpRequest, textStatus, e) { + // layer.close(loadingMsg); + layer.msg('数据请求发生异常,请稍后重试', {icon: 16, scrollbar: false}); + } + }); + } +} + +// 计算更新后的余额 +function calculateNewBalance() { + var amount = parseFloat($('#amount').val()) || 0; + var operationType = $('#operationType').val(); + if (operationType === '1') { + // 冲销是减少余额 + currentBalance = currentBalance - amount; + } else { + // 新增是增加余额 + currentBalance = currentBalance + amount; + } + return currentBalance.toFixed(2); +} + +function add(formData) { + // 计算更新后的余额 + var currentBalance = calculateNewBalance(); + // 添加更新后的余额到表单数据 + formData.field.currentBalance = currentBalance; + formData.field.prepaymentId = prepaymentId; + + formData.field.executor = $("#prepaymentUserId").val(); + console.log("formData",formData) + var tip = '保存'; + var formUrl = ctxPath + "/prepayment/addOperations"; + if (id != '') { + formUrl = ctxPath + "/prepayment/updateOperations"; + tip = '修改'; + } + formData.field.id = id; + + // 加载提示 + let addLoadingMsg = top.layer.msg('数据上传中,请稍候...', { + icon: 16, + scrollbar: false, + time: 0, + shade: [0.8, '#393D49'] + }); + console.log("formData",formData.field) + $.ajax({ + type: 'post', + async: false, // 默认异步true,false表示同步 + url: formUrl, // 请求地址 + contentType: "application/json; charset=utf-8", + dataType: 'json', // 服务器返回数据类型 + data: JSON.stringify(formData.field), //获取提交的表单字段 + success: function (data) { + if (data.resMsg === "保存成功") { + parent.layer.closeAll(); + top.layer.close(addLoadingMsg); //再执行关闭 + parent.layer.msg(tip + '成功', { icon: 1, time: 2000 }); + parent.table.reload('menuTable'); + } else { + top.layer.close(addLoadingMsg); //再执行关闭 + if(data.resMsg ==="当前月份已经存在"){ + parent.layer.msg(data.resMsg, {icon: 2, time: 2000}); + }else{ + parent.layer.msg(tip + '失败', {icon: 2, time: 2000}); + } + + } + }, + error: function (XMLHttpRequest, textStatus, e) { + layer.msg('数据请求发生异常,请稍后重试', {icon: 16, scrollbar: false}); + top.layer.close(addLoadingMsg); //再执行关闭 + } + }); +} \ No newline at end of file diff --git a/src/main/resources/static/js/prepayment/addPro.js b/src/main/resources/static/js/prepayment/addPro.js new file mode 100644 index 0000000..2c679ab --- /dev/null +++ b/src/main/resources/static/js/prepayment/addPro.js @@ -0,0 +1,108 @@ +var prepaymentId = localStorage.getItem("prepaymentId"); +let form; +layui.use(['table', 'layer', 'laydate', 'jquery', 'form'], function(){ + var layer = layui.layer; + form = layui.form; + laydate = layui.laydate; + // 渲染 + laydate.render({ + elem: '#firstPaymentDate' + }); + initData(); + form.render(); + // 自定义验证规则 + form.verify({ + je: [/(^$)|^[0-9]+(\.[0-9]{1,2})?$/,'请输入正确初始金额,小数点后二位'], + }); + form.on('submit(formDemo)', function (data) { + add(data); + }); +}); + + + +function initData(){ + if(prepaymentId != ""){ + $.ajax({ + type: 'POST', + async: false, // 默认异步true,false表示同步 + url: ctxPath + '/prepayment/getListById',// 请求地址 + dataType: 'json', // 服务器返回数据类型 + data: {'id': prepaymentId}, //获取提交的表单字段 + success: function (data) { + var resMsg = data.resMsg; + console.log("data",data); + if ("数据获取成功" === resMsg) { + let info = data.obj.prepaymentBean; + $("#id").val(info.id); + $("#projectCode").val(info.projectCode); + $("#projectName").val(info.projectName); + $("#businessUnit").val(info.businessUnit); + $("#contactUnit").val(info.contactUnit); + $("#type").val(info.type); + + + $("#initialAmount").val(info.initialAmount); + $("#initialAmount").prop("readonly", true).addClass("readonly-input"); + $("#firstPaymentDate").val(info.firstPaymentDate); + $("#firstPaymentDate").css("pointer-events", "none").addClass("readonly-input"); + $("#remarks").val(info.remarks); + + let button = document.getElementById("my-button"); + button.style.position = "absolute"; + button.style.top = "700px"; + } + }, + error: function (XMLHttpRequest, textStatus, e) { + // layer.close(loadingMsg); + layer.msg('数据请求发生异常,请稍后重试', {icon: 16, scrollbar: false}); + } + }); + } +} + +function add(formData) { + var tip = '保存'; + var formUrl = ctxPath + "/prepayment/addPrepayment"; + if (prepaymentId != '') { + formUrl = ctxPath + "/prepayment/updatePrepayment"; + tip = '修改'; + } + formData.field.id = prepaymentId; + // 加载提示 + let addLoadingMsg = top.layer.msg('数据上传中,请稍候...', { + icon: 16, + scrollbar: false, + time: 0, + shade: [0.8, '#393D49'] + }); + + $.ajax({ + type: 'post', + async: false, // 默认异步true,false表示同步 + url: formUrl, // 请求地址 + contentType: "application/json; charset=utf-8", + dataType: 'json', // 服务器返回数据类型 + data: JSON.stringify(formData.field), //获取提交的表单字段 + success: function (data) { + if (data.resMsg === "保存成功") { + parent.layer.closeAll(); + top.layer.close(addLoadingMsg); //再执行关闭 + parent.layer.msg(tip + '成功', { icon: 1, time: 2000 }); + parent.table.reload('menuTable-pro'); + if(prepaymentId != ''){ + localStorage.setItem("prepaymentId", prepaymentId); + parent.initData() + parent.parent.table.reload('menuTable-pro'); + } + } else { + top.layer.close(addLoadingMsg); //再执行关闭 + parent.layer.msg(tip + '失败', {icon: 2, time: 2000}); + } + }, + error: function (XMLHttpRequest, textStatus, e) { + layer.msg('数据请求发生异常,请稍后重试', {icon: 16, scrollbar: false}); + top.layer.close(addLoadingMsg); //再执行关闭 + } + }); +} \ No newline at end of file diff --git a/src/main/resources/static/js/prepayment/proForm.js b/src/main/resources/static/js/prepayment/proForm.js new file mode 100644 index 0000000..76d77dd --- /dev/null +++ b/src/main/resources/static/js/prepayment/proForm.js @@ -0,0 +1,185 @@ +var pers = checkPermission(); + +var example; +var table,form,laydate; +var layuiForm; +var prepaymentId = localStorage.getItem("prepaymentId"); +var userId,userName; +var currentBalance; +layui.use(['table', 'form', 'laydate'], function(){ + table = layui.table; + form = layui.form; + laydate = layui.laydate; + initData(); + table.render({ + elem: '#demo' + , url: ctxPath + '/prepayment/getOperationsList' //数据接口 + , method: 'post' //方式默认是get + , toolbar: true //开启工具栏,此处显示默认图标,可以自定义模板,详见文档 + , defaultToolbar: [] + , where: { + prepaymentId: prepaymentId + } //post请求必须加where ,post请求需要的参数 + , cellMinWidth: 80 + , cols: [ + [ + {field: 'number', width: 100, title: '序号', align: 'center', type: 'numbers', fixed: 'left', rowspan: 2}, + {field: 'month', title: '月份', width: 100, align: 'center', rowspan: 2}, + {title: '当月执行情况', align: 'center', colspan: 4}, + {title: '下月工作计划', align: 'center', colspan: 4}, + {field: 'updatedTime', title: '数据更新时间', width: 260, align: 'center', rowspan: 2}, + // {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 `修改 删除`; + } else { + return `禁止操作`; + } + }} + ], + [ + {field: '', title: '冲销或新增情况', width: 240, align: 'center', + templet: function (d) { + let operationType = d.operationType; + if (operationType == 1) { + return '冲销'; + } else if (operationType == 2) { + return '新增'; + } + } + }, + {field: 'amount', title: '冲销或新增金额', width: 240, align: 'center'}, + {field: 'executor', title: '经办人', width: 200, align: 'center'}, + {field: 'remarks', title: '备注', width: 280, align: 'center'}, + {field: 'nextMonth', title: '月度冲销计划及措施', width: 220, align: 'center'}, + {field: 'proposedAmount', title: '拟冲销金额', width: 140, align: 'center'}, + {field: 'handler', title: '责任人', width: 100, align: 'center'}, + {field: 'nextRemarks', title: '备注', width: 100, align: 'center'} + ] + ] + , id: 'menuTable' + , page: true //开启分页 + , loading: true //数据加载中。。。 + , limits: [10, 20, 50] //一页选择显示10,20或50条数据 + , limit: 10 //一页显示10条数据 + , response: { + statusCode: 200 //规定成功的状态码,默认:0 + } + , parseData: function (res) { //将原始数据解析成 table 组件所规定的数据,res为从url中get到的数据 + let result; + if (res.data !== '' && res.data != null && res.data !== "null") { + if (this.page.curr) { + result = res.data.slice(this.limit * (this.page.curr - 1), this.limit * this.page.curr); + } else { + result = res.data.slice(0, this.limit); + } + } + return { + "code": res.code, //解析接口状态 + "msg": res.msg, //解析提示文本 + "count": res.count, //解析数据长度 + "data": result, //解析数据列表 + }; + } + , scroll: { // Enable horizontal scrolling + x: true, + y: true + } + }); +}); + +function initData(){ + if(prepaymentId != ""){ + $.ajax({ + type: 'POST', + async: false, // 默认异步true,false表示同步 + url: ctxPath + '/prepayment/getListById',// 请求地址 + dataType: 'json', // 服务器返回数据类型 + data: {'id': prepaymentId}, //获取提交的表单字段 + success: function (data) { + var resMsg = data.resMsg; + console.log("data",data); + if ("数据获取成功" === resMsg) { + let info = data.obj.prepaymentBean; + document.getElementById('projectName').textContent = info.projectName; + document.getElementById('projectCode').textContent = info.projectCode; + if(info.state == "1"){ + document.getElementById('state').textContent ="未完成" + }else{ + document.getElementById('state').textContent ="已冲销" + } + document.getElementById('businessUnit').textContent = info.businessUnit; + document.getElementById('contactUnit').textContent = info.contactUnit; + document.getElementById('type').textContent = info.type; + document.getElementById('initialAmount').textContent = info.initialAmount; + document.getElementById('firstPaymentDate').textContent = info.firstPaymentDate; + + currentBalance = info.currentBalance; + userId = info.userId; + userName = info.userName; + document.getElementById('currentBalance').textContent = currentBalance; + document.getElementById('agingMonths').textContent = info.agingMonths; + document.getElementById('updatedTime').textContent = info.updatedTime; + } + }, + error: function (XMLHttpRequest, textStatus, e) { + // layer.close(loadingMsg); + layer.msg('数据请求发生异常,请稍后重试', {icon: 16, scrollbar: false}); + } + }); + } +} + +function addForm(){ + localStorage.setItem("prepaymentId", prepaymentId); + localStorage.setItem("currentBalance", currentBalance); + localStorage.setItem("prepaymentUserId", userId); + localStorage.setItem("prepaymentUserName", userName); + openForm("","新增"); +} + +function updateForm() { + localStorage.setItem("prepaymentId", prepaymentId); + var index = layer.open({ + title: ["修改", 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'], + type: 2, + content: "./addPro.html", + area: ["60%", "80%"], + maxmin: false, + }); +} + +/** + * 新增-修改功能 + */ +function openForm(id,title){ + localStorage.setItem("id",id); + var index = layer.open({ + title: [title, 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'], + type: 2, + content: "./addOperations.html", + area: ["60%","80%"], + maxmin: false, + }); +} + +function edit(id){ + openForm(id,"修改") +} + +function del(id) { + layer.confirm('确定要删除吗?', { + btn: ['确定', '取消'] + }, function () { + $.ajax({ + type: 'delete', + url: ctxPath + '/prepayment/delOperations/' + id, + success: function (data) { + table.reload('menuTable'); + layer.msg("删除成功"); + } + }); + + layer.close(1); + }); +} \ No newline at end of file diff --git a/src/main/resources/static/js/prepayment/proList.js b/src/main/resources/static/js/prepayment/proList.js new file mode 100644 index 0000000..e397f44 --- /dev/null +++ b/src/main/resources/static/js/prepayment/proList.js @@ -0,0 +1,165 @@ +var pers = checkPermission(); + +var example; +var form; +var layuiForm; +layui.use(['form', 'laydate', 'upload'], function () { + table = layui.table; + form = layui.form; //只有执行了这一步,部分表单元素才会自动修饰成功 + layuiForm = form; + form.render(); + form.verify({}); + + table.render({ + elem: '#demo' + , url: ctxPath + '/prepayment/getList' //数据接口 + , method: 'post' //方式默认是get + , toolbar: true //开启工具栏,此处显示默认图标,可以自定义模板,详见文档 + , defaultToolbar: [] + , where: { + keyword: $('#keyword').val(), + state: $('#state').val() + } //post请求必须加where ,post请求需要的参数 + , cellMinWidth: 80 + , cols: [[ //表头 + {field: 'number', width: 100, title: '序号', align: 'center', type: 'numbers'} + , {field: 'projectCode', width: 220, align: 'center', title: '承揽合同编码'} + , {field: 'projectName', width: 280, align: 'center', title: '承揽合同名称(工程名称)'} + , {field: 'businessUnit', width: 220, align: 'center', title: '责任单位'} + , {field: 'contactUnit', width: 220, align: 'center', title: '往来单位'} + , {field: 'type', width: 200, align: 'center', title: '预付款类型'} + , {field: 'initialAmount', width: 200, align: 'center', title: '初始金额'} + , {field: 'firstPaymentDate', width: 200, align: 'center', title: '首次支付日期'} + , {field: 'currentBalance', width: 200, align: 'center', title: '当前余额'} + , { + field: '', width: 200, align: 'center', title: '状态', + templet: function (d) { + let state = d.state; + if (state == 0) { + return '已冲销'; + } else if (state == 1) { + return '未完成'; + } + } + } + , {field: 'agingMonths', width: 200, align: 'center', title: '账龄(月)'} + , {field: 'remarks', width: 200, align: 'center', title: '备注'} + , {field: 'operator', width: 200, align: 'center', title: '更新人'} + , {field: 'updatedTime', width: 200, align: 'center', title: '更新时间'} + , {fixed: 'right', title: '操作', width: 150, align: 'center', toolbar: '#toolsBar'} + ]] + , id: 'menuTable-pro' + , page: true //开启分页 + , loading: true //数据加载中。。。 + , limits: [5, 10, 20] //一页选择显示3,5或10条数据 + , limit: 10 //一页显示5条数据 + , response: { + statusCode: 200 //规定成功的状态码,默认:0 + }, parseData: function (res) { //将原始数据解析成 table 组件所规定的数据,res为从url中get到的数据 + let result; + if (res.data !== '' && res.data != null && res.data !== "null") { + if (this.page.curr) { + result = res.data.slice(this.limit * (this.page.curr - 1), this.limit * this.page.curr); + } else { + result = res.data.slice(0, this.limit); + } + } + return { + "code": res.code, //解析接口状态 + "msg": res.msg, //解析提示文本 + "count": res.count, //解析数据长度 + "data": result, //解析数据列表 + }; + }, + toolbar: "#toolbar" + }); +}); + +function addForm() { + openForm("", "新增"); +} + + +/** + * 新增-修改功能 + */ +function openForm(id, title) { + localStorage.setItem("prepaymentId", ""); + var index = layer.open({ + title: [title, 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'], + type: 2, + content: "./addPro.html", + area: ["60%", "80%"], + maxmin: false, + }); +} + +/** + * 更新功能 + * @param id + */ +function openQuery(id, title) { + localStorage.setItem("prepaymentId", id); + var index = layer.open({ + title: [title, 'color:#3B70A1;background-color:#E8ECEB;font-size:20px'], + type: 2, + content: 'proForm.html', + area: ["95%", "90%"], + maxmin: false, + }); +} + +function del(id) { + layer.confirm('确定要删除吗?', { + btn: ['确定', '取消'] + }, function () { + $.ajax({ + type: 'delete', + url: ctxPath + '/prepayment/delPrepayment/' + id, + success: function (data) { + table.reload('menuTable-pro'); + layer.msg("删除成功"); + } + }); + + layer.close(1); + }); +} + +$("#searchBt").click(function () { + table.reload('menuTable-pro', { + url: ctxPath + '/prepayment/getList' + , method: 'post' //方式默认是get + , page: { + curr: 1 // 强制重置分页到第一页 + } + , where: { + keyword: $('#keyword').val(), + state: $('#state').val() + } //设定异步数据接口的额外参数 + }); +}); + +$("#exportBt").click(function () { + var token = localStorage.getItem("token"); + var loadingMsg = layer.msg('下载中,请稍候...', {icon: 16, scrollbar: false, time: 0}); + var url = ctxPath + "/supplierInfo/exp?state=" + $("#state").val().trim() + "&keyword=" + $("#keyword").val().trim() + "&token=" + token; + var xhr = new XMLHttpRequest(); + xhr.open("get", url, true); + xhr.responseType = "blob"; // 转换流 + xhr.onload = function () { + layer.close(loadingMsg); + if (this.status === 200) { + var blob = this.response; + var a = document.createElement("a"); + var url = window.URL.createObjectURL(blob); + a.href = url; + a.download = "供应商信息.xlsx"; // 文件名 + } else { + layer.msg('导出发生异常,请稍后重试', {icon: 16, scrollbar: false, time: 2000}); + } + a.click() + window.URL.revokeObjectURL(url) + }; + xhr.send(); +}); \ 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 new file mode 100644 index 0000000..ec2ff71 --- /dev/null +++ b/src/main/resources/static/pages/prepayment/addOperations.html @@ -0,0 +1,193 @@ + + + + + 工程预付款统计-数据更新-新增 + + + + + + + +
+ + +
+
执行月份
+
+
执行月份:
+
+ +
+
+
+ +
+
当月执行情况
+
+
冲销或新增情况:
+
+
冲销
+
新增
+ +
+
+ +
+
冲销或新增金额:
+
+ +
+
+ +
+
经办人:
+
+ +
+
+ +
+
备注:
+
+ +
+
+
+ +
+
下月工作计划
+
+
月度冲销计划及措施:
+
+ +
+
+ +
+
拟冲销金额:
+
+ +
+
+ +
+
责任人:
+
+ +
+
+ +
+
备注:
+
+ +
+
+
+ +
+
+ +
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/pages/prepayment/addPro.html b/src/main/resources/static/pages/prepayment/addPro.html new file mode 100644 index 0000000..5de2b02 --- /dev/null +++ b/src/main/resources/static/pages/prepayment/addPro.html @@ -0,0 +1,102 @@ + + + + + 工程预付款统计-新增 + + + + + + + +
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/pages/prepayment/proForm.html b/src/main/resources/static/pages/prepayment/proForm.html new file mode 100644 index 0000000..336d990 --- /dev/null +++ b/src/main/resources/static/pages/prepayment/proForm.html @@ -0,0 +1,222 @@ + + + + + + 工程预付款统计-数据更新-子页面 + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+ + + + +
+
+ +
+
+ 当前状态 + +
+
+ 责任单位: + +
+
+ 往来单位: + +
+
+ 预付款类型: + +
+
+ 初始金额: + +
+
+ 首次支付日期: + +
+
+ 当前余额: + +
+
+ 账龄(月): + +
+
+ 最后更新: + +
+
+
+
+ +
+
+ +
+
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/pages/prepayment/proList.html b/src/main/resources/static/pages/prepayment/proList.html new file mode 100644 index 0000000..749e893 --- /dev/null +++ b/src/main/resources/static/pages/prepayment/proList.html @@ -0,0 +1,94 @@ + + + + + 工程预付款统计-列表信息 + + + + + + + +
+
+
+
+ + + + +
+
+
+
+
+ +
+
+
+ +
+ + + +
+
+
+
+
+ +
+
+ +
+
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file