官方流程

This commit is contained in:
qimingjin 2022-02-20 21:15:18 +08:00
parent 74f2900647
commit a8a5052afb
21 changed files with 885 additions and 414 deletions

View File

@ -36,8 +36,12 @@ public class SysFnAccountController extends BaseController
@RequiresPermissions("system:account:view")
@GetMapping()
public String account()
public String account(ModelMap mmap)
{
SysFnAccount sysFnAccount=new SysFnAccount();
sysFnAccount.setIsDelete(0);
List<SysFnAccount> sysFnAccounts = sysFnAccountService.selectSysFnAccountList(sysFnAccount);
mmap.put("sysFnAccounts", sysFnAccounts);
return prefix + "/account";
}
@ -129,6 +133,19 @@ public class SysFnAccountController extends BaseController
return AjaxResult.success(sysFnAccountService.getSysFnAccountByNo(accountNo));
}
/**
* 跳转充值页面
* @param id
* @param mmap
* @return
*/
@GetMapping("/rechargeAccount/{id}")
public String toRechargeAccount(@PathVariable("id") Long id, ModelMap mmap)
{
SysFnAccount sysFnAccount = sysFnAccountService.selectSysFnAccountById(id);
mmap.put("sysFnAccount", sysFnAccount);
return prefix + "/rechargeAccount";
}
/**
* 账户充值
* @param rechargeAccountRequest

View File

@ -0,0 +1,126 @@
package com.snow.system.controller;
import java.util.List;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.snow.common.annotation.Log;
import com.snow.common.enums.BusinessType;
import org.springframework.stereotype.Controller;
import com.snow.system.domain.SysFnPayment;
import com.snow.system.service.ISysFnPaymentService;
import com.snow.common.core.controller.BaseController;
import com.snow.common.core.domain.AjaxResult;
import com.snow.common.utils.poi.ExcelUtil;
import com.snow.common.core.page.TableDataInfo;
/**
* 支付申请Controller
*
* @author Agee
* @date 2022-02-19
*/
@Controller
@RequestMapping("/system/payment")
public class SysFnPaymentController extends BaseController
{
private String prefix = "system/payment";
@Autowired
private ISysFnPaymentService sysFnPaymentService;
@RequiresPermissions("system:payment:view")
@GetMapping()
public String payment()
{
return prefix + "/payment";
}
/**
* 查询支付申请列表
*/
@RequiresPermissions("system:payment:list")
@PostMapping("/list")
@ResponseBody
public TableDataInfo list(SysFnPayment sysFnPayment)
{
startPage();
List<SysFnPayment> list = sysFnPaymentService.selectSysFnPaymentList(sysFnPayment);
return getDataTable(list);
}
/**
* 导出支付申请列表
*/
@RequiresPermissions("system:payment:export")
@Log(title = "支付申请", businessType = BusinessType.EXPORT)
@PostMapping("/export")
@ResponseBody
public AjaxResult export(SysFnPayment sysFnPayment)
{
List<SysFnPayment> list = sysFnPaymentService.selectSysFnPaymentList(sysFnPayment);
ExcelUtil<SysFnPayment> util = new ExcelUtil<SysFnPayment>(SysFnPayment.class);
return util.exportExcel(list, "payment");
}
/**
* 新增支付申请
*/
@GetMapping("/add")
public String add()
{
return prefix + "/add";
}
/**
* 新增保存支付申请
*/
@RequiresPermissions("system:payment:add")
@Log(title = "支付申请", businessType = BusinessType.INSERT)
@PostMapping("/add")
@ResponseBody
public AjaxResult addSave(SysFnPayment sysFnPayment)
{
return toAjax(sysFnPaymentService.insertSysFnPayment(sysFnPayment));
}
/**
* 修改支付申请
*/
@GetMapping("/edit/{id}")
public String edit(@PathVariable("id") Long id, ModelMap mmap)
{
SysFnPayment sysFnPayment = sysFnPaymentService.selectSysFnPaymentById(id);
mmap.put("sysFnPayment", sysFnPayment);
return prefix + "/edit";
}
/**
* 修改保存支付申请
*/
@RequiresPermissions("system:payment:edit")
@Log(title = "支付申请", businessType = BusinessType.UPDATE)
@PostMapping("/edit")
@ResponseBody
public AjaxResult editSave(SysFnPayment sysFnPayment)
{
return toAjax(sysFnPaymentService.updateSysFnPayment(sysFnPayment));
}
/**
* 删除支付申请
*/
@RequiresPermissions("system:payment:remove")
@Log(title = "支付申请", businessType = BusinessType.DELETE)
@PostMapping( "/remove")
@ResponseBody
public AjaxResult remove(String ids)
{
return toAjax(sysFnPaymentService.deleteSysFnPaymentByIds(ids));
}
}

View File

