parent
711621a6e9
commit
c1d31e9dc0
@ -0,0 +1,35 @@
|
||||
package ${domain}.action.ajax.wsys;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import ${domain}.frame.auth.LocalData;
|
||||
import ${domain}.module.wsys.mgr.DataManager;
|
||||
import ${domain}.module.wsys.req.DataErrorRequest;
|
||||
import ${domain}.module.wsys.req.DataLoginRequest;
|
||||
import ${domain}.module.wsys.req.DataTaskRequest;
|
||||
import ${domain}.module.wsys.req.DataTotalRequest;
|
||||
import ${domain}.module.wsys.rsp.DataErrorResponse;
|
||||
import ${domain}.module.wsys.rsp.DataLoginResponse;
|
||||
import ${domain}.module.wsys.rsp.DataTaskResponse;
|
||||
import ${domain}.module.wsys.rsp.DataTotalResponse;
|
||||
|
||||
public class DataAjax {
|
||||
|
||||
@Autowired
|
||||
private DataManager dataManager;
|
||||
|
||||
public DataTotalResponse total(DataTotalRequest request) {
|
||||
return dataManager.total(request, LocalData.getToken());
|
||||
}
|
||||
|
||||
public DataLoginResponse login(DataLoginRequest request) {
|
||||
return dataManager.login(request, LocalData.getToken());
|
||||
}
|
||||
|
||||
public DataErrorResponse error(DataErrorRequest request) {
|
||||
return dataManager.error(request, LocalData.getToken());
|
||||
}
|
||||
|
||||
public DataTaskResponse task(DataTaskRequest request) {
|
||||
return dataManager.task(request, LocalData.getToken());
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package ${domain}.frame.validation;
|
||||
|
||||
import javax.validation.Constraint;
|
||||
import javax.validation.Payload;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Inherited;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Target({ElementType.FIELD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Constraint(validatedBy = NumberValidator.class)
|
||||
@Inherited
|
||||
public @interface Number {
|
||||
String message() default "字段长度不符合";
|
||||
|
||||
int min() default 0;
|
||||
|
||||
int max() default 2147483647;
|
||||
|
||||
Class<?>[] groups() default {};
|
||||
|
||||
Class<? extends Payload>[] payload() default {};
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package ${domain}.module.wsys.ent;
|
||||
|
||||
/**
|
||||
* DataCount - 统计
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2020-11-15
|
||||
*/
|
||||
public class DataCount {
|
||||
private String date;
|
||||
private int count;
|
||||
|
||||
public String getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public void setDate(String date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
public int getCount() {
|
||||
return count;
|
||||
}
|
||||
|
||||
public void setCount(int count) {
|
||||
this.count = count;
|
||||
}
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
package ${domain}.module.wsys.ent;
|
||||
|
||||
/**
|
||||
* DataTotal - 统计
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2020-11-15
|
||||
*/
|
||||
public class DataTotal {
|
||||
// 用户总数
|
||||
private int userAll;
|
||||
// 用户在线数
|
||||
private int userLine;
|
||||
// 机构总数
|
||||
private int deptAll;
|
||||
// 故障未处理数
|
||||
private int errorUn;
|
||||
// 故障总数
|
||||
private int errorAll;
|
||||
|
||||
public int getUserAll() {
|
||||
return userAll;
|
||||
}
|
||||
|
||||
public void setUserAll(int userAll) {
|
||||
this.userAll = userAll;
|
||||
}
|
||||
|
||||
public int getUserLine() {
|
||||
return userLine;
|
||||
}
|
||||
|
||||
public void setUserLine(int userLine) {
|
||||
this.userLine = userLine;
|
||||
}
|
||||
|
||||
public int getDeptAll() {
|
||||
return deptAll;
|
||||
}
|
||||
|
||||
public void setDeptAll(int deptAll) {
|
||||
this.deptAll = deptAll;
|
||||
}
|
||||
|
||||
public int getErrorUn() {
|
||||
return errorUn;
|
||||
}
|
||||
|
||||
public void setErrorUn(int errorUn) {
|
||||
this.errorUn = errorUn;
|
||||
}
|
||||
|
||||
public int getErrorAll() {
|
||||
return errorAll;
|
||||
}
|
||||
|
||||
public void setErrorAll(int errorAll) {
|
||||
this.errorAll = errorAll;
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package ${domain}.module.wsys.mgr;
|
||||
|
||||
import ${domain}.frame.auth.Token;
|
||||
import ${domain}.module.wsys.req.DataErrorRequest;
|
||||
import ${domain}.module.wsys.req.DataLoginRequest;
|
||||
import ${domain}.module.wsys.req.DataTaskRequest;
|
||||
import ${domain}.module.wsys.req.DataTotalRequest;
|
||||
import ${domain}.module.wsys.rsp.DataErrorResponse;
|
||||
import ${domain}.module.wsys.rsp.DataLoginResponse;
|
||||
import ${domain}.module.wsys.rsp.DataTaskResponse;
|
||||
import ${domain}.module.wsys.rsp.DataTotalResponse;
|
||||
|
||||
/**
|
||||
* 通行证
|
||||
*
|
||||
* @author author
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public interface DataManager {
|
||||
|
||||
DataTotalResponse total(DataTotalRequest request, Token token);
|
||||
|
||||
DataLoginResponse login(DataLoginRequest request, Token token);
|
||||
|
||||
DataErrorResponse error(DataErrorRequest request, Token token);
|
||||
|
||||
DataTaskResponse task(DataTaskRequest request, Token token);
|
||||
}
|
@ -0,0 +1,176 @@
|
||||
package ${domain}.module.wsys.mgr;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import ${domain}.frame.auth.Token;
|
||||
import ${domain}.frame.base.ErrorType;
|
||||
import ${domain}.frame.base.SortType;
|
||||
import ${domain}.frame.utils.ValidationUtil;
|
||||
import ${domain}.module.wsys.ent.DataCount;
|
||||
import ${domain}.module.wsys.ent.DataTotal;
|
||||
import ${domain}.module.wsys.ent.Logtask;
|
||||
import ${domain}.module.wsys.mpr.DataMapper;
|
||||
import ${domain}.module.wsys.req.DataErrorRequest;
|
||||
import ${domain}.module.wsys.req.DataLoginRequest;
|
||||
import ${domain}.module.wsys.req.DataTaskRequest;
|
||||
import ${domain}.module.wsys.req.DataTotalRequest;
|
||||
import ${domain}.module.wsys.req.LogtaskFindRequest;
|
||||
import ${domain}.module.wsys.rsp.DataErrorResponse;
|
||||
import ${domain}.module.wsys.rsp.DataLoginResponse;
|
||||
import ${domain}.module.wsys.rsp.DataTaskResponse;
|
||||
import ${domain}.module.wsys.rsp.DataTotalResponse;
|
||||
import ${domain}.module.wsys.rsp.LogtaskFindResponse;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* TOKENS - 通行证
|
||||
*
|
||||
* @author author
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
@Transactional
|
||||
@Service
|
||||
public class DataManagerImpl implements DataManager {
|
||||
|
||||
@Autowired
|
||||
private DataMapper dataMapper;
|
||||
|
||||
@Autowired
|
||||
private LogtaskManager logtaskManager;
|
||||
|
||||
@Override
|
||||
public DataTotalResponse total(DataTotalRequest request, Token token) {
|
||||
DataTotalResponse response = new DataTotalResponse();
|
||||
|
||||
ValidationUtil.validate(request, response);
|
||||
if (response.hasError()) {
|
||||
return response;
|
||||
}
|
||||
|
||||
DataTotal dataTotal = dataMapper.total(request, token);
|
||||
response.setDataTotal(dataTotal);
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataLoginResponse login(DataLoginRequest request, Token token) {
|
||||
DataLoginResponse response = new DataLoginResponse();
|
||||
|
||||
ValidationUtil.validate(request, response);
|
||||
if (response.hasError()) {
|
||||
return response;
|
||||
}
|
||||
SimpleDateFormat simpleDateFormat1 = null;
|
||||
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
|
||||
try {
|
||||
simpleDateFormat1 = new SimpleDateFormat(request.getFormat());
|
||||
} catch (Exception e) {
|
||||
response.addError(ErrorType.BUSINESS_ERROR, "日期格式化表达式错误");
|
||||
return response;
|
||||
}
|
||||
|
||||
List<Map<String, String>> list = new ArrayList<>();
|
||||
Calendar instance = Calendar.getInstance();
|
||||
instance.setTime(new Date());
|
||||
if (request.isToday()) {
|
||||
Map<String, String> datas = new HashMap<>();
|
||||
datas.put("date1", simpleDateFormat1.format(instance.getTime()));
|
||||
datas.put("date2", simpleDateFormat2.format(instance.getTime()));
|
||||
list.add(datas);
|
||||
}
|
||||
while (list.size() < request.getDays()) {
|
||||
instance.add(Calendar.DAY_OF_MONTH, -1);
|
||||
Map<String, String> datas = new HashMap<>();
|
||||
datas.put("date1", simpleDateFormat1.format(instance.getTime()));
|
||||
datas.put("date2", simpleDateFormat2.format(instance.getTime()));
|
||||
list.add(datas);
|
||||
}
|
||||
|
||||
List<DataCount> result = dataMapper.login(list, token);
|
||||
response.setResult(result);
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataErrorResponse error(DataErrorRequest request, Token token) {
|
||||
DataErrorResponse response = new DataErrorResponse();
|
||||
|
||||
ValidationUtil.validate(request, response);
|
||||
if (response.hasError()) {
|
||||
return response;
|
||||
}
|
||||
SimpleDateFormat simpleDateFormat1 = null;
|
||||
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
|
||||
try {
|
||||
simpleDateFormat1 = new SimpleDateFormat(request.getFormat());
|
||||
} catch (Exception e) {
|
||||
response.addError(ErrorType.BUSINESS_ERROR, "日期格式化表达式错误");
|
||||
return response;
|
||||
}
|
||||
|
||||
List<Map<String, String>> list = new ArrayList<>();
|
||||
Calendar instance = Calendar.getInstance();
|
||||
instance.setTime(new Date());
|
||||
if (request.isToday()) {
|
||||
Map<String, String> datas = new HashMap<>();
|
||||
datas.put("date1", simpleDateFormat1.format(instance.getTime()));
|
||||
datas.put("date2", simpleDateFormat2.format(instance.getTime()));
|
||||
list.add(datas);
|
||||
}
|
||||
while (list.size() < request.getDays()) {
|
||||
instance.add(Calendar.DAY_OF_MONTH, -1);
|
||||
Map<String, String> datas = new HashMap<>();
|
||||
datas.put("date1", simpleDateFormat1.format(instance.getTime()));
|
||||
datas.put("date2", simpleDateFormat2.format(instance.getTime()));
|
||||
list.add(datas);
|
||||
}
|
||||
|
||||
List<DataCount> result = dataMapper.error(list, token);
|
||||
response.setResult(result);
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataTaskResponse task(DataTaskRequest request, Token token) {
|
||||
DataTaskResponse response = new DataTaskResponse();
|
||||
|
||||
ValidationUtil.validate(request, response);
|
||||
if (response.hasError()) {
|
||||
return response;
|
||||
}
|
||||
|
||||
LogtaskFindRequest logtaskFindRequest = new LogtaskFindRequest();
|
||||
logtaskFindRequest.setSortType(SortType.ASC);
|
||||
logtaskFindRequest.setSortKey("CREATE_TIME");
|
||||
logtaskFindRequest.setPageSize(100);
|
||||
LogtaskFindResponse logtaskFindResponse = logtaskManager.find(logtaskFindRequest, token);
|
||||
if (logtaskFindResponse.hasError()) {
|
||||
response.addErrors(logtaskFindResponse.getErrors());
|
||||
return response;
|
||||
}
|
||||
List<DataCount> result = new ArrayList<>();
|
||||
response.setResult(result);
|
||||
int countSuccess = 0;
|
||||
for (Logtask logtask : logtaskFindResponse.getResult()) {
|
||||
DataCount dataCount = new DataCount();
|
||||
dataCount.setDate("");
|
||||
dataCount.setCount(logtask.getExecTime());
|
||||
if ("1".equals(logtask.getExecState())) {
|
||||
countSuccess++;
|
||||
}
|
||||
result.add(dataCount);
|
||||
}
|
||||
response.setCountSuceess(countSuccess);
|
||||
response.setCountFailed(logtaskFindResponse.getResult().size() - countSuccess);
|
||||
return response;
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package ${domain}.module.wsys.mpr;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import ${domain}.frame.auth.Token;
|
||||
import ${domain}.module.wsys.ent.DataCount;
|
||||
import ${domain}.module.wsys.ent.DataTotal;
|
||||
import ${domain}.module.wsys.req.DataTaskRequest;
|
||||
import ${domain}.module.wsys.req.DataTotalRequest;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 数据
|
||||
*
|
||||
* @author wangbing
|
||||
* @since 2020-06-27
|
||||
*/
|
||||
@Mapper
|
||||
public interface DataMapper {
|
||||
|
||||
/**
|
||||
* 获得对象
|
||||
*
|
||||
* @param request 请求
|
||||
* @param token 令牌
|
||||
* @return 返回对象
|
||||
*/
|
||||
DataTotal total(@Param("request") DataTotalRequest request, @Param("token") Token token);
|
||||
|
||||
/**
|
||||
* 获得对象
|
||||
*
|
||||
* @param list 主键集合
|
||||
* @param token 令牌
|
||||
* @return 返回对象
|
||||
*/
|
||||
List<DataCount> login(@Param("list") List<Map<String, String>> list, @Param("token") Token token);
|
||||
|
||||
/**
|
||||
* 获得对象
|
||||
*
|
||||
* @param list 主键集合
|
||||
* @param token 令牌
|
||||
* @return 返回对象
|
||||
*/
|
||||
List<DataCount> error(@Param("list") List<Map<String, String>> list, @Param("token") Token token);
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="${domain}.module.wsys.mpr.DataMapper">
|
||||
|
||||
<select id="total" resultType="${domain}.module.wsys.ent.DataTotal">
|
||||
SELECT
|
||||
( SELECT COUNT( 1 ) + 1 FROM SYS_USER WHERE IS_DELETED = 0 AND USER_STATUS = '0' ) USER_ALL,
|
||||
( SELECT COUNT( 1 ) FROM SYS_TOKENS WHERE IS_DELETED = 0 AND VALID = '1' ) USER_LINE,
|
||||
( SELECT COUNT( 1 ) FROM SYS_DEPT WHERE IS_DELETED = 0 ) DEPT_ALL,
|
||||
( SELECT COUNT( 1 ) FROM SYS_LOGERR WHERE IS_DELETED = 0 AND LOG_STATE = '0' ) ERROR_UN,
|
||||
( SELECT COUNT( 1 ) FROM SYS_LOGERR WHERE IS_DELETED = 0 ) ERROR_ALL
|
||||
</select>
|
||||
|
||||
<select id="login" resultType="${domain}.module.wsys.ent.DataCount">
|
||||
SELECT * FROM
|
||||
<foreach collection="list" item="item" index="index" open="(" close=")" separator="UNION ALL">
|
||||
SELECT ${r'#'}{item.date1} "DATE",COUNT(1) "COUNT" FROM SYS_TOKENS WHERE date(LOGIN_TIME/1000,'unixepoch') = ${r'#'}{item.date2}
|
||||
</foreach>
|
||||
ORDER BY DATE
|
||||
</select>
|
||||
|
||||
<select id="error" resultType="${domain}.module.wsys.ent.DataCount">
|
||||
SELECT * FROM
|
||||
<foreach collection="list" item="item" index="index" open="(" close=")" separator="UNION ALL">
|
||||
SELECT ${r'#'}{item.date1} "DATE",COUNT( 1 ) "COUNT" FROM SYS_LOGERR WHERE date(CREATE_TIME) = ${r'#'}{item.date2}
|
||||
</foreach>
|
||||
ORDER BY DATE
|
||||
</select>
|
||||
</mapper>
|
@ -0,0 +1,46 @@
|
||||
package ${domain}.module.wsys.req;
|
||||
|
||||
import ${domain}.frame.base.BaseFindRequest;
|
||||
import ${domain}.frame.validation.Number;
|
||||
|
||||
/**
|
||||
* TokensLogoutRequest - 通行证注销
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public class DataErrorRequest extends BaseFindRequest {
|
||||
|
||||
// 日期格式化;默认yyyy-MM-dd
|
||||
private String format = "yyyy-MM-dd";
|
||||
// 统计天数
|
||||
@Number(min = 1, max = 366, message = "统计天数最少为1天,最大为366天")
|
||||
private int days;
|
||||
// 是否包含今天
|
||||
private boolean today;
|
||||
|
||||
public String getFormat() {
|
||||
return format;
|
||||
}
|
||||
|
||||
public void setFormat(String format) {
|
||||
this.format = format;
|
||||
}
|
||||
|
||||
public int getDays() {
|
||||
return days;
|
||||
}
|
||||
|
||||
public void setDays(int days) {
|
||||
this.days = days;
|
||||
}
|
||||
|
||||
public boolean isToday() {
|
||||
return today;
|
||||
}
|
||||
|
||||
public void setToday(boolean today) {
|
||||
this.today = today;
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package ${domain}.module.wsys.req;
|
||||
|
||||
import ${domain}.frame.base.BaseFindRequest;
|
||||
import ${domain}.frame.validation.Number;
|
||||
|
||||
/**
|
||||
* TokensLogoutRequest - 通行证注销
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public class DataLoginRequest extends BaseFindRequest {
|
||||
|
||||
// 日期格式化;默认yyyy-MM-dd
|
||||
private String format = "yyyy-MM-dd";
|
||||
// 统计天数
|
||||
@Number(min = 1, max = 366, message = "统计天数最少为1天,最大为366天")
|
||||
private int days;
|
||||
// 是否包含今天
|
||||
private boolean today;
|
||||
|
||||
public String getFormat() {
|
||||
return format;
|
||||
}
|
||||
|
||||
public void setFormat(String format) {
|
||||
this.format = format;
|
||||
}
|
||||
|
||||
public int getDays() {
|
||||
return days;
|
||||
}
|
||||
|
||||
public void setDays(int days) {
|
||||
this.days = days;
|
||||
}
|
||||
|
||||
public boolean isToday() {
|
||||
return today;
|
||||
}
|
||||
|
||||
public void setToday(boolean today) {
|
||||
this.today = today;
|
||||
}
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package ${domain}.module.wsys.req;
|
||||
|
||||
import ${domain}.frame.base.BaseFindRequest;
|
||||
|
||||
/**
|
||||
* DataTaskRequest - 任务执行数据
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public class DataTaskRequest extends BaseFindRequest {
|
||||
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package ${domain}.module.wsys.req;
|
||||
|
||||
import ${domain}.frame.base.BaseRequest;
|
||||
|
||||
/**
|
||||
* DataTotalRequest - 数据统计
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public class DataTotalRequest extends BaseRequest {
|
||||
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package ${domain}.module.wsys.rsp;
|
||||
|
||||
import ${domain}.frame.base.BaseFindResponse;
|
||||
import ${domain}.module.wsys.ent.DataCount;
|
||||
|
||||
public class DataErrorResponse extends BaseFindResponse<DataCount> {
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package ${domain}.module.wsys.rsp;
|
||||
|
||||
import ${domain}.frame.base.BaseFindResponse;
|
||||
import ${domain}.module.wsys.ent.DataCount;
|
||||
|
||||
public class DataLoginResponse extends BaseFindResponse<DataCount> {
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package ${domain}.module.wsys.rsp;
|
||||
|
||||
import ${domain}.frame.base.BaseFindResponse;
|
||||
import ${domain}.module.wsys.ent.DataCount;
|
||||
|
||||
public class DataTaskResponse extends BaseFindResponse<DataCount> {
|
||||
private int countSuceess;
|
||||
private int countFailed;
|
||||
|
||||
public int getCountSuceess() {
|
||||
return countSuceess;
|
||||
}
|
||||
|
||||
public void setCountSuceess(int countSuceess) {
|
||||
this.countSuceess = countSuceess;
|
||||
}
|
||||
|
||||
public int getCountFailed() {
|
||||
return countFailed;
|
||||
}
|
||||
|
||||
public void setCountFailed(int countFailed) {
|
||||
this.countFailed = countFailed;
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package ${domain}.module.wsys.rsp;
|
||||
|
||||
import ${domain}.frame.base.BaseResponse;
|
||||
import ${domain}.module.wsys.ent.DataTotal;
|
||||
|
||||
public class DataTotalResponse extends BaseResponse {
|
||||
|
||||
private DataTotal dataTotal;
|
||||
|
||||
public DataTotal getDataTotal() {
|
||||
return dataTotal;
|
||||
}
|
||||
|
||||
public void setDataTotal(DataTotal dataTotal) {
|
||||
this.dataTotal = dataTotal;
|
||||
}
|
||||
}
|
Loading…
Reference in new issue