Quellcode durchsuchen

4、Donenow创建采购订单,根据所选的合同产品,自动填充供应商和采购客户,如果多个合同产品的供应商不一致,就不用填了;
5、Donenow创建采购订单如果采购产品的数量为0,跳过不生产采购单;
6、Donenow待采购订单查询页面,查询优化;
7、Donenow合同审批并提交、已审批条目菜单查询语句优化;

zhangyao vor 4 Monaten
Ursprung
Commit
3a3c762c79

+ 3 - 0
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/service/contractService.java

@@ -149,6 +149,9 @@ public class contractService {
 
             }
 
+            //更新合同产品上面的客户ID
+            DBSql.update("update BO_EU_DNCTT_CONTRACT_COST set ACCOUNT_ID=?,BILL_ACCOUNT_ID where CONTRACT_ID=?", new Object[]{dto.getString("ACCOUNT_ID"), dto.getString("BILL_ACCOUNT_ID"), dto.getString("ID")});
+
 
             if (TYPE_ID.equals(cttConstant.CONTRACT_TYPE_SERVICE)) // 如果是服务合同
             {

+ 28 - 0
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/Plugins.java

@@ -0,0 +1,28 @@
+package com.awspaas.user.apps.donenow_ivt;
+
+import com.actionsoft.apps.listener.PluginListener;
+import com.actionsoft.apps.resource.AppContext;
+import com.actionsoft.apps.resource.plugin.profile.AWSPluginProfile;
+import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile;
+import com.awspaas.user.apps.donenow_ivt.cache.formStatusCache;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Plugins implements PluginListener {
+    /**
+     *注册插件
+     * @param appContext
+     * @return
+     */
+    @Override
+    public List<AWSPluginProfile> register(AppContext appContext) {
+        List<AWSPluginProfile> list = new ArrayList<>();
+
+        CachePluginProfile cacheProfile = new CachePluginProfile(formStatusCache.class);
+        cacheProfile.timeToLiveSeconds(3600);// 缓存时间 1小时
+        list.add(cacheProfile);
+
+        return list;
+    }
+}

+ 24 - 0
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/cache/formStatusCache.java

@@ -0,0 +1,24 @@
+package com.awspaas.user.apps.donenow_ivt.cache;
+
+import com.actionsoft.apps.resource.plugin.profile.CachePluginProfile;
+import com.actionsoft.bpms.commons.cache.Cache;
+import com.actionsoft.bpms.commons.cache.CacheManager;
+
+import java.util.Date;
+
+public class formStatusCache extends Cache<String, Date> {
+
+    public formStatusCache(CachePluginProfile configuration) {
+        super(configuration);
+    }
+
+
+    public static formStatusCache getInstance() {
+        return CacheManager.getCache(formStatusCache.class);
+    }
+
+    @Override
+    protected void load() {
+
+    }
+}

+ 10 - 1
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/controller/IVTController.java

@@ -191,7 +191,9 @@ public class IVTController extends BaseController {
                 "  'ticket'))parent_type,op.name as product_name,(select name from bo_eu_dncrm_account where " +
                 "  id=ifnull(c.account_id,ifnull(p.account_id,t.account_id))) account_name," +
                 "  (select name from bo_eu_dncrm_opportunity where id=b.opportunity_id)oppo_name," +
-                "  ifnull(c.name,ifnull(p.name,t.no))contrac_project_task_name,op.quantity,op.unit_cost*op.quantity as " +
+                "  ifnull(c.name,ifnull(p.name,t.no))contrac_project_task_name," +
+                "op.quantity," +
+                "op.unit_cost*op.quantity as " +
                 "  total_cost,ifnull((select sum(ifnull(quantity,0)) from bo_eu_dnivt_warehouse_product where " +
                 "  product_id=op.product_Id ),0)as on_hand,ifnull((select sum(x.quantity) from bo_eu_dnivt_reserve x," +
                 "  bo_eu_dncrm_quote_item y where   x.quote_item_id=y.id and y.object_id=op.product_id ),0)+" +
@@ -234,6 +236,13 @@ public class IVTController extends BaseController {
             return fail("一次只能接收同一个采购订单的采购项");
         }
         for (RowMap map : maps) {
+
+            //采购数量不能为空,也不能小于0
+            Object purchaseQuantity = map.get("quantity");
+            if (purchaseQuantity == null || StringUtils.isBlank(purchaseQuantity.toString()) || Double.parseDouble(purchaseQuantity.toString()) <= 0) {
+                continue;
+            }
+
             String unBack = "0";
             BO subBo = new BO();
             set.add(map.getString("purchase_order_no"));

+ 62 - 34
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/controller/ivtOrderController.java

@@ -16,6 +16,7 @@ import com.actionsoft.sdk.local.SDK;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.awspaas.user.apps.donenow_ivt.cache.formStatusCache;
 import org.apache.commons.lang3.StringUtils;
 
 import java.sql.Connection;
@@ -44,8 +45,7 @@ public class ivtOrderController {
         }
         sql += " ) and CLOSED=0";
         List<RowMap> list = DBSql.getMaps(sql, new Object[]{vendorAccountId});
-        if (list.isEmpty())
-            return ResponseObject.newErrResponse("无数据");
+        if (list.isEmpty()) return ResponseObject.newErrResponse("无数据");
 
         List<JSONObject> warehouseProductIdsMap = new ArrayList<>();
         if (warehouseProductIds != null && !warehouseProductIds.isEmpty() && !warehouseProductIds.equals("[]")) {
@@ -58,8 +58,7 @@ public class ivtOrderController {
         int cnt = 0;
         for (RowMap map : list) {
             List<RowMap> lctList = DBSql.getMaps("select id,warehouse_id,product_id,quantity,quantity_minimum,quantity_maximum,(select name from bo_eu_dnivt_warehouse where id=warehouse_id) as bin from bo_eu_dnivt_warehouse_product where product_id=? ", new Object[]{map.getString("ID")});
-            if (lctList == null || lctList.isEmpty())
-                continue;
+            if (lctList == null || lctList.isEmpty()) continue;
             boolean isExist = false;
             if (!warehouseProductIdsMap.isEmpty()) {
                 for (int j = 0; j < warehouseProductIdsMap.size(); ++j) {
@@ -69,8 +68,7 @@ public class ivtOrderController {
                 }
             }
 
-            if (isExist)
-                continue;
+            if (isExist) continue;
 
             for (RowMap rowMap : lctList) {
                 cnt++;
@@ -87,8 +85,7 @@ public class ivtOrderController {
                 SDK.getBOAPI().createDataBO("BO_EU_DNIVT_ORDER_PRODUCT", bo, uc);
             }
         }
-        if (cnt == 0)
-            return ResponseObject.newErrResponse("无数据");
+        if (cnt == 0) return ResponseObject.newErrResponse("无数据");
 
         return ResponseObject.newOkResponse();
     }
@@ -106,8 +103,7 @@ public class ivtOrderController {
         String sql = "select * from bo_eu_dnivt_product where id=?";
 
         RowMap map = DBSql.getMap(sql, new Object[]{productId});
-        if (map == null)
-            return ResponseObject.newErrResponse("无数据");
+        if (map == null) return ResponseObject.newErrResponse("无数据");
 
         Map<String, Object> result = new HashMap<>();
         result.put("NAME", map.getString("NAME"));
@@ -132,8 +128,7 @@ public class ivtOrderController {
         String sql = "select OID,NAME,EXT1 from bo_eu_dnd_general where is_active=1 and closed=0  and general_table_id=44 and orgid=? and oid=?";
 
         RowMap map = DBSql.getMap(sql, new Object[]{uc.getCompanyModel().getId(), taxId});
-        if (map == null)
-            return ResponseObject.newErrResponse("无数据");
+        if (map == null) return ResponseObject.newErrResponse("无数据");
 
         Map<String, Object> result = new HashMap<>();
         result.put("taxId", map.getString("OID"));
@@ -155,12 +150,10 @@ public class ivtOrderController {
      */
     @Mapping(value = "com.awspaas.user.apps.donenow_ivt.purchaseShip")
     public ResponseObject purchaseShip(UserContext uc, String costPdtIds) throws SQLException {
-        if (StringUtils.isBlank(costPdtIds))
-            return ResponseObject.newErrResponse("无数据");
+        if (StringUtils.isBlank(costPdtIds)) return ResponseObject.newErrResponse("无数据");
 
         List<RowMap> pdtList = DBSql.getMaps("select ID,STATUS_ID from bo_eu_dnctt_contract_cost_product where id in(?)", new Object[]{costPdtIds});
-        if (pdtList.isEmpty())
-            return ResponseObject.newErrResponse("无数据");
+        if (pdtList.isEmpty()) return ResponseObject.newErrResponse("无数据");
         for (RowMap pdtMap : pdtList) {
             if (pdtMap.getString("STATUS_ID").equals("2158") == false)//待配送
             {
@@ -242,8 +235,7 @@ public class ivtOrderController {
         } catch (SQLException e) {
             conn.rollback();
         } finally {
-            if (conn != null)
-                conn.close();
+            if (conn != null) conn.close();
         }
         return ResponseObject.newOkResponse();
     }
@@ -253,13 +245,11 @@ public class ivtOrderController {
      */
     @Mapping(value = "com.awspaas.user.apps.donenow_ivt.purchaseUnShip")
     public ResponseObject purchaseUnShip(UserContext uc, String costPdtIds) throws SQLException {
-        if (StringUtils.isBlank(costPdtIds))
-            return ResponseObject.newErrResponse("无数据");
+        if (StringUtils.isBlank(costPdtIds)) return ResponseObject.newErrResponse("无数据");
 
         List<RowMap> pdtList = DBSql.getMaps("select ID,STATUS_ID,CONTRACT_COST_ID,QUANTITY,WAREHOUSE_ID,SN,SHIPPING_CONTRACT_COST_ID from bo_eu_dnctt_contract_cost_product where FIND_IN_SET(ID,?)", new Object[]{costPdtIds});
 
-        if (pdtList.isEmpty())
-            return ResponseObject.newErrResponse("无数据");
+        if (pdtList.isEmpty()) return ResponseObject.newErrResponse("无数据");
 
         Connection conn = null;
         try {
@@ -313,18 +303,15 @@ public class ivtOrderController {
                             lctPdtLotBO.set("QUANTITY", Integer.parseInt(lctPdtLotBO.getString("QUANTITY")) + 1);
 
                             String lostSN = lctPdtLotBO.getString("SN");
-                            if (StringUtils.isNotBlank(lostSN))
-                                lctPdtLotBO.set("SN", lostSN + "," + sn);
-                            else
-                                lctPdtLotBO.set("SN", sn);
+                            if (StringUtils.isNotBlank(lostSN)) lctPdtLotBO.set("SN", lostSN + "," + sn);
+                            else lctPdtLotBO.set("SN", sn);
 
                             String lostShippedSN = lctPdtLotBO.getString("SHIPPED_SN");//移除sn
 
                             String[] lostShippedSNs = lostShippedSN.split(",");
                             List<String> lostShippedSNsList = new ArrayList<String>();
                             for (String lostShippedSNsItem : lostShippedSNs) {
-                                if (!lostShippedSNsItem.equals(sn))
-                                    lostShippedSNsList.add(lostShippedSNsItem);
+                                if (!lostShippedSNsItem.equals(sn)) lostShippedSNsList.add(lostShippedSNsItem);
                             }
                             lostShippedSN = StringUtils.join(lostShippedSNsList.toArray(), ",");
                             lctPdtLotBO.set("SHIPPED_SN", lostShippedSN);
@@ -346,7 +333,7 @@ public class ivtOrderController {
                 //删除
                 if (StringUtils.isNotBlank(pdtMap.getString("SHIPPING_CONTRACT_COST_ID")))
                     DBSql.update(conn, "update BO_EU_DNCTT_CONTRACT_COST_PRODUCT set CLOSED=1 where ID=?", new Object[]{pdtMap.getString("SHIPPING_CONTRACT_COST_ID")});
-               // DBSql.update(conn, "update BO_EU_DNCTT_CONTRACT_COST_PRODUCT set SHIPPING_CONTRACT_COST_ID=NULL where ID=?", new Object[]{pdtMap.getString("ID")});
+                // DBSql.update(conn, "update BO_EU_DNCTT_CONTRACT_COST_PRODUCT set SHIPPING_CONTRACT_COST_ID=NULL where ID=?", new Object[]{pdtMap.getString("ID")});
             }
 
 
@@ -354,8 +341,7 @@ public class ivtOrderController {
         } catch (SQLException e) {
             conn.rollback();
         } finally {
-            if (conn != null)
-                conn.close();
+            if (conn != null) conn.close();
         }
 
 
@@ -636,9 +622,35 @@ public class ivtOrderController {
             purchaseOrder.setBindId(processInstance.getId());
             purchaseOrder.set("SUBMIT_TIME", getCurrentDateTime());//提交时间
             purchaseOrder.set("SUBMITTED_RESOURCE_ID", uc.getUID());//提交人
-            //采购客户
-            String PURCHASE_ACCOUNT_ID = costList.get(0).getString("ACCOUNT_ID");
-            purchaseOrder.set("PURCHASE_ACCOUNT_ID", PURCHASE_ACCOUNT_ID);
+
+            Set<String> PURCHASE_ACCOUNT_ID = new HashSet<>();   //采购客户
+            Set<String> VENDOR_ACCOUNT_ID = new HashSet<>();  //   供应商
+
+            for (RowMap cost : costList) {
+                String account_id = cost.getString("ACCOUNT_ID");
+                if (StringUtils.isNotBlank(account_id)) {
+                    PURCHASE_ACCOUNT_ID.add(account_id);
+                } else {
+                    account_id = DBSql.getString("select ACCOUNT_ID from BO_EU_DNCTT_CONTRACT where ID=?", new Object[]{cost.getString("CONTRACT_ID")});
+                    if (StringUtils.isNotBlank(account_id)) {
+                        DBSql.update("UPDATE BO_EU_DNCTT_CONTRACT_COST SET ACCOUNT_ID=? WHERE ID=?", new Object[]{account_id, cost.getString("ID")});
+                        PURCHASE_ACCOUNT_ID.add(account_id);
+                    }
+                }
+
+                String PRODUCT_ID = cost.getString("PRODUCT_ID");
+                String vendor_id = DBSql.getString("select VENDOR_ACCOUNT_ID from BO_EU_DNIVT_PRODUCT_VENDOR where PRODUCT_ID=? or PRODUCT_ID in (select BINDID FROM BO_EU_DNIVT_PRODUCT WHERE ID=?)", new Object[]{PRODUCT_ID, PRODUCT_ID});
+
+                if (StringUtils.isNotBlank(vendor_id)) {
+                    VENDOR_ACCOUNT_ID.add(vendor_id);
+                }
+            }
+
+            if (PURCHASE_ACCOUNT_ID.size() == 1)
+                purchaseOrder.set("PURCHASE_ACCOUNT_ID", PURCHASE_ACCOUNT_ID.stream().findFirst());
+            if (VENDOR_ACCOUNT_ID.size() == 1)
+                purchaseOrder.set("VENDOR_ACCOUNT_ID", VENDOR_ACCOUNT_ID.stream().findFirst());
+
 
             SDK.getBOAPI().createDataBO("BO_EU_DNIVT_ORDER", purchaseOrder, uc, conn);
             //采购产品
@@ -648,6 +660,8 @@ public class ivtOrderController {
 
                 //采购数量需要扣除拣货数量
                 int purchase_quantity = cost.getInt("QUANTITY") - DBSql.getInt("select sum(QUANTITY) AS QU from BO_EU_DNCTT_CONTRACT_COST_PRODUCT where CONTRACT_COST_ID=? and CLOSED=0", new Object[]{cost.getString("ID")});
+                if (purchase_quantity <= 0)
+                    continue;
 
                 purchaseOrderProduct.set("PURCHASE_ACCOUNT_ID", cost.getString("ACCOUNT_ID"));
                 purchaseOrderProduct.set("NAME", cost.getString("NAME"));
@@ -698,4 +712,18 @@ public class ivtOrderController {
         SimpleDateFormat sdf = new SimpleDateFormat(DATE_TIME_FORMAT);
         return sdf.format(new Date());
     }
+
+    /**
+     * 修改采购订单状态
+     * @param uc
+     * @param orderId
+     * @return
+     */
+    @Mapping("com.awspaas.user.apps.donenow_ivt.updateOrderStatus")
+    public ResponseObject updateOrderStatus(UserContext uc, String orderId) {
+        formStatusCache cache = formStatusCache.getInstance();
+        cache.put(orderId, new Date());
+        return ResponseObject.newOkResponse();
+    }
+
 }

+ 49 - 0
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/job/clearOrderJob.java

@@ -0,0 +1,49 @@
+package com.awspaas.user.apps.donenow_ivt.job;
+
+import com.actionsoft.bpms.commons.database.RowMap;
+import com.actionsoft.bpms.util.DBSql;
+import com.actionsoft.sdk.local.SDK;
+import com.awspaas.user.apps.donenow_ivt.cache.formStatusCache;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+
+import java.util.Date;
+import java.util.List;
+
+public class clearOrderJob implements Job {
+    /**
+     *
+     * @param jobExecutionContext
+     * @throws JobExecutionException
+     */
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        List<RowMap> list = DBSql.getMaps("SELECT * FROM BO_EU_DNIVT_ORDER WHERE (VENDOR_ACCOUNT_ID IS NULL OR VENDOR_ACCOUNT_ID='') AND (PURCHASE_ACCOUNT_ID IS NULL OR PURCHASE_ACCOUNT_ID='') ORDER BY CREATEDATE");
+        Long CURRENT_TIME = new Date().getTime();
+
+        formStatusCache cache = formStatusCache.getInstance();
+
+        for (RowMap rowMap : list) {
+            Date CREATEDATE = rowMap.getDate("CREATEDATE");
+            //跳过创建5分钟之内的
+            if (CURRENT_TIME - CREATEDATE.getTime() < 5 * 60 * 1000) {
+                continue;
+            }
+
+            //1天前的直接删除
+            if (CURRENT_TIME - CREATEDATE.getTime() > 24 * 60 * 60 * 1000) {
+                SDK.getProcessAPI().deleteById(rowMap.getString("BINDID"), "admin");
+            }
+
+            Date UPDATE_TIME = cache.get(rowMap.getString("BINDID"));
+            if (UPDATE_TIME == null) {
+                SDK.getProcessAPI().deleteById(rowMap.getString("BINDID"), "admin");
+            } else {
+                if (CURRENT_TIME - UPDATE_TIME.getTime() > 5 * 60 * 1000) {
+                    SDK.getProcessAPI().deleteById(rowMap.getString("BINDID"), "admin");
+                }
+            }
+        }
+    }
+}

+ 99 - 0
com.awspaas.user.apps.donenow_sys/src/com/awspaas/user/apps/donenow_sys/controller/sysController.java

@@ -5,16 +5,26 @@ import com.actionsoft.bpms.bo.design.model.BOItemModel;
 import com.actionsoft.bpms.bo.design.model.BOModel;
 import com.actionsoft.bpms.bo.engine.BO;
 import com.actionsoft.bpms.commons.database.RowMap;
+import com.actionsoft.bpms.commons.formfile.model.delegate.FormFile;
 import com.actionsoft.bpms.commons.mvc.view.ResponseObject;
 import com.actionsoft.bpms.server.UserContext;
 import com.actionsoft.bpms.server.bind.annotation.Controller;
 import com.actionsoft.bpms.server.bind.annotation.Mapping;
+import com.actionsoft.bpms.server.fs.DCContext;
 import com.actionsoft.bpms.util.DBSql;
 import com.actionsoft.sdk.local.SDK;
 import org.apache.commons.lang3.StringUtils;
 
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
 import java.sql.Connection;
 import java.sql.SQLException;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 
 @Controller
@@ -101,4 +111,93 @@ public class sysController {
         }
         return ResponseObject.newOkResponse();
     }
+
+
+    /**
+     * 发版提交,替换应用下jar包
+     * @param ctx
+     * @param boId
+     * @return
+     */
+    @Mapping("com.awspaas.user.apps.donenow_sys_fbSubmit")
+    public String fbSubmit(UserContext ctx, String boId) {
+        if (ctx.getUID().equals("admin") == false)
+            return "无权限";
+
+        BO FBjar = SDK.getBOAPI().get("BO_EU_DNSYS_JAR", boId);
+        if (FBjar == null)
+            return "请保存刷新后重试";
+        if (FBjar.getString("STATUS").equals("未发版") == false) {
+            return "已发版";
+        }
+
+        String appId = FBjar.getString("APP_ID");
+        if (StringUtils.isBlank(appId))
+            return "请选择要发版的app";
+
+        System.out.println("开始发版appId:" + appId + ";boId:" + boId);
+        try {
+            List<FormFile> jars = SDK.getBOAPI().getFiles(boId, "SCWJ");
+            FormFile jar = jars.get(0);
+            DCContext dcContext = SDK.getBOAPI().getFileDCContext(jar);
+
+            System.out.println("jar--path:" + dcContext.getPath());
+            System.out.println("jar--fileName:" + dcContext.getFileName());
+            System.out.println("jar--filePath:" + dcContext.getFilePath());
+
+            String currentDir = System.getProperty("user.dir");
+            System.out.println("当前工作目录: " + currentDir);
+
+            // 源文件
+            Path source = Paths.get(dcContext.getFilePath());
+            currentDir = currentDir.replace("bin", "apps");
+
+            // 构建目标文件路径
+            Path targetDirectory = Paths.get(currentDir, "install", appId, "lib");
+            //如果路径不存在,则报错
+            if (!Files.exists(targetDirectory)) {
+                return "请选择要发版的app";
+            }
+
+
+            Path target = targetDirectory.resolve(source.getFileName());
+
+            // 检查目标文件是否存在
+            File targetFile = target.toFile();
+            if (targetFile.exists()) {
+                System.out.println("目标文件已存在,尝试重命名...");
+
+                String fileName = targetFile.getName();
+                String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
+                String newFileName = fileName + "_" + timestamp;
+
+                // 构建新文件路径
+                Path newFilePath = targetDirectory.resolve(newFileName);
+
+                // 重命名已存在的文件
+                Files.move(target, newFilePath, StandardCopyOption.REPLACE_EXISTING);
+                System.out.println("已重命名现有文件为: " + newFileName);
+            }
+            System.out.println("文件已移动到目标目录: " + target);
+            FBjar.set("STATUS", "已发版--成功");
+            SDK.getBOAPI().update("BO_EU_HTJAR", FBjar);
+            Files.move(source, target, StandardCopyOption.REPLACE_EXISTING);
+
+            //输出 targetDirectory 下面所有文件名
+            /*
+            System.out.println("合同lib目录下的文件列表:");
+            for (File file : targetDirectory.toFile().listFiles()) {
+                System.out.println(file.getName());
+                System.out.println(file.getAbsolutePath());
+            }
+            */
+            return "成功";
+        } catch (IOException e1) {
+            return "失败";
+        } catch (Exception e2) {
+            return "失败";
+        } finally {
+            System.out.println("结束");
+        }
+    }
 }

+ 13 - 0
com.awspaas.user.apps.donenow_sys/src/com/awspaas/user/apps/donenow_sys/controller/testController.java

@@ -1,8 +1,12 @@
 package com.awspaas.user.apps.donenow_sys.controller;
 
+import com.actionsoft.bpms.bo.engine.BO;
+import com.actionsoft.bpms.commons.formfile.model.delegate.FormFile;
 import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate;
+import com.actionsoft.bpms.server.UserContext;
 import com.actionsoft.bpms.server.bind.annotation.Controller;
 import com.actionsoft.bpms.server.bind.annotation.Mapping;
+import com.actionsoft.bpms.server.fs.DCContext;
 import com.actionsoft.sdk.local.SDK;
 import com.alibaba.fastjson.JSONObject;
 import org.apache.commons.lang3.StringUtils;
@@ -15,13 +19,21 @@ import javax.crypto.KeyGenerator;
 import javax.crypto.SecretKey;
 import javax.crypto.spec.IvParameterSpec;
 import javax.crypto.spec.SecretKeySpec;
+import java.io.File;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
 import java.security.SecureRandom;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.Base64;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @Controller
@@ -541,4 +553,5 @@ public class testController {
         }
     }
 
+
 }