@ -11,6 +11,7 @@ import com.google.common.collect.Lists;
import com.snow.common.annotation.RepeatSubmit;
import com.snow.common.constant.SequenceConstants;
import com.snow.common.utils.poi.EasyExcelUtil;
import com.snow.flowable.domain.purchaseOrder.PurchaseCashierTask;
import com.snow.flowable.domain.purchaseOrder.PurchaseOrderForm;
import com.snow.flowable.domain.purchaseOrder.PurchaseOrderMainTask;
import com.snow.flowable.service.FlowableService;
@ -270,4 +271,23 @@ public class PurchaseOrderController extends BaseController
return toAjax(i);
}
/**
* 出纳审核
*/
@PostMapping("/cashierTask")
@ResponseBody
@Transactional
@RepeatSubmit
public AjaxResult cashierTask(PurchaseCashierTask purchaseCashierTask)
{
SysUser sysUser = ShiroUtils.getSysUser();
//完成任务
purchaseCashierTask.setUserId(String.valueOf(sysUser.getUserId()));
purchaseCashierTask.setIsUpdateBus(true);
purchaseCashierTask.setIsStart(purchaseCashierTask.getIsPass());
flowableTaskService.submitTask(purchaseCashierTask);
return AjaxResult.success();
}
}

View File

@ -7680,3 +7680,31 @@ body.landing-page {
z-index: 9998;
margin: 0;
}
/* Payments */
.payment-card {
background: #ffffff;
padding: 40px;
margin-bottom: 25px;
border: 1px solid #e7eaec;
}
.payment-icon-big {
font-size: 60px;
color: #f8ac59;
}
.payments-method.panel-group .panel + .panel {
margin-top: -1px;
}
.payments-method .panel-heading {
padding: 15px;
}
.payments-method .panel {
border-radius: 0;
}
.payments-method .panel-heading h5 {
margin-bottom: 5px;
}
.payments-method .panel-heading i {
font-size: 26px;
}

View File

@ -3279,4 +3279,3 @@ ul#strength > li:last-child {
.noHeight {
height:auto;
}

View File

