Browse Source

1、拣货时自动带出产品序列号;2、新增合同服务后,自动新增合同产品;

zhangyao 4 months ago
parent
commit
9bc33c65c6

BIN
com.awspaas.user.apps.donenow_ctt/lib/com.awspaas.user.apps.donenow_ctt.jar


+ 3 - 1
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/Plugins.java

@@ -11,7 +11,7 @@ import java.util.List;
 
 public class Plugins implements PluginListener {
     /**
-     *
+     *注册插件
      * @param appContext
      * @return
      */
@@ -24,6 +24,8 @@ public class Plugins implements PluginListener {
                 "获取表单字段数据", "获取表单字段数据"));
         list.add(new AtFormulaPluginProfile("数据库", "@getSNListSql(*sql)", getFormField.class.getName(),
                 "把输入的逗号分割sn字符串转换成SQL", "sql:查询语句或者字符串"));
+        list.add(new AtFormulaPluginProfile("donenow合同", "@getPickSNListSql(*warehouseProductId,*quantity,*type)", getFormField.class.getName(),
+                "合同产品拣货时获取产品序列号", "warehouseProductId:库存产品Id,quantity:拣货数量,type:1或2"));
         return list;
     }
 }

+ 91 - 0
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/at/getPickSNListSql.java

@@ -0,0 +1,91 @@
+package com.awspaas.user.apps.donenow_ctt.at;
+
+import com.actionsoft.bpms.commons.at.AbstExpression;
+import com.actionsoft.bpms.commons.at.ExpressionContext;
+import com.actionsoft.bpms.commons.database.RowMap;
+import com.actionsoft.bpms.util.DBSql;
+import com.actionsoft.exception.AWSExpressionException;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class getPickSNListSql extends AbstExpression {
+    public getPickSNListSql(ExpressionContext atContext, String expressionValue) {
+        super(atContext, expressionValue);
+    }
+
+    /**
+     * 合同产品拣货
+     * @param s
+     * @return
+     * @throws AWSExpressionException
+     */
+    @Override
+    public String execute(String s) throws AWSExpressionException {
+        String WAREHOUSE_PRODUCT_ID = getParameter(s, 1).trim();// 仓库产品ID
+        int QUANTITY = Integer.parseInt(getParameter(s, 2).trim());// 拣货数量
+        int TYPE = Integer.parseInt(getParameter(s, 3).trim());//1 返回客户选择  2 返回已选择
+        //库存数量
+        RowMap stockMap = DBSql.getMap("SELECT * FROM BO_EU_DNIVT_WAREHOUSE_PRODUCT WHERE ID=?", new Object[]{WAREHOUSE_PRODUCT_ID});
+
+        //库存产品
+        List<RowMap> lotList = DBSql.getMaps("SELECT b.* FROM bo_eu_dnivt_warehouse_product a JOIN BO_EU_DNIVT_WAREHOUSE_PRODUCT_LOT b ON a.BINDID=b.BINDID WHERE b.QUANTITY>0 AND a.ID=? ORDER BY b.IN_DATE", new Object[]{WAREHOUSE_PRODUCT_ID});
+
+
+        //已被拣货数量
+        List<RowMap> pickList = DBSql.getMaps("SELECT a.* from BO_EU_DNCTT_CONTRACT_COST_PRODUCT a JOIN BO_EU_DNCTT_CONTRACT_COST b ON a.BINDID=b.BINDID WHERE a.WAREHOUSE_ID=? AND b.PRODUCT_ID=?", new Object[]{stockMap.getString("WAREHOUSE_ID"), stockMap.getString("PRODUCT_ID")});
+        List<String> selectedSns = new ArrayList<>();//默认选择
+        for (RowMap lotMap : lotList) {
+            String lotSNs = lotMap.getString("SN");
+            List<String> lotsns = new ArrayList<>();//本批次允许拣货数量
+            for (String SN : lotSNs.split(",")) {
+                boolean isPicked = false;
+                for (RowMap pickMap : pickList) {
+                    String pickSNs = pickMap.getString("SN");
+                    for (String pickSN : pickSNs.split(",")) {
+                        if (SN.equals(pickSN)) {
+                            //已被拣货
+                            isPicked = true;
+                            break;
+                        }
+                    }
+                    if (isPicked)
+                        break;
+                }
+                if (!isPicked) {
+                    lotsns.add(SN);
+                }
+            }
+            if (lotsns.size() > QUANTITY)//允许挑选
+            {
+                if (TYPE == 1) {
+                    //返回到客户选择
+                    String snSql = null;
+                    int i = 0;
+                    for (String sn : lotsns) {
+                        if (i == 0) {
+                            snSql = "SELECT '" + sn + "' AS sn";
+                        } else {
+                            snSql += " UNION SELECT '" + sn + "' AS sn";
+                        }
+                        i++;
+                    }
+                    return "SELECT tt.* FROM (" + snSql + ") as tt WHERE tt.sn IS NOT NULL";
+                } else if (TYPE == 2) {
+                    return StringUtils.join(selectedSns, ",");
+                }
+            } else {
+                //全部拣货,不允许挑选
+                QUANTITY -= lotsns.size();
+                selectedSns.addAll(lotsns);
+            }
+        }
+        if (TYPE == 1)
+            return "SELECT tt.* FROM (SELECT NULL AS sn) as tt WHERE tt.sn IS NOT NULL";
+        if (TYPE == 2)
+            return StringUtils.join(selectedSns, ",");
+
+        return null;
+    }
+}

