Просмотр исходного кода

商机下载轮询,修改轮询接口后的程序调整。

will.chen 7 лет назад
Родитель
Сommit
431153a2e5

+ 363 - 0
src/main/java/com/uas/erp/schedular/publicinquiry/domain/InquiryEnRemind.java

@@ -0,0 +1,363 @@
+package com.uas.erp.schedular.publicinquiry.domain;
+
+import com.uas.erp.schedular.b2b.domain.KeyEntity;
+
+import javax.persistence.*;
+import java.util.Date;
+
+public class InquiryEnRemind extends KeyEntity{
+
+    /**
+     * id
+     */
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "ir_id")
+    private Long id;
+
+    /**
+     * 询价单号
+     */
+    @Column(name = "ir_code")
+    private String code;
+
+    /**
+     * 询价企业名称
+     */
+    @Column(name = "ir_enname")
+    private String enName;
+
+    /**
+     * 询价企业UU
+     */
+    @Column(name = "ir_enuu")
+    private Long enUU;
+
+    /**
+     * 联系人
+     */
+    @Column(name = "ir_username")
+    private String userName;
+
+    /**
+     * 联系方式
+     */
+    @Column(name = "ir_usertel")
+    private String userTel;
+
+    /**
+     * 询价品牌
+     */
+    @Column(name = "ir_brand")
+    private String brand;
+
+    /**
+     * 询价品牌
+     */
+    @Column(name = "ir_inbrand")
+    private String inbrand;
+
+    /**
+     * 原厂型号
+     */
+    @Column(name = "ir_cmpcode")
+    private String cmpCode;
+
+    /**
+     * 物料规格
+     */
+    @Column(name = "ir_spec")
+    private String spec;
+
+    /**
+     * 物料名称
+     */
+    @Column(name = "ir_title")
+    private String prodTitle;
+
+    /**
+     * 需求数量
+     */
+    @Column(name = "ir_needqty")
+    private Double needQty;
+
+    /**
+     * 发布日期
+     */
+    @Column(name = "ir_redate")
+    private Date reDate;
+
+    /**
+     * 截止日期
+     */
+    @Column(name = "ir_endate")
+    private Date endDate;
+
+    /**
+     * 记录来源id
+     */
+    @Column(name = "ir_itemid")
+    private Long itemId;
+
+    /**
+     * 记录来源询价单id
+     */
+    @Column(name = "ir_inid")
+    private Long inid;
+
+    /**
+     * 询价单信息
+     */
+    /*@OneToOne
+    @JoinColumn(name = "ir_inid", insertable = false, updatable = false)
+    private PurcInquiry inquiry;*/
+
+    /**
+     * 记录转报价后的id
+     */
+    @Column(name = "ir_newid")
+    private Long newId;
+
+    /**
+     * 单据状态
+     * <note>
+     * {@code 100 在录入}
+     * {@code 101 已提交}
+     * {@code 102 已审核}
+     * {@code 103 未通过}
+     * {@code 104 已通过}
+     * </note>
+     */
+    @Column(name = "ir_status")
+    private Integer status;
+
+    /**
+     * 被推荐的企业UU
+     */
+    @Column(name = "ir_venduu")
+    private Long vendUU;
+
+    @Column(name = "ir_remindstatus")
+    private Integer remindStatus;
+
+    /**
+     * 记录日期
+     */
+    @Column(name = "ir_date")
+    private Date date;
+
+    /**
+     * 剩余时间
+     */
+    @Transient
+    private Long remainingTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getEnName() {
+        return enName;
+    }
+
+    public void setEnName(String enName) {
+        this.enName = enName;
+    }
+
+    public Long getEnUU() {
+        return enUU;
+    }
+
+    public void setEnUU(Long enUU) {
+        this.enUU = enUU;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getUserTel() {
+        return userTel;
+    }
+
+    public void setUserTel(String userTel) {
+        this.userTel = userTel;
+    }
+
+    public String getBrand() {
+        return brand;
+    }
+
+    public void setBrand(String brand) {
+        this.brand = brand;
+    }
+
+    public String getInbrand() {
+        return inbrand;
+    }
+
+    public void setInbrand(String inbrand) {
+        this.inbrand = inbrand;
+    }
+
+    public String getCmpCode() {
+        return cmpCode;
+    }
+
+    public void setCmpCode(String cmpCode) {
+        this.cmpCode = cmpCode;
+    }
+
+    public String getSpec() {
+        return spec;
+    }
+
+    public void setSpec(String spec) {
+        this.spec = spec;
+    }
+
+    public String getProdTitle() {
+        return prodTitle;
+    }
+
+    public void setProdTitle(String prodTitle) {
+        this.prodTitle = prodTitle;
+    }
+
+    public Double getNeedQty() {
+        return needQty;
+    }
+
+    public void setNeedQty(Double needQty) {
+        this.needQty = needQty;
+    }
+
+    public Date getReDate() {
+        return reDate;
+    }
+
+    public void setReDate(Date reDate) {
+        this.reDate = reDate;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
+    public Long getItemId() {
+        return itemId;
+    }
+
+    public void setItemId(Long itemId) {
+        this.itemId = itemId;
+    }
+
+    public Long getInid() {
+        return inid;
+    }
+
+    public void setInid(Long inid) {
+        this.inid = inid;
+    }
+
+    public Long getNewId() {
+        return newId;
+    }
+
+    public void setNewId(Long newId) {
+        this.newId = newId;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Long getVendUU() {
+        return vendUU;
+    }
+
+    public void setVendUU(Long vendUU) {
+        this.vendUU = vendUU;
+    }
+
+    public Integer getRemindStatus() {
+        return remindStatus;
+    }
+
+    public void setRemindStatus(Integer remindStatus) {
+        this.remindStatus = remindStatus;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public Long getRemainingTime() {
+        return remainingTime;
+    }
+
+    public void setRemainingTime(Long remainingTime) {
+        this.remainingTime = remainingTime;
+    }
+
+    @Override
+    public String toString() {
+        return "InquiryEnRemind{" +
+                "id=" + id +
+                ", code='" + code + '\'' +
+                ", enName='" + enName + '\'' +
+                ", enUU=" + enUU +
+                ", userName='" + userName + '\'' +
+                ", userTel='" + userTel + '\'' +
+                ", brand='" + brand + '\'' +
+                ", inbrand='" + inbrand + '\'' +
+                ", cmpCode='" + cmpCode + '\'' +
+                ", spec='" + spec + '\'' +
+                ", prodTitle='" + prodTitle + '\'' +
+                ", needQty=" + needQty +
+                ", reDate=" + reDate +
+                ", endDate=" + endDate +
+                ", itemId=" + itemId +
+                ", inid=" + inid +
+                ", newId=" + newId +
+                ", status=" + status +
+                ", vendUU=" + vendUU +
+                ", remindStatus=" + remindStatus +
+                ", date=" + date +
+                ", remainingTime=" + remainingTime +
+                '}';
+    }
+
+    @Override
+    public Object getKey() {
+        return id;
+    }
+}

+ 44 - 167
src/main/java/com/uas/erp/schedular/publicinquiry/task/EnterInquiryTask.java

@@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.erp.schedular.b2b.domain.QuotationDownDecide;
 import com.uas.erp.schedular.database.RestJdbcTemplate;
+import com.uas.erp.schedular.database.SqlTemplate;
+import com.uas.erp.schedular.publicinquiry.domain.InquiryEnRemind;
 import com.uas.erp.schedular.publicinquiry.domain.PublicInquiryItem;
 import com.uas.erp.schedular.publicinquiry.domain.PublicInquiryReply;
 import com.uas.erp.schedular.task.support.TaskMapping;
@@ -246,181 +248,56 @@ public class EnterInquiryTask extends AbstractTask{
 
     @TaskMapping(title = "商机下载", fixedDelay = 60000)
     public void downloadInquiry(){
-        long total = 0L;
-        Map<String, String> params = new HashMap<String, String>();
         Map<String, Object> enterpriseMap = jdbcTemplate.queryForMap("select en_uu,en_adminuu from enterprise");
-        params.put("enuu", String.valueOf(enterpriseMap.get("EN_UU")));
-        params.put("useruu",String.valueOf(enterpriseMap.get("EN_ADMINUU")));
-        params.put("pageNumber","1");
-        params.put("pageSize","30");
-        params.put("isAll","1");
-        try {
-            String url = "";
-            if("10041559".equals(enterpriseMap.get("EN_UU"))){          //胜芳账套特殊处理
-                url = "http://218.17.158.219:24000/inquiry/sale/enremind";
-            }else{
-                url = "https://api-inquiry.usoftmall.com/inquiry/sale/enremind";
-            }
-            String res = sendGet(url, params);
-            //是否存在商机库
-            Map<String, Object> map = jdbcTemplate.queryForMap("SELECT COUNT(*) COUNT,BD_NAME FROM BUSINESSDATABASE WHERE BD_NAME ='平台商机库' AND BD_PROP='管理员分配' AND ROWNUM=1 GROUP BY BD_NAME");
-            if(map == null){
-                Map<String, Object> adminMap = jdbcTemplate.queryForMap("SELECT EM_CODE,EN_ADMINNAME FROM ENTERPRISE LEFT JOIN EMPLOYEE ON EN_ADMINUU=EM_UU");
-                jdbcTemplate.execute("INSERT INTO BUSINESSDATABASE(bd_id,bd_name,bd_prop,bd_admin,bd_admincode,bd_overtime) VALUES(BUSINESSDATABASE_SEQ.NEXTVAL,'平台商机库','管理员分配','"+adminMap.get("EN_ADMINNAME")+"','"+adminMap.get("EM_CODE")+"',7)");
-                map = new HashMap<String, Object>();
-                map.put("BD_NAME","平台商机库");
-            }else if(map != null && "0".equals(map.get("COUNT"))){
-                Map<String, Object> adminMap = jdbcTemplate.queryForMap("SELECT EM_CODE,EN_ADMINNAME FROM ENTERPRISE LEFT JOIN EMPLOYEE ON EN_ADMINUU=EM_UU");
-                jdbcTemplate.execute("INSERT INTO BUSINESSDATABASE(bd_id,bd_name,bd_prop,bd_admin,bd_admincode,bd_overtime) VALUES(BUSINESSDATABASE_SEQ.NEXTVAL,'平台商机库','管理员分配','"+adminMap.get("EN_ADMINNAME")+"','"+adminMap.get("EM_CODE")+"',7)");
-                map.put("BD_NAME","平台商机库");
-            }
-            String sql = "select count(bs_name) count,bs_name from businesschancestage where bs_detno=1 group by bs_name";
-            Map<String, Object> bsNameMap= jdbcTemplate.queryForMap(sql);
-            if(bsNameMap == null){
-                String code = jdbcTemplate.generateCode("businesschancestage",2);
-                jdbcTemplate.execute("insert into businesschancestage(bs_id,bs_code,bs_name,bs_color,bs_detno,bs_days) values(businesschancestage_seq.nextval,'"+code+"','样品报价','55CC59',1,7)");
-                bsNameMap = new HashMap<String, Object>();
-                bsNameMap.put("BS_NAME","样品报价");
-            }
-            JSONObject json = JSONObject.parseObject(res);
-            total = json.getInteger("totalElements");
-            if(total > 30){
-                double length = Math.ceil(total / 30.0);
-                JSONArray jsonArray = json.getJSONArray("content");
-                executeDownload(jsonArray,String.valueOf(bsNameMap.get("BS_NAME")), String.valueOf(map.get("BD_NAME")));
-                for(int i = 2; i <= length; i++){
-                    params.put("pageNumber",String.valueOf(i));
-                    res = sendGet(url, params);
-                    json = JSONObject.parseObject(res);
-                    jsonArray = json.getJSONArray("content");
-                    try {
-                        executeDownload(jsonArray, String.valueOf(bsNameMap.get("BS_NAME")), String.valueOf(map.get("BD_NAME")));
-                    }catch (Exception e){
-                        for(int j = 0; j < jsonArray.size(); j++){
-                            try {
-                                JSONArray array = new JSONArray();
-                                array.add(jsonArray.getJSONObject(j));
-                                executeDownload(array, String.valueOf(bsNameMap.get("BS_NAME")), String.valueOf(map.get("BD_NAME")));
-                            }catch (Exception e1){
-                                continue;
-                            }
-                        }
-                    }
-                }
-            }else{
-                JSONArray jsonArray = json.getJSONArray("content");
-                executeDownload(jsonArray,String.valueOf(bsNameMap.get("BS_NAME")), String.valueOf(map.get("BD_NAME")));
+        //是否存在商机库
+        Map<String, Object> map = jdbcTemplate.queryForMap("SELECT COUNT(*) COUNT,BD_NAME FROM BUSINESSDATABASE WHERE BD_NAME ='平台商机库' AND BD_PROP='管理员分配' AND ROWNUM=1 GROUP BY BD_NAME");
+        if(map == null){
+            Map<String, Object> adminMap = jdbcTemplate.queryForMap("SELECT EM_CODE,EN_ADMINNAME FROM ENTERPRISE LEFT JOIN EMPLOYEE ON EN_ADMINUU=EM_UU");
+            jdbcTemplate.execute("INSERT INTO BUSINESSDATABASE(bd_id,bd_name,bd_prop,bd_admin,bd_admincode,bd_overtime) VALUES(BUSINESSDATABASE_SEQ.NEXTVAL,'平台商机库','管理员分配','"+adminMap.get("EN_ADMINNAME")+"','"+adminMap.get("EM_CODE")+"',7)");
+            map = new HashMap<String, Object>();
+            map.put("BD_NAME","平台商机库");
+        }else if(map != null && "0".equals(map.get("COUNT"))){
+            Map<String, Object> adminMap = jdbcTemplate.queryForMap("SELECT EM_CODE,EN_ADMINNAME FROM ENTERPRISE LEFT JOIN EMPLOYEE ON EN_ADMINUU=EM_UU");
+            jdbcTemplate.execute("INSERT INTO BUSINESSDATABASE(bd_id,bd_name,bd_prop,bd_admin,bd_admincode,bd_overtime) VALUES(BUSINESSDATABASE_SEQ.NEXTVAL,'平台商机库','管理员分配','"+adminMap.get("EN_ADMINNAME")+"','"+adminMap.get("EM_CODE")+"',7)");
+            map.put("BD_NAME","平台商机库");
+        }
+        String sql = "select count(bs_name) count,bs_name from businesschancestage where bs_detno=1 group by bs_name";
+        Map<String, Object> bsNameMap= jdbcTemplate.queryForMap(sql);
+        if(bsNameMap == null){
+            String code = jdbcTemplate.generateCode("businesschancestage",2);
+            jdbcTemplate.execute("insert into businesschancestage(bs_id,bs_code,bs_name,bs_color,bs_detno,bs_days) values(businesschancestage_seq.nextval,'"+code+"','样品报价','55CC59',1,7)");
+            bsNameMap = new HashMap<String, Object>();
+            bsNameMap.put("BS_NAME","样品报价");
+        }
+        try{
+            //从平台获取企业商机,保存到本地
+            List<InquiryEnRemind> downs = getForList("/inquiry/public/enremind?vendUU="+enterpriseMap.get("EN_UU"), InquiryEnRemind.class);
+            if(!CollectionUtils.isEmpty(downs)){
+                ContextHolder.setDataSize(downs.size());
+                saveInquiryEnRemind(downs);
             }
-        } catch (Exception e) {
+            // 回执
+            onReplySuccess(downs, enterpriseMap.get("EN_UU"));
+        }catch (Exception e){
             e.printStackTrace();
         }
+
     }
 
-    private void executeDownload(JSONArray array, String bsName, String bdName){
-        int size = array.size();
-        StringBuilder sb = new StringBuilder("declare v_count number; begin ");
-        for(int i = 0; i < size; i++){
-            JSONObject json = array.getJSONObject(i);
-            sb.append("select count(*) into v_count from businesschance where bc_fromid = '"+json.getString("itemId")+"';");
-            sb.append("if v_count = 0 then ");
-            String code = jdbcTemplate.generateCode("businesschance",2);
-            String needQty ="";
-            String inbrand = "";
-            String cmpCode = "";
-            cmpCode = json.getString("cmpCode");
-            inbrand = json.getString("inbrand");
-            needQty = json.getString("needQty");
-            if(cmpCode == null || "null".equals(cmpCode)){
-                cmpCode = "";
-            }else{
-                cmpCode = cmpCode.replaceAll("&","'||'&'||'");
-            }
-            if(needQty == null || "null".equals(needQty)){
-                needQty = "";
-            }
-            if(inbrand == null || "null".equals(inbrand)){
-                inbrand = "";
-            }
-            //商机名称
-            String prodTitle = json.getString("prodTitle");
-            if(prodTitle != null && !"null".equals(prodTitle) && !"".equals(prodTitle)){
-                prodTitle = prodTitle.replaceAll("'","''").replaceAll("&","'||'&'||'");
-            }
-            String description = json.getString("prodTitle")+" "+ json.getString("cmpCode")+" ";
-            if(json.getString("spec") != null && !"null".equals(json.getString("spec")) && !"".equals(json.getString("spec"))){
-                description += json.getString("spec") +" ";
-            }
-            description += inbrand;
-            if(needQty != null && !"null".equals(needQty) && !"".equals(needQty)){
-                description += ",需求:"+needQty;
-            }
-            //客户编号、客户uu
-            String cuUU = json.getString("enUU");
-            String custCode = jdbcTemplate.getString("select cu_code from customer where cu_uu=?", cuUU);
-            if(custCode == null || "null".equals(custCode)){
-                custCode = "";
-            }
-            Calendar c = Calendar.getInstance();
-            c.setTime(new Date(json.getLong("date")));
-            c.add(Calendar.MONTH, 2);
-            String date = "to_date('" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime())+"','YYYY-MM-DD HH24:MI:SS')";
-            String endDate = "to_date('"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(json.getLong("endDate")))+"','YYYY-MM-DD HH24:MI:SS')";
-            sb.append("insert into businesschance(bc_id,bc_fromid,bc_code,bc_description,bc_from,bc_nichehouse,bc_currentprocess,bc_date7,bc_status,bc_statuscode,bc_recorder,bc_recorddate,"
-                    + "bc_custname,bc_contact,bc_tel,bc_desc7,bc_desc9,bc_desc10,bc_desc11,bc_desc13,bc_date13,bc_desc14,bc_custcode) values(businesschance_seq.nextval,"+json.getInteger("itemId")+",'"+code+"','"+description.replaceAll("'","''").replaceAll("&","'||'&'||'")+"','平台商机','"+bdName+"','"+bsName+"',"+date+","
-                    + "'已审核','AUDITED','自动转入',sysdate,'"+json.getString("enName")+"','"+json.getString("userName")+"','"+json.getString("userTel")+"','"+prodTitle+"','"+json.getString("spec")+"',"
-                    + "'"+cmpCode+"','"+json.getString("inbrand")+"','"+needQty+"',"+endDate+",'"+cuUU+"','"+custCode+"');");
-            sb.append(" end if;");
-        }
-        sb.append(" end;");
-        jdbcTemplate.execute(sb.toString());
+    private void onReplySuccess(List<InquiryEnRemind> downs, Object en_uu) {
+        String idStr = CollectionUtil.getKeyString(downs);
+        MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
+        map.set("vendUU", String.valueOf(en_uu));
+        map.set("ids", idStr);
+        post("/inquiry/public/enremind/back" + en_uu, map);
     }
 
-    private static String sendGet(String url, Map<String, String> params) {
-        String result = "";
-        BufferedReader in = null;
-        StringBuilder sb = new StringBuilder();
-        try {
-            Set<String> keys = params.keySet();
-            for(String key : keys){
-                sb.append("&" + key + "=" + params.get(key));
-            }
-            String urlNameString = url + "?" + sb.substring(1,sb.length());
-            URL realUrl = new URL(urlNameString);
-            // 打开和URL之间的连接
-            URLConnection connection = realUrl.openConnection();
-            // 设置通用的请求属性
-            connection.setRequestProperty("accept", "*/*");
-            connection.setRequestProperty("connection", "Keep-Alive");
-            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            // 建立实际的连接
-            connection.connect();
-            // 获取所有响应头字段
-            Map<String, List<String>> map = connection.getHeaderFields();
-            // 遍历所有的响应头字段
-            /*for (String key : map.keySet()) {
-                System.out.println(key + "--->" + map.get(key));
-            }*/
-            // 定义 BufferedReader输入流来读取URL的响应
-            in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
-            String line;
-            while ((line = in.readLine()) != null) {
-                result += line;
-            }
-        } catch (Exception e) {
-            System.out.println("发送GET请求出现异常!" + e);
-            e.printStackTrace();
-        }
-        // 使用finally块来关闭输入流
-        finally {
-            try {
-                if (in != null) {
-                    in.close();
-                }
-            } catch (Exception e2) {
-                e2.printStackTrace();
-            }
-        }
-        return result;
+    private void saveInquiryEnRemind(List<InquiryEnRemind> downs) throws Exception {
+        Map<String, Object> model = new HashMap<String, Object>();
+        model.put("inquiryEnRemind", downs);
+        String sql = SqlTemplate.fromXmlFile("database/template/inquiryEnRemind.xml", model);
+        //System.out.println(sql);
+        jdbcTemplate.execute(sql);
     }
 
 }

+ 40 - 0
src/main/resources/database/template/inquiryEnRemind.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<PLSQL>
+    <declare>
+        v_count number;
+        v_id number;
+        v_code varchar2(200);
+        v_prodTitle varchar2(500);
+        v_cu_code  varchar2(50);
+        v_tmpCount number;
+    </declare>
+    <body>
+        <iterator loop="inquiryEnRemind" var="detail">
+            <block>
+                -- 判断该商机是否已存在
+                select count(*) into v_count from businesschance where bc_fromid =${detail.itemId};
+                if v_count = 0 then
+                v_id := businesschance_seq.nextval;
+                Sp_GetMaxNumber('businesschance',2,v_code);
+                v_prodTitle := ${detail.prodTitle} ||${detail.cmpCode} || ${detail.spec};
+                if nvl(${detail.needQty},' ') = ' ' then
+                dbms_output.put_line('needQty is null');
+                else
+                v_prodTitle := v_prodTitle || ',需求:' || ${detail.needQty};
+                end if;
+                --客户编号
+                select count(*) into v_tmpCount from customer where cu_uu= ${detail.enUU};
+                if v_tmpCount > 0 then
+                select cu_code into v_cu_code from customer where cu_uu= 10043516;
+                else
+                v_cu_code := null;
+                end if;
+                --执行插入语句
+                insert into businesschance(bc_id,bc_fromid,bc_code,bc_description,bc_from,bc_nichehouse,bc_currentprocess,bc_date7,bc_status,bc_statuscode,bc_recorder,bc_recorddate,bc_custname,bc_contact,bc_tel,bc_desc7,bc_desc9,bc_desc10,bc_desc11,bc_desc13,bc_date13,bc_desc14,bc_custcode)
+                values(v_id,${detail.itemId},v_code,v_prodTitle,'平台商机','平台商机库','样品报价', add_months(${detail.date},2),'已审核','AUDITED','自动转入',sysdate,${detail.enName},${detail.userName},${detail.userTel},${detail.prodTitle},${detail.spec},${detail.cmpCode},${detail.inbrand},
+                ${detail.needQty},${detail.endDate},${detail.enUU},v_cu_code);
+                end if;
+            </block>
+        </iterator>
+    </body>
+</PLSQL>