@ -3,241 +3,70 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>INSPINIA | E-commerce</title>
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet">
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet">
<link th:href="@{/css/animate.css}" rel="stylesheet">
<link th:href="@{/css/style.css}" rel="stylesheet">
<link th:href="@{/css/toastr/toastr.min.css}" rel="stylesheet"/>
<th:block th:include="include :: header('账户列表')" />
</head>
<body>
<div id="wrapper">
<div id="page-wrapper" class="gray-bg">
<body class="gray-bg">
<div class="container-div">
<div class="wrapper wrapper-content animated fadeInRight">
<div class="row">
<div class="col-md-4">
<div class="row" th:each="accounts,iterStat : ${sysFnAccounts}">
<div class="col-md-5 col-lg-offset-3">
<div class="payment-card">
<i class="fa fa-cc-visa payment-icon-big text-success"></i>
<h2>
**** **** **** 1060
</h2>
<h1 class="text-info text-center">
[[${accounts.accountName}]]
</h1>
<div class="row">
<div class="col-sm-4">
<i class="fa fa-credit-card payment-icon-big text-warning" >
</i>
</div>
<div class="col-sm-8 text-right">
<span class="text-danger" style="font-size: 40px;font-family: Dialog">¥[[${accounts.totalAmount}]]</span>
</div>
</div>
<div class="row">
<div class="col-sm-8">
<h1 >
<strong>账户号</strong> <span class="text-success">[[${accounts.accountNo}]]</span>
</h1>
</div>
<div class="col-sm-4 text-right">
<h1 class="btn btn-success" th:onclick="rechargeAccount([[${accounts.id}]]);" shiro:hasPermission="system:account:rechargeAccount">
<i class="fa fa-cny"></i> 充值
</h1>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<small>
<strong>Expiry date:</strong> 10/16
<!-- <strong>账户名称:</strong> [[${accounts.accountName}]]-->
</small>
</div>
<div class="col-sm-6 text-right">
<small>
<strong>Name:</strong> David Williams
<small th:text="${#dates.format(accounts.createTime, 'yyyy-MM-dd')}"></small>
</small>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="payment-card">
<i class="fa fa-cc-mastercard payment-icon-big text-warning"></i>
<h2>
**** **** **** 7002
</h2>
<div class="row">
<div class="col-sm-6">
<small>
<strong>Expiry date:</strong> 10/16
</small>
</div>
<div class="col-sm-6 text-right">
<small>
<strong>Name:</strong> Anna Smith
</small>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="payment-card">
<i class="fa fa-cc-discover payment-icon-big text-danger"></i>
<h2>
**** **** **** 3466
</h2>
<div class="row">
<div class="col-sm-6">
<small>
<strong>Expiry date:</strong> 10/16
</small>
</div>
<div class="col-sm-6 text-right">
<small>
<strong>Name:</strong> Morgan Stanch
</small>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="ibox">
<div class="ibox-title">
Payment method
</div>
<div class="ibox-content">
<div class="panel-group payments-method" id="accordion">
<div class="panel panel-default">
<div class="panel-heading">
<div class="float-right">
<i class="fa fa-cc-paypal text-success"></i>
</div>
<h5 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">PayPal</a>
</h5>
</div>
<div id="collapseOne" class="panel-collapse collapse">
<div class="panel-body">
<div class="row">
<div class="col-md-10">
<h2>Summary</h2>
<strong>Product:</strong>: Name of product <br/>
<strong>Price:</strong>: <span class="text-navy">$452.90</span>
<p class="m-t">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</p>
<a class="btn btn-success" href="">
<i class="fa fa-cc-paypal"> </i> Purchase via PayPal
</a>
</div>
</div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<div class="float-right">
<i class="fa fa-cc-amex text-success"></i>
<i class="fa fa-cc-mastercard text-warning"></i>
<i class="fa fa-cc-discover text-danger"></i>
</div>
<h5 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">Credit Card</a>
</h5>
</div>
<div id="collapseTwo" class="panel-collapse collapse in">
<div class="panel-body">
<div class="row">
<div class="col-md-4">
<h2>Summary</h2>
<strong>Product:</strong>: Name of product <br/>
<strong>Price:</strong>: <span class="text-navy">$452.90</span>
<p class="m-t">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
</p>
<p>
Duis aute irure dolor
in reprehenderit in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat cupidatat.
</p>
</div>
<div class="col-md-8">
<form role="form" id="payment-form">
<div class="row">
<div class="col-12">
<div class="form-group">
<label>CARD NUMBER</label>
<div class="input-group">
<input type="text" class="form-control" name="Number" placeholder="Valid Card Number" required />
<span class="input-group-addon"><i class="fa fa-credit-card"></i></span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-7 col-md-7">
<div class="form-group">
<label>EXPIRATION DATE</label>
<input type="text" class="form-control" name="Expiry" placeholder="MM / YY" required/>
</div>
</div>
<div class="col-5 col-md-5 float-right">
<div class="form-group">
<label>CV CODE</label>
<input type="text" class="form-control" name="CVC" placeholder="CVC" required/>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="form-group">
<label>NAME OF CARD</label>
<input type="text" class="form-control" name="nameCard" placeholder="NAME AND SURNAME"/>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<button class="btn btn-primary" type="submit">Make a payment!</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="system:account:add">
<i class="fa fa-plus"></i> 添加
</a>
<a class="btn btn-primary single disabled" onclick="$.operate.edit()" shiro:hasPermission="system:account:edit">
<i class="fa fa-edit"></i> 修改
</a>
<a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="system:account:remove">
<i class="fa fa-remove"></i> 删除
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
@ -246,5 +75,61 @@
<!-- Mainly scripts -->
<th:block th:include="include :: footer" />
</body>
<script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('system:account:edit')}]];
var removeFlag = [[${@permission.hasPermi('system:account:remove')}]];
var prefix = ctx + "system/account";
$(function() {
var options = {
url: prefix + "/list",
createUrl: prefix + "/add",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove",
exportUrl: prefix + "/export",
modalName: "账户",
columns: [{
checkbox: true
},
{
field: 'id',
title: '主键id',
visible: false
},
{
field: 'accountNo',
title: '账户号'
},
{
field: 'accountName',
title: '账户名称'
},
{
field: 'totalAmount',
title: '账户总金额'
},
{
field: 'freezeAmount',
title: '账户冻结金额'
},
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]
};
$.table.init(options);
});
function rechargeAccount(id) {
var url = prefix + '/rechargeAccount/'+id;
$.modal.open("账户充值", url);
}
</script>
</html>

View File

@ -1,167 +0,0 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<th:block th:include="include :: header('账户列表')" />
<link th:href="@{/css/toastr/toastr.min.css}" rel="stylesheet"/>
</head>
<body >
<div class="container-div" id="wrapper">
<div class="row">
<div class="col-sm-12 search-collapse wrapper wrapper-content animated fadeInRight">
<div class="col-md-4">
<div class="payment-card">
<i class="fa fa-cc-visa payment-icon-big text-success"></i>
<h2>
**** **** **** 1060
</h2>
<div class="row">
<div class="col-sm-6">
<small>
<strong>到期日:</strong> 10/16
</small>
</div>
<div class="col-sm-6 text-right">
<small>
<strong>姓名:</strong> 小明
</small>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="payment-card">
<i class="fa fa-cc-mastercard payment-icon-big text-warning"></i>
<h2>
**** **** **** 7002
</h2>
<div class="row">
<div class="col-sm-6">
<small>
<strong>到期日:</strong> 10/16
</small>
</div>
<div class="col-sm-6 text-right">
<small>
<strong>姓名:</strong> 小明
</small>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="payment-card">
<i class="fa fa-cc-discover payment-icon-big text-danger"></i>
<h2>
**** **** **** 3466
</h2>
<div class="row">
<div class="col-sm-6">
<small>
<strong>到期日:</strong> 10/16
</small>
</div>
<div class="col-sm-6 text-right">
<small>
<strong>姓名:</strong> 小明
</small>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-12 search-collapse">
<form id="formId">
<div class="select-list">
<ul>
<li>
<label>账户号:</label>
<input type="text" name="accountNo"/>
</li>
<li>
<label>账户名称:</label>
<input type="text" name="accountName"/>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="system:account:add">
<i class="fa fa-plus"></i> 添加
</a>
<a class="btn btn-primary single disabled" onclick="$.operate.edit()" shiro:hasPermission="system:account:edit">
<i class="fa fa-edit"></i> 修改
</a>
<a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="system:account:remove">
<i class="fa fa-remove"></i> 删除
</a>
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="system:account:export">
<i class="fa fa-download"></i> 导出
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('system:account:edit')}]];
var removeFlag = [[${@permission.hasPermi('system:account:remove')}]];
var prefix = ctx + "system/account";
$(function() {
var options = {
url: prefix + "/list",
createUrl: prefix + "/add",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove",
exportUrl: prefix + "/export",
modalName: "账户",
columns: [{
checkbox: true
},
{
field: 'id',
title: '主键id',
visible: false
},
{
field: 'accountNo',
title: '账户号'
},
{
field: 'accountName',
title: '账户名称'
},
{
field: 'totalAmount',
title: '账户总金额'
},
{
field: 'freezeAmount',
title: '账户冻结金额'
},
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
}]
};
$.table.init(options);
});
</script>
</body>
</html>