+ 61 - 2
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/controller/contractCostController.java

@@ -2,6 +2,7 @@ package com.awspaas.user.apps.donenow_ctt.controller;
 
 import com.actionsoft.bpms.bo.engine.BO;
 import com.actionsoft.bpms.bpmn.engine.model.run.delegate.ProcessInstance;
+import com.actionsoft.bpms.commons.database.RowMap;
 import com.actionsoft.bpms.commons.mvc.view.ResponseObject;
 import com.actionsoft.bpms.server.UserContext;
 import com.actionsoft.bpms.server.bind.annotation.Controller;
@@ -9,8 +10,11 @@ import com.actionsoft.bpms.server.bind.annotation.Mapping;
 import com.actionsoft.bpms.util.DBSql;
 import com.actionsoft.sdk.local.SDK;
 import com.actionsoft.sdk.local.api.Logger;
+import org.apache.commons.lang3.StringUtils;
 
 import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
 
 @Controller
 public class contractCostController {
@@ -174,6 +178,61 @@ public class contractCostController {
         return responseObject;
     }
 
-
-
+    /**
+     * 获取拣货单序列号
+     * @param uc
+     * @param bindid
+     * @param warehouseProductId
+     * @param quantity
+     * @return
+     */
+    @Mapping(value = "com.awspaas.user.apps.donenow_ctt.getPickSNList")
+    public ResponseObject getPickSNList(UserContext uc, String bindid, String warehouseProductId, Integer quantity) {
+        //库存数量
+        RowMap stockMap = DBSql.getMap("SELECT * FROM BO_EU_DNIVT_WAREHOUSE_PRODUCT WHERE ID=?", new Object[]{warehouseProductId});
+        //库存产品
+        List<RowMap> lotList = DBSql.getMaps("SELECT b.* FROM bo_eu_dnivt_warehouse_product a JOIN BO_EU_DNIVT_WAREHOUSE_PRODUCT_LOT b ON a.BINDID=b.BINDID WHERE b.QUANTITY>0 AND a.ID=? ORDER BY b.IN_DATE", new Object[]{warehouseProductId});
+        //已被拣货数量
+        List<RowMap> pickList = DBSql.getMaps("SELECT a.* from BO_EU_DNCTT_CONTRACT_COST_PRODUCT a JOIN BO_EU_DNCTT_CONTRACT_COST b ON a.BINDID=b.BINDID WHERE a.WAREHOUSE_ID=? AND b.PRODUCT_ID=?", new Object[]{stockMap.getString("WAREHOUSE_ID"), stockMap.getString("PRODUCT_ID")});
+
+        List<String> selectedSns = new ArrayList<>();//默认选择
+        for (RowMap lotMap : lotList) {
+            String lotSNs = lotMap.getString("SN");
+            List<String> lotsns = new ArrayList<>();//本批次允许拣货数量
+            for (String SN : lotSNs.split(",")) {
+                boolean isPicked = false;
+                for (RowMap pickMap : pickList) {
+                    String pickSNs = pickMap.getString("SN");
+                    for (String pickSN : pickSNs.split(",")) {
+                        if (SN.equals(pickSN)) {
+                            //已被拣货
+                            isPicked = true;
+                            break;
+                        }
+                    }
+                    if (isPicked)
+                        break;
+                }
+                if (!isPicked) {
+                    lotsns.add(SN);
+                }
+            }
+            if (lotsns.size() > quantity)//允许挑选
+            {
+                for (String sn : lotsns) {
+                    BO bo = new BO();
+                    bo.set("SN", sn);
+                    bo.setBindId(bindid);
+                    SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_PRODUCT_PICKSN", bo, null);
+                }
+            } else {
+                //全部拣货,不允许挑选
+                quantity -= lotsns.size();
+                selectedSns.addAll(lotsns);
+            }
+        }
+        ResponseObject responseObject = ResponseObject.newOkResponse();
+        responseObject.setData(StringUtils.join(selectedSns, ","));
+        return responseObject;
+    }
 }

