ensign/src/main/java/com/yem/tws/chart/AvailabilityEdit.java
2024-08-26 09:19:12 +08:00

172 lines
5.5 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.yem.tws.chart;
import com.yem.tws.common1.StringUtils;
import kd.bos.context.RequestContext;
import kd.bos.entity.datamodel.IDataModel;
import kd.bos.form.control.Label;
import kd.bos.form.control.ProgressBar;
import kd.bos.form.control.events.ProgressEvent;
import kd.bos.form.control.events.ProgresssListener;
import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.mvc.cache.PageCache;
import kd.bos.threads.ThreadPool;
import kd.bos.threads.ThreadPools;
import java.math.BigDecimal;
import java.util.EventObject;
/**
* @author zhouc
* @date 2023/9/9 15:48
* @className AvailabilityEdit
* @description 授信可用率图表插件
*/
public class AvailabilityEdit extends AbstractFormPlugin implements ProgresssListener {
private final static String KEY_PROGRESSBAR = "yem_progressbarap";
public final static String CACHEKEY_PROGRESS = "progress";
public final static String CACHEKEY_STARTPROPGRESS = "startprogress";
private static ThreadPool threadPool = ThreadPools.newFixedThreadPool("AvailabilityEdit", 1);
@Override
public void afterCreateNewData(EventObject e) {
super.afterCreateNewData(e);
IDataModel model = this.getModel();
String yem_sumamoun = (String) model.getValue("yem_sumamoun");
String yem_occupyamt = (String) model.getValue("yem_occupyamt");
String yem_colour = (String) model.getValue("yem_colour");
Label yem_labelap2 = this.getControl("yem_labelap2");
yem_labelap2.setText(yem_sumamoun.toString());
Label yem_labelap3 = this.getControl("yem_labelap3");
yem_labelap3.setText(yem_occupyamt.toString());
start();
}
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
ProgressBar progressBar = this.getView().getControl(KEY_PROGRESSBAR);
progressBar.addProgressListener(this);
// this.addClickListeners(KEY_BTNSTART, KEY_BTNSTOP);
}
/**
* 开始进度
*/
private void start() {
// 设置当前进度
ProgressBar progressBar = this.getView().getControl(KEY_PROGRESSBAR);
progressBar.start();
// 标记任务已经开始
this.getPageCache().put(CACHEKEY_STARTPROPGRESS, "true");
this.getPageCache().put(CACHEKEY_PROGRESS, "0");
// 启动异步进程,执行任务,在任务中随时更新进度
Task myTask = new Task(RequestContext.get(), this.getView().getPageId());
threadPool.execute(myTask);
}
/**
* 停止进度
*/
private void stop() {
// 更新缓存中的任务启动标志 = false异步任务进程会定时读取这个标志停止任务
this.getPageCache().put(CACHEKEY_STARTPROPGRESS, "false");
}
@Override
public void onProgress(ProgressEvent arg0) {
IDataModel model = this.getModel();
String yem_sumamoun = (String) model.getValue("yem_sumamoun");
String yem_occupyamt = (String) model.getValue("yem_occupyamt");
String startProgress = this.getPageCache().get(CACHEKEY_STARTPROPGRESS);
if (StringUtils.isBlank(startProgress)) {
// 未开始设置进度为0
arg0.setProgress(0);
return;
}
int progress = 0;
// 取缓存的进度:由后台任务更新
String cacheProgress = this.getPageCache().get(CACHEKEY_PROGRESS);
if (StringUtils.isNotEmpty(cacheProgress)) {
progress = getProgress(yem_sumamoun,yem_occupyamt);
}
if (progress >= 100) {
progress = 99;
stop();
}
if (startProgress.equals("false")) {
}
arg0.setProgress(progress);
}
public int getProgress(String yem_sumamoun, String yem_occupyamt) {
//获取当前登录组织
int progress = 0;
BigDecimal maerialRat = new BigDecimal(yem_occupyamt).divide(new BigDecimal(yem_sumamoun)).multiply(new BigDecimal(100));
String bd1 = maerialRat.setScale(0, BigDecimal.ROUND_HALF_UP).toString();
progress = Integer.valueOf(bd1).intValue();
return progress;
}
}
/**
* 异步任务
*
* @author rd_JohnnyDing
*/
class Task implements Runnable {
private RequestContext rc;
String pageId;
public Task(RequestContext rc, String pageId) {
this.rc = rc;
this.pageId = pageId;
}
@Override
public void run() {
// 设置登录上下文,否则无法访问数据库
RequestContext.set(rc);
this.doTask();
}
private void doTask() {
int progress = 0;
while (progress < 100) {
// 暂停100ms
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 刷新进度,写入缓存中:其他进程会从缓存中定时(1s)读取进度
progress++;
// 把最新的进度推送到页面缓存中
PageCache pageCache = new PageCache(this.pageId);
pageCache.put(CustomsErrorRate.CACHEKEY_PROGRESS, String.valueOf(progress));
// 如果主线程,要求停止任务,则主动终止循环
if (isStop(pageCache)) {
break;
}
}
}
private boolean isStop(PageCache pageCache) {
String startProgress = pageCache.get(CustomsErrorRate.CACHEKEY_STARTPROPGRESS);
return (StringUtils.isNotEmpty(startProgress)
&& startProgress.equals("false"));
}
}