View File

@ -12,18 +12,6 @@
<input name="accountName" class="form-control" type="text" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">账户总金额:</label>
<div class="col-sm-8">
<input name="totalAmount" class="form-control" type="number" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">账户冻结金额:</label>
<div class="col-sm-8">
<input name="freezeAmount" class="form-control" type="number" required>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />

View File

@ -10,7 +10,7 @@
<div class="form-group">
<label class="col-sm-3 control-label is-required">账户号:</label>
<div class="col-sm-8">
<input name="accountNo" th:field="*{accountNo}" class="form-control" type="text" required>
<input name="accountNo" th:field="*{accountNo}" class="form-control" type="text" disabled required>
</div>
</div>
<div class="form-group">
@ -19,7 +19,7 @@
<input name="accountName" th:field="*{accountName}" class="form-control" type="text" required>
</div>
</div>
<div class="form-group">
<!-- <div class="form-group">
<label class="col-sm-3 control-label is-required">账户总金额:</label>
<div class="col-sm-8">
<input name="totalAmount" th:field="*{totalAmount}" class="form-control" type="text" required>
@ -30,7 +30,7 @@
<div class="col-sm-8">
<input name="freezeAmount" th:field="*{freezeAmount}" class="form-control" type="text" required>
</div>
</div>
</div>-->
</form>
</div>
<th:block th:include="include :: footer" />

View File

@ -0,0 +1,91 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('修改账户')" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight">
<form class="form-horizontal m" id="form-account-edit" th:object="${sysFnAccount}">
<input name="id" th:field="*{id}" type="hidden">
<div class="row">
<div class="col-lg-12">
<div class="ibox-content">
<div class="panel-group payments-method" id="accordion">
<div class="panel panel-default">
<div class="panel-heading">
<div class="float-right">
<i class="fa fa-credit-card text-danger"></i>
<i class="fa fa-credit-card-alt text-warning"></i>
</div>
<h5 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">[[${sysFnAccount.accountNo}]]</a>
</h5>
</div>
<div id="collapseTwo" class="panel-collapse collapse in">
<div class="panel-body">
<div class="row">
<div class="col-md-4">
<h2>[[${sysFnAccount.accountName}]]</h2>
<strong>总金额:</strong>: <span class="text-navy">¥[[${sysFnAccount.totalAmount}]]</span><br/>
<strong>冻结金额:</strong>: <span class="text-navy">¥[[${sysFnAccount.freezeAmount}]]</span>
<p class="m-t">
1DingFlow为您提供在线充值充值方式充值为虚拟账户充值充值成功后请及时核对账务流水
</p>
<p>
2每个公司可创建多个账户进行公司账务管理,DingFlow建议您只使用一个账户多账户后续功能完善中
</p>
<p>
3账户只做账务管理并未发生实际交易金额请提前须知;
</p>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label ">账户帐号:</label>
<div class="col-sm-8 input-group">
<input name="accountNo" th:field="*{accountNo}" class="form-control" type="text" readonly>
<span class="input-group-addon"><i class="fa fa-credit-card"></i></span>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label ">账户名称:</label>
<div class="col-sm-8 input-group">
<input name="accountName" th:field="*{accountName}" class="form-control" type="text" readonly>
<span class="input-group-addon"><i class="fa fa-address-book"></i></span>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required">充值金额:</label>
<div class="col-sm-8 input-group">
<input name="rechargeAmount" class="form-control" type="number" required>
<span class="input-group-addon"><i class="fa fa-cny"></i></span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<input name="id" th:field="*{id}" type="hidden">
</form>
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var prefix = ctx + "system/account";
$("#form-account-edit").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/rechargeAccount", $('#form-account-edit').serialize());
}
}
</script>
</body>
</html>