+ 61 - 28
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/event/costPickFormAfterSave.java

@@ -10,6 +10,8 @@ import com.actionsoft.sdk.local.SDK;
 import org.apache.commons.lang3.StringUtils;
 
 import java.sql.Connection;
+import java.util.LinkedHashSet;
+import java.util.Set;
 
 public class costPickFormAfterSave extends ExecuteListener {
     public String getDescription() {
@@ -28,6 +30,38 @@ public class costPickFormAfterSave extends ExecuteListener {
         String warehouseProductId = pickBO.getString("WAREHOUSE_PRODUCT_ID");
         String contractCostId = pickBO.getString("CONTRACT_COST_ID");
 
+        Set<String> pickSerials = new LinkedHashSet<>();
+        String pick_sns = pickBO.getString("SERIAL_NUMBERS");
+        String PICKED_SNS = pickBO.getString("PICKED_SNS");
+
+        // 处理PICKED_SNS不为空的情况
+        if (StringUtils.isNotBlank(PICKED_SNS)) {
+            // 1. 处理originalSerials为null的情况,转为空字符串避免拼接出"null"
+            String normalizedOriginals = StringUtils.defaultString(pick_sns, "");
+
+            // 2. 拼接两个字符串,避免在originalSerials为空时产生多余逗号(如"picked,")
+            String combined;
+            if (normalizedOriginals.isEmpty()) {
+                combined = PICKED_SNS;
+            } else {
+                combined = PICKED_SNS + "," + normalizedOriginals;
+            }
+
+            // 3. 分割并去重,用LinkedHashSet保持插入顺序(首次出现的元素保留)
+
+            for (String serial : combined.split(",")) {
+                // 过滤空字符串(避免连续逗号产生的空元素)
+                if (StringUtils.isNotBlank(serial)) {
+                    pickSerials.add(serial);
+                }
+            }
+
+            // 4. 拼接去重后的结果,更新回BO
+            pick_sns = StringUtils.join(pickSerials, ",");
+            pickBO.set("SERIAL_NUMBERS", pick_sns);
+        }
+
+
         int PICK_QUANTITY = ObjToInt(pickBO.get("PICK_QUANTITY"));//拣货数量
         //验库存
         //可用库存
@@ -84,15 +118,14 @@ public class costPickFormAfterSave extends ExecuteListener {
             costProductBO.set("WAREHOUSE_ID", WAREHOUSE_ID);
             costProductBO.set("CONTRACT_COST_ID", contractCostId);
             costProductBO.set("QUANTITY", pickBO.get("PICK_QUANTITY"));
-            costProductBO.set("SN", pickBO.get("SERIAL_NUMBERS"));
+            costProductBO.set("SN", pick_sns);
 
             costProductBO.set("STATUS_ID", STATUS_ID);
 
             costProductBO.set("OLD_QUANTITY", costProductBO.get("QUANTITY"));//配送数量
             SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_COST_PRODUCT", costProductBO, processExecutionContext.getUserContext(), conn);
-            String SERIAL_NUMBERS = pickBO.getString("SERIAL_NUMBERS");
-            if (StringUtils.isNotBlank(SERIAL_NUMBERS)) {
-                for (String serialNumber : SERIAL_NUMBERS.split(",")) {
+            if (StringUtils.isNotBlank(pick_sns)) {
+                for (String serialNumber : pickSerials) {
                     BO snBO = new BO();
                     snBO.setBindId(costProductBO.getBindId());
                     snBO.set("CONTRACT_COST_PRODUCT_ID", costProductBO.getId());
@@ -146,14 +179,14 @@ public class costPickFormAfterSave extends ExecuteListener {
                 SDK.getBOAPI().create("BO_EU_DNIVT_TRANSFER", ivtTransfer, transfeProcessIns, processExecutionContext.getUserContext(), conn);
 
                 //BO_EU_DNIVT_TRANSFER_SN
-                if (StringUtils.isNotBlank(pickBO.getString("SERIAL_NUMBERS")))
-                    for (String serialNumber : pickBO.getString("SERIAL_NUMBERS").split(",")) {
-                        BO snBO = new BO();
-                        snBO.setBindId(ivtTransfer.getBindId());
-                        snBO.set("TRANSFER_ID", ivtTransfer.getId());
-                        snBO.set("SN", serialNumber);
-                        SDK.getBOAPI().createDataBO("BO_EU_DNIVT_TRANSFER_SN", snBO, processExecutionContext.getUserContext(), conn);
-                    }
+
+                for (String serialNumber : pickSerials) {
+                    BO snBO = new BO();
+                    snBO.setBindId(ivtTransfer.getBindId());
+                    snBO.set("TRANSFER_ID", ivtTransfer.getId());
+                    snBO.set("SN", serialNumber);
+                    SDK.getBOAPI().createDataBO("BO_EU_DNIVT_TRANSFER_SN", snBO, processExecutionContext.getUserContext(), conn);
+                }
 
 
                 BO toWarehouseProductBO = SDK.getBOAPI().query("BO_EU_DNIVT_WAREHOUSE_PRODUCT").connection(conn).addQuery("PRODUCT_ID=", pickBO.getString("PRODUCT_ID")).addQuery("WAREHOUSE_ID=", WAREHOUSE_ID).detail();
@@ -176,10 +209,10 @@ public class costPickFormAfterSave extends ExecuteListener {
                 SDK.getBOAPI().update("BO_EU_DNIVT_WAREHOUSE_PRODUCT", fromWarehouseProductBO, conn);
 
                 //BO_EU_DNIVT_WAREHOUSE_PRODUCT_SN
-                if (StringUtils.isNotBlank(pickBO.getString("SERIAL_NUMBERS")))
-                    for (String serialNumber : pickBO.getString("SERIAL_NUMBERS").split(",")) {
-                        DBSql.update(conn, "update BO_EU_DNIVT_WAREHOUSE_PRODUCT_SN set WAREHOUSE_PRODUCT_ID=? where WAREHOUSE_PRODUCT_ID=? and SN=?", new Object[]{toWarehouseProductBO.getId(), fromWarehouseProductBO.getId(), serialNumber});
-                    }
+
+                for (String serialNumber : pickSerials) {
+                    DBSql.update(conn, "update BO_EU_DNIVT_WAREHOUSE_PRODUCT_SN set WAREHOUSE_PRODUCT_ID=? where WAREHOUSE_PRODUCT_ID=? and SN=?", new Object[]{toWarehouseProductBO.getId(), fromWarehouseProductBO.getId(), serialNumber});
+                }
 
             } else if (pickBO.getString("PICK_TYPE").equals("2"))//库存转移给客户
             {
@@ -203,14 +236,14 @@ public class costPickFormAfterSave extends ExecuteListener {
                 ivtTransfer.set("QUANTITY", pickBO.get("PICK_QUANTITY"));
                 SDK.getBOAPI().create("BO_EU_DNIVT_TRANSFER", ivtTransfer, transfeProcessIns, processExecutionContext.getUserContext(), conn);
                 //BO_EU_DNIVT_TRANSFER_SN
-                if (StringUtils.isNotBlank(pickBO.getString("SERIAL_NUMBERS")))
-                    for (String serialNumber : pickBO.getString("SERIAL_NUMBERS").split(",")) {
-                        BO snBO = new BO();
-                        snBO.setBindId(ivtTransfer.getBindId());
-                        snBO.set("TRANSFER_ID", ivtTransfer.getId());
-                        snBO.set("SN", serialNumber);
-                        SDK.getBOAPI().createDataBO("BO_EU_DNIVT_TRANSFER_SN", snBO, processExecutionContext.getUserContext(), conn);
-                    }
+
+                for (String serialNumber : pickSerials) {
+                    BO snBO = new BO();
+                    snBO.setBindId(ivtTransfer.getBindId());
+                    snBO.set("TRANSFER_ID", ivtTransfer.getId());
+                    snBO.set("SN", serialNumber);
+                    SDK.getBOAPI().createDataBO("BO_EU_DNIVT_TRANSFER_SN", snBO, processExecutionContext.getUserContext(), conn);
+                }
 
 
                 //减少库存
@@ -219,10 +252,10 @@ public class costPickFormAfterSave extends ExecuteListener {
                 SDK.getBOAPI().update("BO_EU_DNIVT_WAREHOUSE_PRODUCT", fromWarehouseProductBO, conn);
 
                 //BO_EU_DNIVT_WAREHOUSE_PRODUCT_SN
-                if (StringUtils.isNotBlank(pickBO.getString("SERIAL_NUMBERS")))
-                    for (String serialNumber : pickBO.getString("SERIAL_NUMBERS").split(",")) {
-                        DBSql.update(conn, "delete from BO_EU_DNIVT_WAREHOUSE_PRODUCT_SN where WAREHOUSE_PRODUCT_ID=? and SN=?", new Object[]{fromWarehouseProductBO.getId(), serialNumber});
-                    }
+
+                for (String serialNumber : pickSerials) {
+                    DBSql.update(conn, "delete from BO_EU_DNIVT_WAREHOUSE_PRODUCT_SN where WAREHOUSE_PRODUCT_ID=? and SN=?", new Object[]{fromWarehouseProductBO.getId(), serialNumber});
+                }
             }
 
             conn.commit();

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

@@ -152,6 +152,9 @@ public class contractService {
             if (TYPE_ID.equals(cttConstant.CONTRACT_TYPE_SERVICE)) // 如果是服务合同
             {
                 try {
+
+                    AddContractServiceProduct(uc, dto);//新增服务或者服务包--关联产品
+
                     boolean flag = AddServiceServiceBundle(uc, dto);//新增服务或者服务包
 
                     if (!flag) {
@@ -577,6 +580,99 @@ public class contractService {
         return true;
     }
 
+    /**
+     * 一个服务对应添加一个合同产品
+     * @param uc
+     * @return
+     */
+    private boolean AddContractServiceProduct(UserContext uc, RowMap contract) throws SQLException {
+        contractServiceLogger.info("新增服务或服务包");
+
+        Connection conn = null;
+        try {
+            conn = DBSql.open();
+            conn.setAutoCommit(false);
+            //获取服务列表
+            List<BO> serviceList = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE").connection(conn).addQuery("BINDID=", contract.get("BINDID")).list();
+
+            for (BO service : serviceList) {
+
+                if (service.getString("OBJECT_TYPE").equals("2"))//服务包
+                {
+                    String serviceIDS = DBSql.getString(conn, "select SERVICE_ID from BO_EU_DNIVT_SERVICE_BUNDLE where ID=?", new Object[]{service.getString("OBJECT_ID")});
+                    for (String serviceID : serviceIDS.split(",")) {
+                        String contractCostId = DBSql.getString(conn, "select ID from BO_EU_DNCTT_CONTRACT_COST where CONTRACT_ID=? and SERVICE_ID=? and PRODUCT_ID in(select PRODUCT_ID from BO_EU_DNIVT_SERVICE where ID=?)", new Object[]{contract.getString("ID"), service.getString("ID"), serviceID});
+
+                        Map<String, String> contractCost = new HashMap<String, String>();
+                        contractCost.put("ID", contractCostId);
+                        contractCost.put("SERVICE_ID", service.getString("ID"));
+                        contractCost.put("serviceID", serviceID);
+                        contractCost.put("CONTRACT_ID", contract.getString("ID"));
+                        AddContractServiceProduct(uc, conn, contractCost);
+                    }
+                } else {
+                    String contractCostId = DBSql.getString(conn, "select ID from BO_EU_DNCTT_CONTRACT_COST where CONTRACT_ID=? and SERVICE_ID=?", new Object[]{contract.getString("ID"), service.getString("ID")});
+                    Map<String, String> contractCost = new HashMap<String, String>();
+                    contractCost.put("ID", contractCostId);
+                    contractCost.put("SERVICE_ID", service.getString("ID"));
+                    contractCost.put("serviceID", service.getString("OBJECT_ID"));
+                    contractCost.put("CONTRACT_ID", contract.getString("ID"));
+                    AddContractServiceProduct(uc, conn, contractCost);
+                }
+            }
+            conn.commit();
+            return true;
+        } catch (SQLException e) {
+            e.printStackTrace();
+            conn.rollback();
+        } finally {
+            if (conn != null)
+                DBSql.close(conn);
+        }
+        return false;
+    }
+
+
+    /**
+     * 新增合同产品
+     * @param uc
+     * @param service
+     * @return
+     */
+    private boolean AddContractServiceProduct(UserContext uc, Connection conn, Map<String, String> service) {
+        contractServiceLogger.info("新增合同产品");
+        BO contractCost = null;
+        if (service.get("ID") != null) {
+            contractCost = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_COST", service.get("ID"));
+        } else {
+            ProcessInstance contractInstance = SDK.getProcessAPI().createBOProcessInstance("obj_87c6ef75d18f44cc8e85d3d4e818c303", uc.getUID(), "新增合同产品");
+            contractCost = new BO();
+            contractCost.setBindId(contractInstance.getId());
+        }
+        contractCost.set("CONTRACT_ID", service.get("CONTRACT_ID"));
+        contractCost.set("SERVICE_ID", service.get("SERVICE_ID"));
+        contractCost.set("PRODUCT_ID", DBSql.getString(conn, "select PRODUCT_ID from BO_EU_DNIVT_SERVICE where ID=?", new Object[]{service.get("serviceID")}));
+
+        BO product = SDK.getBOAPI().get("BO_EU_DNIVT_PRODUCT", contractCost.getString("PRODUCT_ID"));
+
+        contractCost.set("NAME", product.getString("NAME"));
+
+        contractCost.set("DESCRIPTION", product.getString("DESCRIPTION"));
+        contractCost.set("COST_CODE_ID", product.getString("COST_CODE_ID"));
+        contractCost.set("UNIT_COST", product.getString("UNIT_COST"));
+        contractCost.set("UNIT_PRICE", product.getString("UNIT_PRICE"));
+        contractCost.set("TAX_CATEGORY_ID", DBSql.getString("select TAX_CATEGORY_ID from BO_EU_DND_COST_CODE where ID=?", new Object[]{product.getString("COST_CODE_ID")}));
+        contractCost.set("COST_CODE_NAME", DBSql.getString("select NAME from BO_EU_DND_COST_CODE where ID=?", new Object[]{product.getString("COST_CODE_ID")}));
+        contractCost.set("PRODUCT_NAME", product.getString("NAME"));
+
+        if (contractCost.isNew()) {
+            SDK.getBOAPI().create("BO_EU_DNCTT_CONTRACT_COST", contractCost, contractCost.getBindId(), uc.getUID());
+        } else {
+            SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_COST", contractCost);
+        }
+        return false;
+    }
+
     private static String LocalDateYYYYMMDD(LocalDate date) {
         return date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
     }