View File

@ -11,7 +11,7 @@
<div class="select-list">
<ul>
<li>
<label>账户流水号:</label>
<label>流水号:</label>
<input type="text" name="billNo"/>
</li>
<li>
@ -78,7 +78,7 @@
},
{
field: 'billNo',
title: '账户流水号'
title: '流水号'
},
{
field: 'accountNo',
@ -96,7 +96,7 @@
title: '流水金额'
},
{
field: 'remark',
field: 'billRemark',
title: '备注'
},
{

View File

@ -0,0 +1,203 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet" />
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet" />
<!-- bootstrap-table 表格插件样式 -->
<link th:href="@{/ajax/libs/bootstrap-table/bootstrap-table.min.css}" rel="stylesheet"/>
<link th:href="@{/css/animate.css}" rel="stylesheet" />
<link th:href="@{/css/style.css}" rel="stylesheet" />
<link th:href="@{/ruoyi/css/ry-ui.css}" rel="stylesheet" />
<th:block th:include="include :: bootstrap-fileinput-css"/>
</head>
<body class="white-bg" >
<form class="form-horizontal m-t" id="signupForm">
<input class="form-control" type="hidden" name="taskId" th:value="*{taskId}"/>
<input class="form-control" type="hidden" id="processInstanceId" name="processInstanceId" th:value="*{processInstanceId}"/>
<input class="form-control" type="hidden" name="businessKey" th:value="${appFrom.orderNo}"/>
<input name="id" th:value="${appFrom.id}" type="hidden">
<br/>
<h2 class="form-header h2" >采购单信息</h2>
<div class="row">
<div class="col-xs-4 col-sm-5 col-md-offset-1">
<label>单号:</label>
<span th:text="${appFrom.orderNo}"/>
</div>
<div class="col-xs-3 col-sm-3">
<label>采购标题:</label>
<span th:text="${appFrom.title}"/>
</div>
</div>
<div class="row">
<div class="col-xs-3 col-sm-4 col-md-offset-1">
<label>供应商:</label>
<span th:text="${appFrom.supplierName}"/>
</div>
<div class="col-xs-3 col-sm-3">
<label >订货日期:</label>
<span th:text="${#dates.format(appFrom.orderTime, 'yyyy-MM-dd')}"/>
</div>
<div class="col-xs-3 col-sm-3">
<label>交货日期:</label>
<span th:text="${#dates.format(appFrom.deliveryDate, 'yyyy-MM-dd')}"/>
</div>
</div>
<div class="row">
<div class="col-xs-3 col-sm-4 col-md-offset-1">
<label >采购人:</label>
<span th:text="${appFrom.belongUser}"/>
</div>
<div class="col-xs-3 col-sm-3">
<label >总数量:</label>
<span th:text="${appFrom.totalQuantity}"/>
</div>
<div class="col-xs-3 col-sm-3">
<label >总金额:</label>
<span th:text="${appFrom.totalPrice}"/>
</div>
</div>
<div class="row">
<div class="col-xs-10 col-sm-10 col-md-offset-1">
<label>备注:</label>
<span th:text="${appFrom.remark}"/>
</div>
</div>
<h4 class="form-header h4">采购单明细</h4>
<div class="row">
<div class="col-sm-12">
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<br/>
<h4 class="form-header h4">付款单信息</h4>
<div class="form-group">
<label class="col-sm-3 control-label">付款标题:</label>
<div class="col-sm-8">
<input name="paymentTitle" class="form-control" type="text" th:value="${appFrom.title}+'【付款单】'" required/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">付款金额:</label>
<div class="col-sm-8">
<input name="paymentPrice" class="form-control" type="number" th:value="${appFrom.totalPrice}" required/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">付款说明:</label>
<div class="col-sm-8">
<textarea name="paymentRemark" class="form-control" required></textarea>
</div>
</div>
<br/>
<th:block th:include="include :: approvalpage" />
</form>
<th:block th:include="include :: footer" />
<th:block th:include="include :: bootstrap-fileinput-js"/>
<script th:inline="javascript">
$(function () {
var processInstanceId= $("#processInstanceId").val();
var url ="/modeler/getProcessDiagram?processInstanceId="+processInstanceId;
$(".imgcode").attr("src", url);
});
var files=new Array();
$(".file-upload").each(function (i) {
var val = $("input[name='" + this.id + "']").val();
$(this).fileinput({
'uploadUrl': '/common/upload',
initialPreviewAsData: true,
allowedFileExtensions: ['jpg', 'gif', 'png',".docx","doc","ppt","pptx","xls","xlsx","vsd","rtf","wps","pdf","txt","zip"],//接收的文件后缀
initialPreview: [val],
maxFileCount: 1,
autoReplace: true
}).on('fileuploaded', function (event, data, previewId, index) {
files.push({"key": data.response.fileKey,"name": data.response.fileName, "url":data.response.url});
}).on('fileremoved', function (event, id, index) {
$("input[name='" + event.currentTarget.id + "']").val('')
})
$(this).fileinput('_initFileActions');
});
<!--提交审核结果-->
function submitCheckHandler() {
if ($.validate.form()) {
var data = $("#signupForm").serializeArray();
for(var i=0;i<data.length;i++){
if(data[i].name=='comment'&&(data[i].value==''||data[i].value==null)){
$.modal.alertError("请填写审批意见");
return false;
}
}
if(files!=null||files!=''){
for(var i=0;i<files.length;i++){
data.push({"name": "files["+i+"].key", "value":files[i].key});
data.push({"name": "files["+i+"].name", "value":files[i].name});
data.push({"name": "files["+i+"].url", "value":files[i].url});
}
}
console.log(data);
$.operate.saveTab("/system/purchaseOrder/cashierTask", data);
}
}
$(function() {
var options = {
data: [[${appFrom.purchaseOrderItemList}]],
pagination: false,
showSearch: false,
showRefresh: false,
showToggle: false,
showColumns: false,
sidePagination: "client",
columns: [
{
field: 'index',
align: 'center',
title: "序号",
formatter: function (value, row, index) {
var columnIndex = $.common.sprintf("<input type='hidden' name='index' value='%s'>", $.table.serialNumber(index));
return columnIndex + $.table.serialNumber(index);
}
},
{
field: 'goodsNo',
align: 'center',
title: '货物编号'
},
{
field: 'goodsName',
align: 'center',
title: '名称'
},
{
field: 'goodsSize',
align: 'center',
title: '规格'
},
{
field: 'goodsQuantity',
align: 'center',
title: '数量'
},
{
field: 'goodsPrice',
align: 'center',
title: '单价'
},
{
field: 'totalPrice',
align: 'center',
title: '总价'
},
{
field: 'remark',
align: 'center',
title: '备注'
}]
};
$.table.init(options);
});
</script>
</body>
</html>

View File

@ -66,4 +66,9 @@ public class SequenceConstants {
* 账户流水单
*/
public static final String FN_ACCOUNT_BILL_NO="FN_LS";
/**
* 支付单号
*/
public static final String FN_PAYMENT_NO="FN_ZF";
}

View File

@ -0,0 +1,29 @@
package com.snow.flowable.domain.purchaseOrder;
import com.snow.flowable.domain.FinishTaskDTO;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class PurchaseCashierTask extends FinishTaskDTO implements Serializable {
private static final long serialVersionUID = 8984271252520753970L;
/**
* 支付金额
*/
private BigDecimal paymentPrice;
/** 支付标题 */
private String paymentTitle;
/**
* 备注
*/
private String paymentRemark;
}

View File

@ -1,7 +1,10 @@
package com.snow.flowable.listener;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import com.snow.flowable.common.constants.FlowConstants;
import com.snow.flowable.domain.CompleteTaskDTO;
import com.snow.flowable.domain.FinishTaskDTO;
import com.snow.flowable.service.FlowableService;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.TaskListener;
@ -9,6 +12,8 @@ import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.service.delegate.DelegateTask;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Map;
/**
* @author qimingjin
* @Title:
@ -16,7 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
* @date 2020/12/7 16:39
*/
@Slf4j
public abstract class AbstractTaskListener<T extends CompleteTaskDTO> implements TaskListener {
public abstract class AbstractTaskListener<T extends FinishTaskDTO> implements TaskListener {
@Autowired
private FlowableService flowableService;
@ -128,4 +133,8 @@ public abstract class AbstractTaskListener<T extends CompleteTaskDTO> implements
protected String getTaskName() {
return getDelegateTask().getName();
}
protected Map<String, Object> getTaskLocalParms(){
return getDelegateTask().getVariablesLocal();
}
}

View File

@ -0,0 +1,48 @@
package com.snow.flowable.listener.purchaseOrder;
import cn.hutool.core.bean.BeanUtil;
import com.snow.flowable.domain.purchaseOrder.PurchaseCashierTask;
import com.snow.flowable.domain.purchaseOrder.PurchaseOrderForm;
import com.snow.flowable.listener.AbstractTaskListener;
import com.snow.flowable.service.AppFormService;
import com.snow.system.domain.SysFnPayment;
import com.snow.system.service.impl.SysFnPaymentServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.flowable.task.service.delegate.DelegateTask;
import org.springframework.stereotype.Service;
/**
* 出纳制单节点
*/
@Service("purchaseCashierTask")
@Slf4j
@RequiredArgsConstructor
public class PurchaseCashierTaskListener extends AbstractTaskListener<PurchaseCashierTask> {
private static final long serialVersionUID = -2370764741837973836L;
private final SysFnPaymentServiceImpl sysFnPaymentService;
private final AppFormService appFormService;
@Override
protected void processTask() {
DelegateTask delegateTask = getDelegateTask();
PurchaseOrderForm appForms=appFormService.getAppFromByExecutionId(delegateTask.getExecutionId());
PurchaseCashierTask purchaseCashierTask = new PurchaseCashierTask();
purchaseCashierTask= BeanUtil.fillBeanWithMap(getTaskLocalParms(),purchaseCashierTask, true);
//如果成功则生成支付单
if(getApprovalResult()){
String assignee = delegateTask.getAssignee();
SysFnPayment sysFnPayment=new SysFnPayment();
sysFnPayment.setOrderPrice(appForms.getTotalPrice());
sysFnPayment.setPaymentTitle(purchaseCashierTask.getPaymentTitle());
sysFnPayment.setPaymentPrice(purchaseCashierTask.getPaymentPrice());
sysFnPayment.setPaymentRemark(purchaseCashierTask.getPaymentRemark());
sysFnPayment.setRelateNo(appForms.getOrderNo());
sysFnPayment.setRelateNoType(1L);
sysFnPayment.setPaymentUser(assignee);
sysFnPaymentService.insertSysFnPayment(sysFnPayment);
}
}
}

View File

@ -39,6 +39,9 @@ public class SysFnAccountBill extends BaseEntity
@Excel(name = "流水金额")
private BigDecimal billAmount;
@Excel(name = "备注")
private String billRemark;
/** 删除标识 */
private Integer isDelete;

View File

@ -0,0 +1,76 @@
package com.snow.system.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import com.snow.common.annotation.Excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.snow.common.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.IdType;
import lombok.Data;
/**
* 支付申请对象 sys_fn_payment
*
* @author Agee
* @date 2022-02-19
*/
@Data
public class SysFnPayment extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** id */
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/** 支付单号 */
@Excel(name = "支付单号")
private String paymentNo;
/** 订单金额 */
@Excel(name = "订单金额")
private BigDecimal orderPrice;
/** 支付金额 */
@Excel(name = "支付金额")
private BigDecimal paymentPrice;
/** 支付标题 */
@Excel(name = "支付标题")
private String paymentTitle;
/** 关联单号 */
@Excel(name = "关联单号")
private String relateNo;
/** 关联单号类型1--采购单) */
@Excel(name = "关联单号类型", readConverterExp = "1=--采购单")
private Long relateNoType;
/** 支付时间 */
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date paymentTime;
/** 支付状态0--待支付1-已支付2--作废) */
@Excel(name = "支付状态", readConverterExp = "0=--待支付1-已支付2--作废")
private Long paymentStatus;
/** 流程状态0--待发起1-审批中2--审批通过3--已驳回4--作废) */
@Excel(name = "流程状态", readConverterExp = "0=--待发起1-审批中2--审批通过3--已驳回4--作废")
private Long processStatus;
/** 申请人 */
private String paymentUser;
/** null */
private Long isDelete;
/** 备注 */
@Excel(name = "备注")
private String paymentRemark;
}

View File

@ -134,8 +134,8 @@ public class SysFnAccountServiceImpl extends ServiceImpl<SysFnAccountMapper, Sys
SysFnAccountBill sysFnAccountBill=new SysFnAccountBill();
sysFnAccountBill.setAccountNo(rechargeAccountRequest.getAccountNo());
sysFnAccountBill.setBillAmount(rechargeAccountRequest.getRechargeAmount());
sysFnAccountBill.setBillType(1);
sysFnAccountBill.setRemark("充值");
sysFnAccountBill.setBillType(2);
sysFnAccountBill.setBillRemark("充值");
sysFnAccountBillService.insertSysFnAccountBill(sysFnAccountBill);
return false;
}

View File

@ -0,0 +1,111 @@
package com.snow.system.service.impl;
import java.util.List;
import java.util.ArrayList;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.snow.common.constant.SequenceConstants;
import com.snow.common.utils.DateUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;
import com.snow.system.mapper.SysFnPaymentMapper;
import com.snow.system.domain.SysFnPayment;
import com.snow.system.service.ISysFnPaymentService;
import com.snow.common.core.text.Convert;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import javax.annotation.Resource;
/**
* 支付申请Service业务层处理
*
* @author Agee
* @date 2022-02-19
*/
@Service
public class SysFnPaymentServiceImpl extends ServiceImpl<SysFnPaymentMapper, SysFnPayment> implements ISysFnPaymentService {
@Resource
private SysFnPaymentMapper sysFnPaymentMapper;
@Resource
private SysSequenceServiceImpl sysSequenceService;
/**
* 查询支付申请
*
* @param id 支付申请ID
* @return 支付申请
*/
@Override
public SysFnPayment selectSysFnPaymentById(Long id) {
return sysFnPaymentMapper.selectById(id);
}
/**
* 查询支付申请列表
*
* @param sysFnPayment 支付申请
* @return 支付申请
*/
@Override
public List<SysFnPayment> selectSysFnPaymentList(SysFnPayment sysFnPayment) {
LambdaQueryWrapper<SysFnPayment> lambda = new QueryWrapper<SysFnPayment>().lambda();
lambda.like(ObjectUtil.isNotEmpty(sysFnPayment.getPaymentNo()),SysFnPayment::getPaymentNo,sysFnPayment.getPaymentNo());
lambda.eq(ObjectUtil.isNotEmpty(sysFnPayment.getPaymentTitle()),SysFnPayment::getPaymentTitle,sysFnPayment.getPaymentTitle());
lambda.eq(ObjectUtil.isNotEmpty(sysFnPayment.getRelateNo()),SysFnPayment::getRelateNo,sysFnPayment.getRelateNo());
lambda.eq(ObjectUtil.isNotEmpty(sysFnPayment.getRelateNoType()),SysFnPayment::getRelateNoType,sysFnPayment.getRelateNoType());
lambda.eq(ObjectUtil.isNotEmpty(sysFnPayment.getPaymentTime()),SysFnPayment::getPaymentTime,sysFnPayment.getPaymentTime());
lambda.eq(ObjectUtil.isNotEmpty(sysFnPayment.getPaymentStatus()),SysFnPayment::getPaymentStatus,sysFnPayment.getPaymentStatus());
lambda.eq(ObjectUtil.isNotEmpty(sysFnPayment.getProcessStatus()),SysFnPayment::getProcessStatus,sysFnPayment.getProcessStatus());
lambda.eq(ObjectUtil.isNotEmpty(sysFnPayment.getPaymentRemark()),SysFnPayment::getPaymentRemark,sysFnPayment.getPaymentRemark());
return sysFnPaymentMapper.selectList(lambda);
}
/**
* 新增支付申请
*
* @param sysFnPayment 支付申请
* @return 结果
*/
@Override
public int insertSysFnPayment(SysFnPayment sysFnPayment) {
sysFnPayment.setCreateTime(DateUtils.getNowDate());
String paymentNo = sysSequenceService.getNewSequenceNo(SequenceConstants.FN_PAYMENT_NO);
sysFnPayment.setPaymentNo(paymentNo);
return sysFnPaymentMapper.insert(sysFnPayment);
}
/**
* 修改支付申请
*
* @param sysFnPayment 支付申请
* @return 结果
*/
@Override
public int updateSysFnPayment(SysFnPayment sysFnPayment) {
sysFnPayment.setUpdateTime(DateUtils.getNowDate());
return sysFnPaymentMapper.updateById(sysFnPayment);
}
/**
* 删除支付申请对象
*
* @param ids 需要删除的数据ID
* @return 结果
*/
@Override
public int deleteSysFnPaymentByIds(String ids) {
return sysFnPaymentMapper.deleteBatchIds(Convert.toStrList(ids));
}
/**
* 删除支付申请信息
*
* @param id 支付申请ID
* @return 结果
*/
@Override
public int deleteSysFnPaymentById(Long id) {
return sysFnPaymentMapper.deleteById(id);
}
}

View File

@ -10,7 +10,7 @@
<result property="accountNo" column="account_no" />
<result property="billType" column="bill_type" />
<result property="billAmount" column="bill_amount" />
<result property="remark" column="remark" />
<result property="billRemark" column="bill_remark" />
<result property="createBy" column="create_by" />
<result property="updateBy" column="update_by" />
<result property="createTime" column="create_time" />
@ -19,7 +19,7 @@
</resultMap>
<sql id="selectSysFnAccountBillVo">
select id, bill_no, account_no, bill_type, bill_amount, remark, create_by, update_by, create_time, update_time, is_delete from sys_fn_account_bill
select id, bill_no, account_no, bill_type, bill_amount, bill_remark, create_by, update_by, create_time, update_time, is_delete from sys_fn_account_bill
</sql>
<select id="selectSysFnAccountBillList" parameterType="SysFnAccountBill" resultMap="SysFnAccountBillResult">
@ -43,7 +43,7 @@
<if test="accountNo != null and accountNo != ''">account_no,</if>
<if test="billType != null">bill_type,</if>
<if test="billAmount != null">bill_amount,</if>
<if test="remark != null">remark,</if>
<if test="billRemark != null">bill_remark,</if>
<if test="createBy != null">create_by,</if>
<if test="updateBy != null">update_by,</if>
<if test="createTime != null">create_time,</if>
@ -55,7 +55,7 @@
<if test="accountNo != null and accountNo != ''">#{accountNo},</if>
<if test="billType != null">#{billType},</if>
<if test="billAmount != null">#{billAmount},</if>
<if test="remark != null">#{remark},</if>
<if test="billRemark != null">#{billRemark},</if>
<if test="createBy != null">#{createBy},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="createTime != null">#{createTime},</if>
@ -71,7 +71,7 @@
<if test="accountNo != null and accountNo != ''">account_no = #{accountNo},</if>
<if test="billType != null">bill_type = #{billType},</if>
<if test="billAmount != null">bill_amount = #{billAmount},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="billRemark != null">bill_remark = #{billRemark},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>