Procházet zdrojové kódy

Merge branch 'master' of http://3081089em4.wicp.vip/user5/simple_xg_total_process_master

 Conflicts:
	src/main/webapp/WEB-INF/tags/sys/treeselectoffices.tag
baifalu před 3 roky
rodič
revize
f8e8700baa
47 změnil soubory, kde provedl 2379 přidání a 1148 odebrání
  1. 78 0
      src/main/java/com/jeeplus/common/bos/BosController.java
  2. 9 0
      src/main/java/com/jeeplus/modules/identification/web/AuditTemplateTypeController.java
  3. 27 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/Form.java
  4. 27 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/Operator.java
  5. 47 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/OperatorData.java
  6. 146 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/PhysicsSeal.java
  7. 45 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/SealAuthBean.java
  8. 65 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/ThirdFlowNode.java
  9. 79 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectSignatureOldMessageDisposeController.java
  10. 80 62
      src/main/java/com/jeeplus/modules/tools/utils/SignaturePostUtil.java
  11. 4 1
      src/main/java/com/jeeplus/modules/workclientinfo/dao/WorkClientBankDao.java
  12. 8 0
      src/main/java/com/jeeplus/modules/workclientinfo/service/WorkClientInfoService.java
  13. 18 0
      src/main/java/com/jeeplus/modules/workinvoice/entity/WorkInvoice.java
  14. 1 0
      src/main/java/com/jeeplus/modules/workinvoice/web/WorkInvoiceController.java
  15. 22 0
      src/main/java/com/jeeplus/modules/workinvoice/web/WorkInvoiceTwoController.java
  16. 46 28
      src/main/java/com/jeeplus/modules/workstaff/entity/WorkStaffBasicInfo.java
  17. 15 1
      src/main/java/com/jeeplus/modules/workstaff/service/WorkStaffBasicInfoService.java
  18. 21 4
      src/main/java/com/jeeplus/modules/workstaff/web/WorkStaffBasicInfoController.java
  19. 887 980
      src/main/resources/freemarker/issueProcess.ftl
  20. 2 2
      src/main/resources/mappings/modules/sys/RoleDao.xml
  21. 28 20
      src/main/resources/mappings/modules/workclientinfo/WorkClientBankDao.xml
  22. 9 4
      src/main/resources/mappings/modules/workinvoice/WorkInvoiceDao.xml
  23. 8 4
      src/main/resources/mappings/modules/workstaff/WorkStaffBasicInfoDao.xml
  24. 106 0
      src/main/webapp/WEB-INF/tags/sys/treeselectNewDrawer.tag
  25. 7 7
      src/main/webapp/WEB-INF/tags/sys/treeselectact.tag
  26. 65 4
      src/main/webapp/WEB-INF/tags/sys/treeselectoffices.tag
  27. 1 1
      src/main/webapp/webpage/modules/projectAccessory/collectAccessoryForm.jsp
  28. 6 1
      src/main/webapp/webpage/modules/workclientinfo/all/workClientInfoForm.jsp
  29. 6 1
      src/main/webapp/webpage/modules/workclientinfo/workClientInfoForm.jsp
  30. 3 1
      src/main/webapp/webpage/modules/workclientinfo/workClientInfoFormDetail.jsp
  31. 1 1
      src/main/webapp/webpage/modules/workcontractinfo/newWorkContract/workContractInfoFormAdd.jsp
  32. 74 4
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAllForm.jsp
  33. 7 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAllModify.jsp
  34. 6 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAllReceiptForm.jsp
  35. 74 4
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAllTwoForm.jsp
  36. 6 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAllTwoModify.jsp
  37. 6 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAllTwoReceiptForm.jsp
  38. 6 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAuditEnd.jsp
  39. 77 4
      src/main/webapp/webpage/modules/workinvoice/workInvoiceModify.jsp
  40. 6 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceModifyInfo.jsp
  41. 75 5
      src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoForm.jsp
  42. 74 4
      src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoModify.jsp
  43. 6 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceView.jsp
  44. 3 3
      src/main/webapp/webpage/modules/workstaff/workStaffBasicDetailForm.jsp
  45. 1 1
      src/main/webapp/webpage/modules/workstaff/workStaffBasicDetailModifyDirectly.jsp
  46. 73 0
      src/main/webapp/webpage/modules/workstaff/workStaffBasicInfoForm.jsp
  47. 18 1
      src/main/webapp/webpage/modules/workstaff/workStaffBasicInfoView.jsp

+ 78 - 0
src/main/java/com/jeeplus/common/bos/BosController.java

@@ -110,6 +110,84 @@ public class BosController {
         }
         return map;
     }
+    @RequestMapping("upLoadHandSignatureImg")
+    @ResponseBody
+    public Map upLoadHandSignatureImg(HttpServletRequest request, MultipartFile file, MultipartHttpServletRequest multiRequest){
+        Map map = new HashMap();
+        String storeAs = "handSignature";
+        // 文件存储方式(0:本地服务器存储。1:云端存储)
+        if("1".equals(uploadMode)){
+            try {
+                //MultipartFile转File
+                File srcFile = transformMultipartFile(file);
+                String path = directory+"/"+storeAs+datePath()+"/"+ System.currentTimeMillis()+srcFile.getName();
+                BOSClientUtil bosClientUtil = new BOSClientUtil();
+                InputStream inputStream = file.getInputStream();
+                String upload = bosClientUtil.upload(path, inputStream);
+                if(srcFile.exists()){
+                    srcFile.delete();
+                }
+                map.put("msg","上传成功");
+                map.put("code","1");
+                map.put("url",upload);
+            }catch (Exception e){
+                map.put("msg","上传失败");
+                map.put("code","0");
+                logger.error("Exception e:"+e);
+            }
+        }else if("2".equals(uploadMode)){
+            String filepath = "";
+            LayFileJsonData data = new LayFileJsonData();
+            // 判断文件是否为空
+            Iterator<String> fileNames = multiRequest.getFileNames();
+            while(fileNames.hasNext()) {
+                //取得上传文件
+                file = multiRequest.getFile(fileNames.next());
+                if (!file.isEmpty()) {
+                    // 文件保存路径
+
+                    String realPath =directory.replace("/","")+"/"+storeAs+datePath()+"/"+ System.currentTimeMillis();
+                    OSSClientUtil ossUtil = new OSSClientUtil();
+                    String newName = file.getOriginalFilename();
+
+                    try {
+                        ossUtil.uploadFile2OSS(file.getInputStream(),realPath,newName);
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                        logger.error("Exception e:"+e);
+                    }
+                    filepath = Global.getAliDownloadUrl() + "/" + realPath + newName;
+
+                    data.setName(file.getOriginalFilename());
+                    data.setSrc(filepath);
+                }
+            }
+
+            map.put("code", "1");
+            map.put("url", data.getSrc());
+        }else{
+
+            try {
+                //MultipartFile转File
+                File srcFile = transformMultipartFile(file);
+                SftpClientUtil fileUploadUtil = new SftpClientUtil();
+                String uploadPath = "/" + storeAs + datePath();
+                String uploadFile = fileUploadUtil.uploadFile(uploadPath, srcFile, srcFile.getName());
+                if(srcFile.exists()){
+                    srcFile.delete();
+                }
+                map.put("msg","上传成功");
+                map.put("code","1");
+                map.put("url","/a/workfullmanage/workFullManage/downLoadAttach?file=" + uploadFile);
+            } catch (Exception e) {
+                logger.error("Exception e:"+e);
+                e.printStackTrace();
+                map.put("msg","上传失败");
+                map.put("code","0");
+            }
+        }
+        return map;
+    }
 
     /*@RequestMapping("upload")
     @ResponseBody*/

+ 9 - 0
src/main/java/com/jeeplus/modules/identification/web/AuditTemplateTypeController.java

@@ -0,0 +1,9 @@
+package com.jeeplus.modules.identification.web;
+
+/**
+ * 自定义审核模板类型controller
+ * @author: 徐滕
+ * @create: 2022-03-17 13:47
+ **/
+public class AuditTemplateTypeController {
+}

+ 27 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/Form.java

@@ -0,0 +1,27 @@
+package com.jeeplus.modules.ruralprojectrecords.entity;
+
+/**
+ * 第三方表单
+ * @author: 徐滕
+ * @create: 2022-03-16 13:46
+ **/
+public class Form {
+    private String key;     //(是)
+    private String value;   //(是)
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+}

+ 27 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/Operator.java

@@ -0,0 +1,27 @@
+package com.jeeplus.modules.ruralprojectrecords.entity;
+
+/**
+ * 第三方节点操作人
+ * @author: 徐滕
+ * @create: 2022-03-16 13:59
+ **/
+public class Operator {
+    private String mobile;  //联系方式,联系方式允许使用大陆、台湾和香港的手机号,台湾和香港的手机号格式为:区号+空格+手机号,例:8529xxxxxxx(obile和number至少填写一个)
+    private String number;  //员工编号(obile和number至少填写一个)
+
+    public String getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+
+    public String getNumber() {
+        return number;
+    }
+
+    public void setNumber(String number) {
+        this.number = number;
+    }
+}

+ 47 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/OperatorData.java

@@ -0,0 +1,47 @@
+package com.jeeplus.modules.ruralprojectrecords.entity;
+
+import java.util.Date;
+
+/**
+ * 第三方节点操作数据
+ * @author: 徐滕
+ * @create: 2022-03-16 13:54
+ **/
+public class OperatorData {
+    private String operateType; //(是)
+    private String info;        //(否)
+    private Date operatorTime;  //(节点完成时必传)
+    private Operator operators; //(是)
+
+    public String getOperateType() {
+        return operateType;
+    }
+
+    public void setOperateType(String operateType) {
+        this.operateType = operateType;
+    }
+
+    public String getInfo() {
+        return info;
+    }
+
+    public void setInfo(String info) {
+        this.info = info;
+    }
+
+    public Date getOperatorTime() {
+        return operatorTime;
+    }
+
+    public void setOperatorTime(Date operatorTime) {
+        this.operatorTime = operatorTime;
+    }
+
+    public Operator getOperators() {
+        return operators;
+    }
+
+    public void setOperators(Operator operators) {
+        this.operators = operators;
+    }
+}

+ 146 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/PhysicsSeal.java

@@ -0,0 +1,146 @@
+package com.jeeplus.modules.ruralprojectrecords.entity;
+
+import java.util.List;
+
+/**
+ * 物理印章信息类
+ * @author: 徐滕
+ * @create: 2022-03-16 13:43
+ **/
+public class PhysicsSeal {
+    private String tenantName;              //发起公司,用印流程id为空时必传(否)
+    private Long categoryId;              //用印流程id(否)
+    private String categoryName;            //用印流程名称,用印流程id为空时必传(否)
+    private String subject;                 //主题(是)
+    private String serialNo;                //序列号(否)
+    private String description;             //描述(否)
+    private String applyerName;             //申请人姓名(否)
+    private String applyerContact;          //申请人联系方式,联系方式允许使用:手机号、电子邮箱(联系方式与员工编号必须二选)
+    private String applyerNumber;           //申请人员工编号(联系方式与员工编号必须二选一)
+    private String callbackUrl;             //回调地址(否)
+    private Integer count;                   //申请人申请用印次数,若auths不传,则该字段必传(否)
+    private List<SealAuthBean> auths;       //用印授权人;参照SealAuthBean(否)
+    private List<ThirdFlowNode> flowNodes;  //第三方审批节点;参照ThirdFlowNode(是)
+    private List<Long> documents;           //文档ID的集合(否)
+    private List<Form> forms;               //第三方传入的表单集合,参照Form(否)
+
+    public String getTenantName() {
+        return tenantName;
+    }
+
+    public void setTenantName(String tenantName) {
+        this.tenantName = tenantName;
+    }
+
+    public Long getCategoryId() {
+        return categoryId;
+    }
+
+    public void setCategoryId(Long categoryId) {
+        this.categoryId = categoryId;
+    }
+
+    public String getCategoryName() {
+        return categoryName;
+    }
+
+    public void setCategoryName(String categoryName) {
+        this.categoryName = categoryName;
+    }
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public String getSerialNo() {
+        return serialNo;
+    }
+
+    public void setSerialNo(String serialNo) {
+        this.serialNo = serialNo;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getApplyerName() {
+        return applyerName;
+    }
+
+    public void setApplyerName(String applyerName) {
+        this.applyerName = applyerName;
+    }
+
+    public String getApplyerContact() {
+        return applyerContact;
+    }
+
+    public void setApplyerContact(String applyerContact) {
+        this.applyerContact = applyerContact;
+    }
+
+    public String getApplyerNumber() {
+        return applyerNumber;
+    }
+
+    public void setApplyerNumber(String applyerNumber) {
+        this.applyerNumber = applyerNumber;
+    }
+
+    public String getCallbackUrl() {
+        return callbackUrl;
+    }
+
+    public void setCallbackUrl(String callbackUrl) {
+        this.callbackUrl = callbackUrl;
+    }
+
+    public Integer getCount() {
+        return count;
+    }
+
+    public void setCount(Integer count) {
+        this.count = count;
+    }
+
+    public List<SealAuthBean> getAuths() {
+        return auths;
+    }
+
+    public void setAuths(List<SealAuthBean> auths) {
+        this.auths = auths;
+    }
+
+    public List<ThirdFlowNode> getFlowNodes() {
+        return flowNodes;
+    }
+
+    public void setFlowNodes(List<ThirdFlowNode> flowNodes) {
+        this.flowNodes = flowNodes;
+    }
+
+    public List<Long> getDocuments() {
+        return documents;
+    }
+
+    public void setDocuments(List<Long> documents) {
+        this.documents = documents;
+    }
+
+    public List<Form> getForms() {
+        return forms;
+    }
+
+    public void setForms(List<Form> forms) {
+        this.forms = forms;
+    }
+}

+ 45 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/SealAuthBean.java

@@ -0,0 +1,45 @@
+package com.jeeplus.modules.ruralprojectrecords.entity;
+
+/**
+ * 用印授权
+ * @author: 徐滕
+ * @create: 2022-03-16 13:46
+ **/
+public class SealAuthBean {
+    private String deviceNo;    //deviceNo与sealName至少填写一个
+    private String sealName;    //deviceNo与sealName至少填写一个
+    private String ownerName;   //sealName不为空时必填
+    private Integer count;      //是
+
+    public String getDeviceNo() {
+        return deviceNo;
+    }
+
+    public void setDeviceNo(String deviceNo) {
+        this.deviceNo = deviceNo;
+    }
+
+    public String getSealName() {
+        return sealName;
+    }
+
+    public void setSealName(String sealName) {
+        this.sealName = sealName;
+    }
+
+    public String getOwnerName() {
+        return ownerName;
+    }
+
+    public void setOwnerName(String ownerName) {
+        this.ownerName = ownerName;
+    }
+
+    public Integer getCount() {
+        return count;
+    }
+
+    public void setCount(Integer count) {
+        this.count = count;
+    }
+}

+ 65 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/ThirdFlowNode.java

@@ -0,0 +1,65 @@
+package com.jeeplus.modules.ruralprojectrecords.entity;
+
+import java.util.Date;
+
+/**
+ * 第三方审批节点,必须按照[完成->未完成]的顺序排序
+ * @author: 徐滕
+ * @create: 2022-03-16 13:46
+ **/
+public class ThirdFlowNode {
+    private String name;                    //节点名称(是)
+    private String category;                //固定为SEAL_AUDIT(是)
+    private Boolean complete;               //节点是否完成,不传则默认完成(否)
+    private Date createTime;                //开始时间(节点完成时必传)
+    private Date completeTime;              //完成时间(节点完成时必传)
+    private OperatorData operatorData;      //操作数据,见OperatorData(是)
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCategory() {
+        return category;
+    }
+
+    public void setCategory(String category) {
+        this.category = category;
+    }
+
+    public Boolean getComplete() {
+        return complete;
+    }
+
+    public void setComplete(Boolean complete) {
+        this.complete = complete;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getCompleteTime() {
+        return completeTime;
+    }
+
+    public void setCompleteTime(Date completeTime) {
+        this.completeTime = completeTime;
+    }
+
+    public OperatorData getOperatorData() {
+        return operatorData;
+    }
+
+    public void setOperatorData(OperatorData operatorData) {
+        this.operatorData = operatorData;
+    }
+}

+ 79 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectSignatureOldMessageDisposeController.java

@@ -1,5 +1,6 @@
 package com.jeeplus.modules.ruralprojectrecords.web;
 
+import com.alibaba.fastjson.JSON;
 import com.google.common.collect.Lists;
 import com.jeeplus.common.config.Global;
 import com.jeeplus.common.oss.OSSClientUtil;
@@ -7,7 +8,9 @@ import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.common.web.BaseController;
 import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
 import com.jeeplus.modules.projectcontentinfo.service.ProjectReportDataService;
+import com.jeeplus.modules.ruralprojectrecords.entity.PhysicsSeal;
 import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
+import com.jeeplus.modules.ruralprojectrecords.entity.SealAuthBean;
 import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsService;
 import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectSignatureOldMessageDisposeService;
 import com.jeeplus.modules.statement.service.StatementCompanyComprehensiveService;
@@ -209,4 +212,80 @@ public class RuralProjectSignatureOldMessageDisposeController extends BaseContro
         return map;
     }
 
+
+
+    /**
+     * 物理签章申请demo
+     */
+    @RequestMapping(value = "/getPhysicsSeal", method=RequestMethod.GET)
+    public HashMap getPhysicsSeal() {
+        HashMap hashMap = new HashMap();
+        //根据contractId将文件下载下来 并上传到阿里云服务种
+        //添加请求头
+        Map<String,String> requestHeaderMap = new HashMap<>();
+        requestHeaderMap.put("x-qys-accesstoken", apptoken);
+        requestHeaderMap.put("x-qys-signature", signature);
+        requestHeaderMap.put("x-qys-timestamp", "0");
+        PhysicsSeal physicsSeal = new PhysicsSeal();
+        physicsSeal.setTenantName("江苏兴光项目管理有限公司");
+        physicsSeal.setCategoryId(2938635332599652891L);
+        physicsSeal.setSubject("测试");
+        //员工联系方式
+        physicsSeal.setApplyerContact("18351935168");
+        List<SealAuthBean> auths = Lists.newArrayList();
+        SealAuthBean seal = new SealAuthBean();
+        seal.setSealName("江苏兴光项目管理有限公司公章");
+        seal.setOwnerName("江苏兴光项目管理有限公司");
+        seal.setCount(2);
+        auths.add(seal);
+        physicsSeal.setAuths(auths);
+        net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(physicsSeal);
+        String resultStr = SignaturePostUtil.sendPostApplicationJson(HTTPTOP + "/seal/apply/mulitipleByCategory", json.toString());
+        hashMap = JSON.parseObject(resultStr, HashMap.class);
+        return hashMap;
+    }
+
+    /**
+     * 物理签章信息获取详情demo
+     */
+    @RequestMapping(value = "/getPhysicsSealParticulars", method=RequestMethod.GET)
+    public HashMap getPhysicsSealParticulars() {
+        HashMap hashMap = new HashMap();
+        //根据contractId将文件下载下来 并上传到阿里云服务种
+        //添加请求头
+        Map<String,String> requestHeaderMap = new HashMap<>();
+        requestHeaderMap.put("x-qys-accesstoken", apptoken);
+        requestHeaderMap.put("x-qys-signature", signature);
+        requestHeaderMap.put("x-qys-timestamp", "0");
+
+        Map postMap = new HashMap();
+        postMap.put("businessId","2941600812628489057");
+
+        String resultStr = SignaturePostUtil.doGet(postMap,HTTPTOP + "/seal/apply/detail");
+        hashMap = JSON.parseObject(resultStr, HashMap.class);
+        return hashMap;
+    }
+
+    /**
+     * 物理签章拍照图片下载demo
+     */
+    @RequestMapping(value = "/downloadPhysicsSealImgs", method=RequestMethod.GET)
+    public HashMap downloadPhysicsSealImgs() {
+        HashMap hashMap = new HashMap();
+        //根据contractId将文件下载下来 并上传到阿里云服务种
+        //添加请求头
+        Map<String,String> requestHeaderMap = new HashMap<>();
+        requestHeaderMap.put("x-qys-accesstoken", apptoken);
+        requestHeaderMap.put("x-qys-signature", signature);
+        requestHeaderMap.put("x-qys-timestamp", "0");
+
+        Map postMap = new HashMap();
+        postMap.put("businessId","2941600812628489057");
+
+        net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(postMap);
+        String resultStr = SignaturePostUtil.sendPostImagePng(HTTPTOP + "/seal/apply/images/download", json.toString());
+        hashMap = JSON.parseObject(resultStr, HashMap.class);
+        return hashMap;
+    }
+
 }

+ 80 - 62
src/main/java/com/jeeplus/modules/tools/utils/SignaturePostUtil.java

@@ -455,71 +455,89 @@ public class SignaturePostUtil {
         System.out.println(result);
         return result;
     }
+    /**
+     * imagePng的post请求
+     * @return
+     */
+    public static String sendPostImagePng(String url, String jsonString) {
+        CloseableHttpClient httpClient = null;
+        CloseableHttpResponse httpResponse = null;
+        String result = "";
+        // 创建httpClient实例
+        httpClient = HttpClients.createDefault();
+        // 创建httpPost远程连接实例
+        HttpPost httpPost = new HttpPost(url);
+        // 配置请求参数实例
+        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 设置连接主机服务超时时间
+                .setConnectionRequestTimeout(35000)// 设置连接请求超时时间
+                .setSocketTimeout(60000)// 设置读取数据连接超时时间
+                .build();
+        // 为httpPost实例设置配置
+        httpPost.setConfig(requestConfig);
+        // 设置请求头鉴权
+        httpPost.setHeader("x-qys-accesstoken", apptoken);
+        httpPost.setHeader("x-qys-signature", signature);
+        httpPost.setHeader("x-qys-timestamp", "0");
+        // 包含内容格式设置
+        httpPost.addHeader("Content-Type", "image/png");
+        // 封装post请求参数
+        if (null != jsonString) {
+            // 为httpPost设置封装好的请求参数
+            System.out.println("添加到实体------");
+            httpPost.setEntity(new StringEntity(jsonString, "UTF-8"));
+        }
+        try {
+            // httpClient对象执行post请求,并返回响应参数对象
+            httpResponse = httpClient.execute(httpPost);
+            // 从响应对象中获取响应内容
+            HttpEntity entity = httpResponse.getEntity();
+            result = EntityUtils.toString(entity);
+        } catch (ClientProtocolException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            // 关闭资源
+            if (null != httpResponse) {
+                try {
+                    httpResponse.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != httpClient) {
+                try {
+                    httpClient.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        result = decodeUnicode(result);
+        System.out.println(result);
+        return result;
+    }
 
-    private static String decodeUnicode(String theString) {
-        char aChar;
-        int len = theString.length();
-        StringBuffer outBuffer = new StringBuffer(len);
-        for (int x = 0; x < len;) {
-            aChar = theString.charAt(x++);
-            if (aChar == '\\') {
-                aChar = theString.charAt(x++);
-                if (aChar == 'u') {
-                    // Read the xxxx
-                    int value = 0;
-                    for (int i = 0; i < 4; i++) {
-                        aChar = theString.charAt(x++);
-                        switch (aChar) {
-                            case '0':
-                            case '1':
-                            case '2':
-                            case '3':
-                            case '4':
-                            case '5':
-                            case '6':
-                            case '7':
-                            case '8':
-                            case '9':
-                                value = (value << 4) + aChar - '0';
-                                break;
-                            case 'a':
-                            case 'b':
-                            case 'c':
-                            case 'd':
-                            case 'e':
-                            case 'f':
-                                value = (value << 4) + 10 + aChar - 'a';
-                                break;
-                            case 'A':
-                            case 'B':
-                            case 'C':
-                            case 'D':
-                            case 'E':
-                            case 'F':
-                                value = (value << 4) + 10 + aChar - 'A';
-                                break;
-                            default:
-                                throw new IllegalArgumentException(
-                                        "Malformed   \\uxxxx   encoding.");
-                        }
-
-                    }
-                    outBuffer.append((char) value);
-                } else {
-                    if (aChar == 't')
-                        aChar = '\t';
-                    else if (aChar == 'r')
-                        aChar = '\r';
-                    else if (aChar == 'n')
-                        aChar = '\n';
-                    else if (aChar == 'f')
-                        aChar = '\f';
-                    outBuffer.append(aChar);
+    public static String decodeUnicode(String asciicode) {
+        String[] asciis = asciicode.split ("\\\\u");
+        String nativeValue = asciis[0];
+        try
+        {
+            for ( int i = 1; i < asciis.length; i++ )
+            {
+                String code = asciis[i];
+                nativeValue += (char) Integer.parseInt (code.substring (0, 4), 16);
+                if (code.length () > 4)
+                {
+                    nativeValue += code.substring (4, code.length ());
                 }
-            } else
-                outBuffer.append(aChar);
+            }
+        }
+        catch (NumberFormatException e)
+        {
+            return asciicode;
         }
-        return outBuffer.toString();
+        return nativeValue;
     }
 
     /**

+ 4 - 1
src/main/java/com/jeeplus/modules/workclientinfo/dao/WorkClientBankDao.java

@@ -20,4 +20,7 @@ public interface WorkClientBankDao extends CrudDao<WorkClientBank> {
     List<WorkClientBank> findListByClient(WorkClientBank workClientBank);
     //根据客户信息表id查出来对应的银行信息
     List<WorkClientBank> getLinkBank(WorkClientBank workClientBank);
-}
+
+    //根据名称查询开户行信息名称
+    WorkClientBank getByBankName(String bankName);
+}

+ 8 - 0
src/main/java/com/jeeplus/modules/workclientinfo/service/WorkClientInfoService.java

@@ -170,6 +170,14 @@ public class WorkClientInfoService extends CrudService<WorkClientInfoDao, WorkCl
     public List<WorkClientBank> findBankList(WorkClientInfo workClientInfo)  {
         return workClientBankDao.findListByClient(new WorkClientBank(workClientInfo));
     }
+    /**
+     * 获取银行开户信息
+     * @param bankName
+     * @return
+     */
+    public WorkClientBank getBankInfo(String bankName)  {
+        return workClientBankDao.getByBankName(bankName);
+    }
 
     /**
      * 获取附件列表信息

+ 18 - 0
src/main/java/com/jeeplus/modules/workinvoice/entity/WorkInvoice.java

@@ -101,6 +101,8 @@ public class WorkInvoice extends ActEntity<WorkInvoice> {
 	private String newDrawer;    		//开票人状态
 	private String newDrawerId;    		//开票人id
 	private String newDrawerName;    	//开票人名称
+	private String actualDrawerId;    		//实际开票人id
+	private String actualDrawerName;    	//实际开票人名称
 	@Override
 	@ExcelField(title="经办人", fieldType=User.class, value="createBy.name", align=2, sort=7)
 	public User getCreateBy() {
@@ -699,4 +701,20 @@ public class WorkInvoice extends ActEntity<WorkInvoice> {
 	public void setNewDrawer(String newDrawer) {
 		this.newDrawer = newDrawer;
 	}
+
+	public String getActualDrawerId() {
+		return actualDrawerId;
+	}
+
+	public void setActualDrawerId(String actualDrawerId) {
+		this.actualDrawerId = actualDrawerId;
+	}
+
+	public String getActualDrawerName() {
+		return actualDrawerName;
+	}
+
+	public void setActualDrawerName(String actualDrawerName) {
+		this.actualDrawerName = actualDrawerName;
+	}
 }

+ 1 - 0
src/main/java/com/jeeplus/modules/workinvoice/web/WorkInvoiceController.java

@@ -980,6 +980,7 @@ public class WorkInvoiceController extends BaseController {
 		}*/
 
 		map.put("bank",bank);
+		map.put("bankList",list);
 		map.put("bankNumber",bankNumber);
 		map.put("telephone",workClientInfo.getTelephone());
 		map.put("orUnicode",workClientInfo.getUscCode());

+ 22 - 0
src/main/java/com/jeeplus/modules/workinvoice/web/WorkInvoiceTwoController.java

@@ -283,6 +283,11 @@ public class WorkInvoiceTwoController extends BaseController {
 		if(StringUtils.isNotBlank(workInvoice.getId())){
 			workInvoiceService.queryDetails(workInvoice);
 		}
+		if(StringUtils.isBlank(workInvoice.getActualDrawerId())){
+			User user = UserUtils.getUser();
+			workInvoice.setActualDrawerId(user.getId());
+			workInvoice.setActualDrawerName(user.getName());
+		}
 		String tabId = request.getParameter("tabId");
 		if("1".equals(tabId)){
 			List<MainDictDetail> billingContentList = DictUtils.getMainDictList("billing_content");
@@ -1004,6 +1009,7 @@ public class WorkInvoiceTwoController extends BaseController {
 		}*/
 
 		map.put("bank",bank);
+		map.put("bankList",list);
 		map.put("bankNumber",bankNumber);
 		map.put("telephone",workClientInfo.getTelephone());
 		map.put("orUnicode",workClientInfo.getUscCode());
@@ -1011,6 +1017,22 @@ public class WorkInvoiceTwoController extends BaseController {
 		map.put("ids",workClientInfo.getId());
 		return JsonMapper.toJsonString(map);
 	}
+
+
+	/**
+	 * 根据银行信息查询具体数据
+	 * @param bankName
+	 * @return
+	 */
+	@RequestMapping(value = "getBankInfo")
+	@ResponseBody
+	public String getBankInfo(String bankName) {
+		HashMap<Object, Object> map = Maps.newHashMap();
+		WorkClientBank bankInfo = workClientInfoService.getBankInfo(bankName);
+		map.put("data",bankInfo);
+		return JsonMapper.toJsonString(map);
+	}
+
 	/**
 	 * 获取经办人部门信息
 	 * @return

+ 46 - 28
src/main/java/com/jeeplus/modules/workstaff/entity/WorkStaffBasicInfo.java

@@ -25,7 +25,7 @@ import javax.validation.constraints.Size;
  * @version 2018-07-26
  */
 public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
-	
+
 	private static final long serialVersionUID = 1L;
 	private String userId;
 	private String sqlStr;
@@ -108,6 +108,8 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
     private String trialPeriod;   //试用期(月)
 	private String individualResume;   //个人简介
 	private String highestEducation;	//最高学历
+	private String handSignature;	//手签章路径
+	private String handSignatureUrl;	//手签章路径(展示)
 
 	//劳动关系临时属性
 	private String relationshipStatus;
@@ -241,7 +243,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setOffice(Office office) {
 		this.office = office;
 	}
-	
+
 	public Office getCompany() {
 		return company;
 	}
@@ -258,7 +260,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setNo(String no) {
 		this.no = no;
 	}
-	
+
 	@ExcelField(title="姓    名", align=2, sort=3)
 	public String getName() {
 		return name;
@@ -267,7 +269,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setName(String name) {
 		this.name = name;
 	}
-	
+
 	@ExcelField(title="性    别", dictType="sex", align=2, sort=4)
 	public String getGender() {
 		return gender;
@@ -276,7 +278,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setGender(String gender) {
 		this.gender = gender;
 	}
-	
+
 	@ExcelField(title="民    族", dictType="nation_type", align=2, sort=5)
 	public String getNation() {
 		return nation;
@@ -285,7 +287,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setNation(String nation) {
 		this.nation = nation;
 	}
-	
+
 	@ExcelField(title="身份证号码", align=2, sort=6)
 	public String getIdCard() {
 		return idCard;
@@ -310,7 +312,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setAge(Integer age) {
 		this.age = age;
 	}
-	
+
 	@JsonFormat(pattern = "yyyy-MM-dd")
 	@ExcelField(title="出生日期", align=2, sort=8)
 	public Date getBirthday() {
@@ -320,7 +322,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setBirthday(Date birthday) {
 		this.birthday = birthday;
 	}
-	
+
 	@ExcelField(title="公历/农历", dictType="calendar_type", align=2, sort=9)
 	public String getCalendar() {
 		return calendar;
@@ -329,7 +331,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setCalendar(String calendar) {
 		this.calendar = calendar;
 	}
-	
+
 	@ExcelField(title="电子邮箱", align=2, sort=10)
 	public String getEmail() {
 		return email;
@@ -338,7 +340,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setEmail(String email) {
 		this.email = email;
 	}
-	
+
 	@ExcelField(title="移动电话", align=2, sort=11)
 	public String getMobile() {
 		return mobile;
@@ -365,7 +367,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setMarriage(String marriage) {
 		this.marriage = marriage;
 	}
-	
+
 	@ExcelField(title="政治面貌", align=2, sort=13, valiName = "politics_type")
 	public String getPolitics() {
 		return politics;
@@ -374,7 +376,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setPolitics(String politics) {
 		this.politics = politics;
 	}
-	
+
 	@ExcelField(title="是否退伍军人", dictType="yes_no", align=2, sort=14)
 	public String getExSoldier() {
 		return exSoldier;
@@ -383,7 +385,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setExSoldier(String exSoldier) {
 		this.exSoldier = exSoldier;
 	}
-	
+
 	@ExcelField(title="常住地址", align=2, sort=15)
 	public String getAddress() {
 		return address;
@@ -392,7 +394,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setAddress(String address) {
 		this.address = address;
 	}
-	
+
 	@ExcelField(title="籍    贯", fieldType=Area.class, value="", align=2, sort=16)
 	public Area getNativePlace() {
 		return nativePlace;
@@ -401,7 +403,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setNativePlace(Area nativePlace) {
 		this.nativePlace = nativePlace;
 	}
-	
+
 	@ExcelField(title="户口所在地", align=2, sort=17)
 	public String getHousehold() {
 		return household;
@@ -410,7 +412,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setHousehold(String household) {
 		this.household = household;
 	}
-	
+
 	@ExcelField(title="职务", align=2, sort=18,valiName = "staff_duty")
 	public String getDuty() {
 		return duty;
@@ -419,7 +421,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setDuty(String duty) {
 		this.duty = duty;
 	}
-	
+
 	@ExcelField(title="职    级", align=2, value="jobGrade.name", sort=19, valiName = "WorkJobGrade")
 	public WorkJobGrade getJobGrade() {
 		return jobGrade;
@@ -428,7 +430,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setJobGrade(WorkJobGrade jobGrade) {
 		this.jobGrade = jobGrade;
 	}
-	
+
 	@ExcelField(title="员工状态", align=2, sort=20, valiName = "staff_status")
 	public String getStatus() {
 		return status;
@@ -437,7 +439,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setStatus(String status) {
 		this.status = status;
 	}
-	
+
 	@JsonFormat(pattern = "yyyy-MM-dd")
 	@ExcelField(title="入职日期", align=2, sort=21)
 	public Date getEntryDate() {
@@ -447,7 +449,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setEntryDate(Date entryDate) {
 		this.entryDate = entryDate;
 	}
-	
+
 	@JsonFormat(pattern = "yyyy-MM-dd")
 	@ExcelField(title="参加工作日期", align=2, sort=22)
 	public Date getWorkDate() {
@@ -457,7 +459,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setWorkDate(Date workDate) {
 		this.workDate = workDate;
 	}
-	
+
 	@ExcelField(title="开户银行", align=2, sort=23, valiName = "bank_type")
 	public String getBankName() {
 		return bankName;
@@ -466,7 +468,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setBankName(String bankName) {
 		this.bankName = bankName;
 	}
-	
+
 	@ExcelField(title="银行卡号", align=2, sort=24)
 	public String getBankCard() {
 		return bankCard;
@@ -475,7 +477,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setBankCard(String bankCard) {
 		this.bankCard = bankCard;
 	}
-	
+
 	@JsonFormat(pattern = "yyyy-MM-dd")
 	@ExcelField(title="从事本行业日期", align=2, sort=25)
 	public Date getIndustryDate() {
@@ -485,7 +487,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setIndustryDate(Date industryDate) {
 		this.industryDate = industryDate;
 	}
-	
+
 	@ExcelField(title="是否TS人员", dictType="yes_no", align=2, sort=26)
 	public String getTs() {
 		return ts;
@@ -494,7 +496,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setTs(String ts) {
 		this.ts = ts;
 	}
-	
+
 	public String getPicture() {
 		return picture;
 	}
@@ -502,7 +504,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setPicture(String picture) {
 		this.picture = picture;
 	}
-	
+
 	public Date getBeginEntryDate() {
 		return beginEntryDate;
 	}
@@ -510,7 +512,7 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setBeginEntryDate(Date beginEntryDate) {
 		this.beginEntryDate = beginEntryDate;
 	}
-	
+
 	public Date getEndEntryDate() {
 		return endEntryDate;
 	}
@@ -817,4 +819,20 @@ public class WorkStaffBasicInfo extends DataEntity<WorkStaffBasicInfo> {
 	public void setHighestEducation(String highestEducation) {
 		this.highestEducation = highestEducation;
 	}
-}
+
+	public String getHandSignature() {
+		return handSignature;
+	}
+
+	public void setHandSignature(String handSignature) {
+		this.handSignature = handSignature;
+	}
+
+	public String getHandSignatureUrl() {
+		return handSignatureUrl;
+	}
+
+	public void setHandSignatureUrl(String handSignatureUrl) {
+		this.handSignatureUrl = handSignatureUrl;
+	}
+}

+ 15 - 1
src/main/java/com/jeeplus/modules/workstaff/service/WorkStaffBasicInfoService.java

@@ -61,6 +61,11 @@ import javax.servlet.http.HttpServletRequest;
 @Transactional(readOnly = true)
 public class WorkStaffBasicInfoService extends CrudService<WorkStaffBasicInfoDao, WorkStaffBasicInfo> {
 
+    /**
+     * 阿里云文件服务器前缀
+     */
+    private final static String aliyunUrl = Global.getConfig("aliyunUrl");
+
     @Autowired
     private  RoleService roleService;
     @Autowired
@@ -136,7 +141,11 @@ public class WorkStaffBasicInfoService extends CrudService<WorkStaffBasicInfoDao
 
 
     public WorkStaffBasicInfo get(String id) {
-		return super.get(id);
+        WorkStaffBasicInfo workStaffBasicInfo = super.get(id);
+        if(StringUtils.isNotBlank(workStaffBasicInfo.getHandSignature())){
+            workStaffBasicInfo.setHandSignatureUrl(new OSSClientUtil().getFileTemporaryLookUrl(aliyunUrl + workStaffBasicInfo.getHandSignature()));
+        }
+		return workStaffBasicInfo;
 	}
 
     /**
@@ -234,6 +243,11 @@ public class WorkStaffBasicInfoService extends CrudService<WorkStaffBasicInfoDao
         this.saveAchive(workStaffBasicInfo,request);
         workStaffBasicInfo.setAchiveId(workStaffBasicInfo.getId());
         workStaffBasicInfo.setId(baseId);
+        if(StringUtils.isNotBlank(workStaffBasicInfo.getHandSignature())){
+            if(workStaffBasicInfo.getHandSignature().indexOf(aliyunUrl)!=-1){
+                workStaffBasicInfo.setHandSignature(workStaffBasicInfo.getHandSignature().replace(aliyunUrl,""));
+            }
+        }
         //调用保存方法
 		super.save(workStaffBasicInfo);
 	    //同步修改sys_user表中的name

+ 21 - 4
src/main/java/com/jeeplus/modules/workstaff/web/WorkStaffBasicInfoController.java

@@ -51,10 +51,7 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
+import java.io.*;
 import java.net.URLDecoder;
 import java.text.ParseException;
 import java.util.ArrayList;
@@ -163,6 +160,26 @@ public class WorkStaffBasicInfoController extends BaseController {
 	}
 
 	/**
+	 * 手签章上传
+	 * @param file
+	 * @return
+	 * @throws Exception
+	 */
+	@RequestMapping(value = "upLoadHandSignatureImg")
+	@ResponseBody
+	public Map<String,Object> upLoadHandSignatureImg(MultipartFile file) throws Exception{
+		Map map = new HashMap();
+
+		/*if(result == 1){
+
+		}else{
+			map.put("msg","修改失败");
+		}*/
+		map.put("msg","修改成功");
+		return map;
+	}
+
+	/**
 	 * 查看,增加,编辑员工信息表单页面
 	 */
 	@RequiresPermissions(value={"workstaff:workStaffAchiveInfo:add","workstaff:workStaffAchiveInfo:edit"},logical=Logical.OR)

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 887 - 980
src/main/resources/freemarker/issueProcess.ftl


+ 2 - 2
src/main/resources/mappings/modules/sys/RoleDao.xml

@@ -315,7 +315,7 @@
 		</if>
 		<!-- 数据范围过滤 -->
 		${sqlMap.dsf}
-		ORDER BY a.number ASC  
+		ORDER BY a.number ASC
 	</select>
 
 	<select id="findListRole" resultType="Role">
@@ -602,4 +602,4 @@
 		set role_id = #{roleId}
 		where user_id = #{userId}
 	</update>
-</mapper>
+</mapper>

+ 28 - 20
src/main/resources/mappings/modules/workclientinfo/WorkClientBankDao.xml

@@ -1,7 +1,7 @@
 <?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="com.jeeplus.modules.workclientinfo.dao.WorkClientBankDao">
-    
+
 	<sql id="workClientBankColumns">
 		a.id AS "id",
 		a.create_by AS "createBy.id",
@@ -14,22 +14,22 @@
 		a.bank_number AS "bankNumber",
 		a.client_id AS "clientId.id"
 	</sql>
-	
+
 	<sql id="workClientBankJoins">
         LEFT JOIN work_client_info b ON b.id = a.client_id
 	</sql>
-	
-    
+
+
 	<select id="get" resultType="WorkClientBank" >
-		SELECT 
+		SELECT
 			<include refid="workClientBankColumns"/>
 		FROM work_client_bank a
 		<include refid="workClientBankJoins"/>
 		WHERE a.id = #{id}
 	</select>
-	
+
 	<select id="findList" resultType="WorkClientBank" >
-		SELECT 
+		SELECT
 			<include refid="workClientBankColumns"/>
             ,b.name AS "clientId.name"
 		FROM work_client_bank a
@@ -66,15 +66,15 @@
         </where>
             ORDER BY a.update_date DESC
     </select>
-	
+
 	<select id="findAllList" resultType="WorkClientBank" >
-		SELECT 
+		SELECT
 			<include refid="workClientBankColumns"/>
 		FROM work_client_bank a
 		<include refid="workClientBankJoins"/>
 		<where>
 			a.del_flag = #{DEL_FLAG_NORMAL}
-		</where>		
+		</where>
 		<choose>
 			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
 				ORDER BY ${page.orderBy}
@@ -84,7 +84,7 @@
 			</otherwise>
 		</choose>
 	</select>
-	
+
 	<insert id="insert">
 		INSERT INTO work_client_bank(
 			id,
@@ -110,9 +110,9 @@
 			#{clientId.id}
 		)
 	</insert>
-	
+
 	<update id="update">
-		UPDATE work_client_bank SET 	
+		UPDATE work_client_bank SET
 			update_by = #{updateBy.id},
 			update_date = #{updateDate},
 			remarks = #{remarks},
@@ -121,8 +121,8 @@
 			client_id = #{clientId.id}
 		WHERE id = #{id}
 	</update>
-	
-	
+
+
 	<!--物理删除-->
 	<update id="delete">
 		DELETE FROM work_client_bank
@@ -135,10 +135,10 @@
             </otherwise>
         </choose>
 	</update>
-	
+
 	<!--逻辑删除-->
 	<update id="deleteByLogic">
-		UPDATE work_client_bank SET 
+		UPDATE work_client_bank SET
 			del_flag = #{DEL_FLAG_DELETE}
         <choose>
             <when test="id !=null and id != ''">
@@ -149,8 +149,8 @@
             </otherwise>
         </choose>
 	</update>
-	
-	
+
+
 	<!-- 根据实体名称和字段名称和字段值获取唯一记录 -->
 	<select id="findUniqueByProperty" resultType="WorkClientBank" statementType="STATEMENT">
 		select * FROM work_client_bank  where ${propertyName} = '${value}'
@@ -163,4 +163,12 @@
 		<include refid="workClientBankJoins"/>
 		WHERE a.client_id = #{clientId.id}
 	</select>
-</mapper>
+
+	<select id="getByBankName" resultType="WorkClientBank" >
+		SELECT
+		<include refid="workClientBankColumns"/>
+		FROM work_client_bank a
+		<include refid="workClientBankJoins"/>
+		WHERE a.our_bank = #{bankName}
+	</select>
+</mapper>

+ 9 - 4
src/main/resources/mappings/modules/workinvoice/WorkInvoiceDao.xml

@@ -67,7 +67,9 @@
 		acu.name as "accountCheckingUserName",
 		a.new_drawer_id as "newDrawerId",
 		(select name from sys_user where id = a.new_drawer_id) as "newDrawerName",
-		a.new_drawer as "newDrawer"
+		a.new_drawer as "newDrawer",
+		a.actual_drawer_id as "actualDrawerId",
+		(select name from sys_user where id = a.actual_drawer_id) as "actualDrawerName"
 	</sql>
 
 	<sql id="workInvoiceJoins">
@@ -1300,7 +1302,8 @@
 			area_id,
 			area_parent_id,
 			new_drawer_id,
-			new_drawer
+			new_drawer,
+			actual_drawer_id
 		) VALUES (
 			#{id},
 			#{number},
@@ -1344,7 +1347,8 @@
 			#{area.id},
 			(select parent_ids from sys_area where id = #{area.id}),
 		    #{newDrawerId},
-		    #{newDrawer}
+		    #{newDrawer},
+		    #{actualDrawerId}
 		)
 	</insert>
 
@@ -1387,7 +1391,8 @@
 			area_id = #{area.id},
 			area_parent_id = (select parent_ids from sys_area where id = #{area.id}),
 			new_drawer_id = #{newDrawerId},
-			new_drawer = #{newDrawer}
+			new_drawer = #{newDrawer},
+			actual_drawer_id = #{actualDrawerId}
 		WHERE id = #{id}
 	</update>
 	<update id="updateDate">

+ 8 - 4
src/main/resources/mappings/modules/workstaff/WorkStaffBasicInfoDao.xml

@@ -58,7 +58,8 @@
 		a.try_out_job AS "tryOutJob",
 		a.trial_period AS "trialPeriod",
 		a.individual_resume AS "individualResume",
-		a.highest_education As "highestEducation"
+		a.highest_education As "highestEducation",
+		a.hand_signature As "handSignature"
 <!--		ur.role_id AS "roleId",-->
 <!--		r.name AS "roleName"-->
 	</sql>
@@ -355,7 +356,8 @@
 			try_out_job,
 			trial_period,
 			individual_resume,
-			highest_education
+			highest_education,
+			hand_signature
 		) VALUES (
 			#{id},
 			#{createBy.id},
@@ -405,7 +407,8 @@
 			#{tryOutJob},
 			#{trialPeriod},
 			#{individualResume},
-			#{highestEducation}
+			#{highestEducation},
+			#{handSignature}
 		)
 	</insert>
 
@@ -455,7 +458,8 @@
 			try_out_job = #{tryOutJob},
 			trial_period = #{trialPeriod},
 			individual_resume = #{individualResume},
-			highest_education = #{highestEducation}
+			highest_education = #{highestEducation},
+			hand_signature = #{handSignature}
 		WHERE id = #{id}
 	</update>
 

+ 106 - 0
src/main/webapp/WEB-INF/tags/sys/treeselectNewDrawer.tag

@@ -0,0 +1,106 @@
+<%@ tag language="java" pageEncoding="UTF-8"%>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<%@ attribute name="id" type="java.lang.String" required="true" description="编号"%>
+<%@ attribute name="name" type="java.lang.String" required="true" description="隐藏域名称(ID)"%>
+<%@ attribute name="value" type="java.lang.String" required="true" description="隐藏域值(ID)"%>
+<%@ attribute name="labelName" type="java.lang.String" required="true" description="输入框名称(Name)"%>
+<%@ attribute name="labelValue" type="java.lang.String" required="true" description="输入框值(Name)"%>
+<%@ attribute name="title" type="java.lang.String" required="true" description="选择框标题"%>
+<%@ attribute name="url" type="java.lang.String" required="true" description="树结构数据地址"%>
+<%@ attribute name="checked" type="java.lang.Boolean" required="false" description="是否显示复选框,如果不需要返回父节点,请设置notAllowSelectParent为true"%>
+<%@ attribute name="extId" type="java.lang.String" required="false" description="排除掉的编号(不能选择的编号)"%>
+<%@ attribute name="isAll" type="java.lang.Boolean" required="false" description="是否列出全部数据,设置true则不进行数据权限过滤(目前仅对Office有效)"%>
+<%@ attribute name="notAllowSelectRoot" type="java.lang.Boolean" required="false" description="不允许选择根节点"%>
+<%@ attribute name="notAllowSelectParent" type="java.lang.Boolean" required="false" description="不允许选择父节点"%>
+<%@ attribute name="module" type="java.lang.String" required="false" description="过滤栏目模型(只显示指定模型,仅针对CMS的Category树)"%>
+<%@ attribute name="selectScopeModule" type="java.lang.Boolean" required="false" description="选择范围内的模型(控制不能选择公共模型,不能选择本栏目外的模型)(仅针对CMS的Category树)"%>
+<%@ attribute name="allowClear" type="java.lang.Boolean" required="false" description="是否允许清除"%>
+<%@ attribute name="allowInput" type="java.lang.Boolean" required="false" description="文本框可填写"%>
+<%@ attribute name="cssClass" type="java.lang.String" required="false" description="css样式"%>
+<%@ attribute name="cssStyle" type="java.lang.String" required="false" description="css样式"%>
+<%@ attribute name="smallBtn" type="java.lang.Boolean" required="false" description="缩小按钮显示"%>
+<%@ attribute name="hideBtn" type="java.lang.Boolean" required="false" description="是否显示按钮"%>
+<%@ attribute name="disabled" type="java.lang.String" required="false" description="是否限制选择,如果限制,设置为disabled"%>
+<%@ attribute name="dataMsgRequired" type="java.lang.String" required="false" description=""%>
+<%@ attribute name="rule" type="java.lang.String" required="false" description="考勤规则模块用"%>
+	<input id="${id}Id" name="${name}" class="${cssClass}" type="hidden" value="${value}" />
+	<div class="input-group">
+		<input id="${id}Name" placeholder="请选择${title}" name="${labelName}" ${allowInput?'':'readonly="readonly"'}  type="text" value="${labelValue}" data-msg-required="${dataMsgRequired}"
+		class="${cssClass}" style="${cssStyle}"/>
+       		 <span class="input-group-btn">
+	       		 <button type="button"  id="${id}Button1" class="btn <c:if test="${fn:contains(cssClass, 'input-sm')}"> btn-sm </c:if><c:if test="${fn:contains(cssClass, 'input-lg')}"> btn-lg </c:if>  btn-primary ${disabled} ${hideBtn ? 'hide' : ''}"><i class="fa fa-search"></i>
+	             </button>
+       		 </span>
+
+    </div>
+	 <label id="${id}Name-error" class="error" for="${id}Name" style="display:none"></label>
+<script type="text/javascript">
+	$("#${id}Button1, #${id}Name").click(function(){
+		// 是否限制选择,如果限制,设置为disabled
+		if ($("#${id}Button1").hasClass("disabled")){
+			return true;
+		}
+		// 正常打开
+		top.layer.open({
+		    type: 2,
+		    area: ['300px', '420px'],
+		    title:"选择${title}",
+		    ajaxData:{selectIds: $("#${id}Id").val()},
+		    content: "${ctx}/tag/treeselect?url="+encodeURIComponent("${url}")+"&module=${module}&checked=${checked}&extId=${extId}&isAll=${isAll}&unit=${unit}" ,
+		    btn: ['确定', '关闭']
+    	       ,yes: function(index, layero){ //或者使用btn1
+						var tree = layero.find("iframe")[0].contentWindow.tree;//h.find("iframe").contents();
+						var ids = [], names = [], nodes = [];
+						if ("${checked}" == "true"){
+							nodes = tree.getCheckedNodes(true);
+						}else{
+							nodes = tree.getSelectedNodes();
+						}
+						for(var i=0; i<nodes.length; i++) {//<c:if test="${checked && notAllowSelectParent}">
+							if (nodes[i].isParent){
+								continue; // 如果为复选框选择,则过滤掉父节点
+							}//</c:if><c:if test="${notAllowSelectRoot}">
+							if (nodes[i].level == 0){
+								//top.$.jBox.tip("不能选择根节点("+nodes[i].name+")请重新选择。");
+								// top.layer.msg("不能选择根节点("+nodes[i].name+")请重新选择。", {icon: 0});
+								// return false;
+							}//</c:if><c:if test="${notAllowSelectParent}">
+							if (nodes[i].isParent){
+								//top.$.jBox.tip("不能选择父节点("+nodes[i].name+")请重新选择。");
+								//layer.msg('有表情地提示');
+								// top.layer.msg("不能选择父节点("+nodes[i].name+")请重新选择。", {icon: 0});
+								// return false;
+							}//</c:if><c:if test="${not empty module && selectScopeModule}">
+							if (nodes[i].module == ""){
+								//top.$.jBox.tip("不能选择公共模型("+nodes[i].name+")请重新选择。");
+								// top.layer.msg("不能选择公共模型("+nodes[i].name+")请重新选择。", {icon: 0});
+								// return false;
+							}else if (nodes[i].module != "${module}"){
+								//top.$.jBox.tip("不能选择当前栏目以外的栏目模型,请重新选择。");
+								// top.layer.msg("不能选择当前栏目以外的栏目模型,请重新选择。", {icon: 0});
+								// return false;
+							}//</c:if>
+							ids.push(nodes[i].id);
+							names.push(nodes[i].name);//<c:if test="${!checked}">
+							break; // 如果为非复选框选择,则返回第一个选择  </c:if>
+						}
+						$("#${id}Id").val(ids.join(",").replace(/u_/ig,"")).change();
+						$("#${id}Name").val(names.join(",")).change();
+						$("#${id}Name").focus();
+						var rule="${rule}";
+						var id="${id}";
+						if(rule=='rule'){
+                            var _placeName =  id.split("_")[0]+"_placeName";
+                            var _itude =  id.split("_")[0]+"_itude";
+                            $("#"+_placeName).val("");
+                            $("#"+_itude).val("");
+						}
+						top.layer.close(index);
+				    	       },
+    	cancel: function(index){ //或者使用btn2
+    	           //按钮【按钮二】的回调
+    	       }
+		});
+
+	});
+</script>

+ 7 - 7
src/main/webapp/WEB-INF/tags/sys/treeselectact.tag

@@ -28,9 +28,9 @@
 		class="${cssClass}" style="${cssStyle}"/>
        		 <span class="input-group-btn">
 	       		 <button type="button"  id="${id}Button" class="btn <c:if test="${fn:contains(cssClass, 'input-sm')}"> btn-sm </c:if><c:if test="${fn:contains(cssClass, 'input-lg')}"> btn-lg </c:if>  btn-primary ${disabled} ${hideBtn ? 'hide' : ''}"><i class="fa fa-search"></i>
-	             </button> 
+	             </button>
        		 </span>
-       		
+
     </div>
 	 <label id="${id}Name-error" class="error" for="${id}Name" style="display:none"></label>
 <script type="text/javascript">
@@ -39,9 +39,9 @@
 		if ($("#${id}Button").hasClass("disabled")){
 			return true;
 		}
-		// 正常打开	
+		// 正常打开
 		top.layer.open({
-		    type: 2, 
+		    type: 2,
 		    area: ['300px', '420px'],
 		    title:"选择${title}",
 		    ajaxData:{selectIds: $("#${id}Id").val()},
@@ -92,7 +92,7 @@
     	cancel: function(index){ //或者使用btn2
     	           //按钮【按钮二】的回调
     	       }
-		}); 
-	
+		});
+
 	});
-</script>
+</script>

+ 65 - 4
src/main/webapp/WEB-INF/tags/sys/treeselectoffices.tag

@@ -31,9 +31,9 @@
 	       		 <button style="font-size:14px;" type="button"  id="${id}Button" class="nav-btn nav-btn-add ${disabled} ${hideBtn ? 'hide' : ''}"><i class="fa fa-search"></i>&nbsp;选择
 	             </button>
        		 </span>
-
-</div>
-<label id="${id}Name-error" class="error" for="${id}Name" style="display:none"></label>
+       		
+    </div>
+	 <label id="${id}Name-error" class="error" for="${id}Name" style="display:none"></label>
 <script type="text/javascript">
 	$("#${id}Button, #${id}Name").click(function(){
 		// 是否限制选择,如果限制,设置为disabled
@@ -98,6 +98,67 @@
 			}
 		});
 
+		    type: 2,
+		    area: ['300px', '420px'],
+		    title:"选择${title}",
+		    ajaxData:{selectIds: $("#${id}Id").val()},
+		    content: "${ctx}/tag/treeselect?url="+encodeURIComponent("${url}")+"&module=${module}&checked=${checked}&extId=${extId}&isAll=${isAll}&flagOffice=${flagOffice}&selectIds="+selectIds ,
+		    btn: ['确定', '关闭']
+    	       ,yes: function(index, layero){ //或者使用btn1
+						var tree = layero.find("iframe")[0].contentWindow.tree;//h.find("iframe").contents();
+						var ids = [], names = [],parentIds=[], nodes = [];
+						if ("${checked}" == "true"){
+							nodes = tree.getCheckedNodes(true);
+						}else{
+							nodes = tree.getSelectedNodes();
+						}
+						for(var i=0; i<nodes.length; i++) {//<c:if test="${checked && notAllowSelectParent}">
+							if (nodes[i].isParent){
+								continue; // 如果为复选框选择,则过滤掉父节点
+							}//</c:if><c:if test="${notAllowSelectRoot}">
+							if (nodes[i].level == 0){
+								//top.$.jBox.tip("不能选择根节点("+nodes[i].name+")请重新选择。");
+								top.layer.msg("不能选择根节点("+nodes[i].name+")请重新选择。", {icon: 0});
+								return false;
+							}//</c:if><c:if test="${notAllowSelectParent}">
+							if (nodes[i].isParent){
+								//top.$.jBox.tip("不能选择父节点("+nodes[i].name+")请重新选择。");
+								//layer.msg('有表情地提示');
+								top.layer.msg("不能选择父节点("+nodes[i].name+")请重新选择。", {icon: 0});
+								return false;
+							}//</c:if><c:if test="${not empty module && selectScopeModule}">
+							if (nodes[i].module == ""){
+								//top.$.jBox.tip("不能选择公共模型("+nodes[i].name+")请重新选择。");
+								top.layer.msg("不能选择公共模型("+nodes[i].name+")请重新选择。", {icon: 0});
+								return false;
+							}else if (nodes[i].module != "${module}"){
+								//top.$.jBox.tip("不能选择当前栏目以外的栏目模型,请重新选择。");
+								top.layer.msg("不能选择当前栏目以外的栏目模型,请重新选择。", {icon: 0});
+								return false;
+							}//</c:if>
+							if ((nodes[i].pId)==("7f776d072d7b4c839cef4e63ce6dbfa5")){
+								ids.push(nodes[1].id);
+								var fName = '';
+								fName = createFName(nodes[1],fName);
+								parentIds.push(fName);
+							}
+							ids.push(nodes[i].id);
+                            <c:if test="${retnParent}">
+                            var fName = '';
+                            fName = createFName(nodes[i],fName);
+                            parentIds.push(fName);
+                            </c:if>
+							names.push(nodes[i].name);//<c:if test="${!checked}">
+							break; // 如果为非复选框选择,则返回第一个选择  </c:if>
+						}
+						changeOffice(ids,names,parentIds);
+						top.layer.close(index);
+				    	       },
+    	cancel: function(index){ //或者使用btn2
+    	           //按钮【按钮二】的回调
+    	       }
+		});
+
 	});
 	function createFName(node,fName) {
 		var parentNode = node.getParentNode();
@@ -108,4 +169,4 @@
 		fName+=node.name;
 		return fName;
 	}
-</script>
+</script>

+ 1 - 1
src/main/webapp/webpage/modules/projectAccessory/collectAccessoryForm.jsp

@@ -165,7 +165,7 @@
 						</div>
 					</div>
 				</div>
-				<input id="attachment_file" type="file" name="attachment_file" multiple="multiple" style="display: none;" onChange="if(this.value)insertTitle(this.value);"/>
+				<input id="attachment_file" type="file" multiple="multiple" style="display: none;" onChange="if(this.value)insertTitle(this.value);"/>
 				<span id="attachment_title"></span>
 				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
 					<table id="upTable" class="table table-bordered table-condensed details">

+ 6 - 1
src/main/webapp/webpage/modules/workclientinfo/all/workClientInfoForm.jsp

@@ -577,7 +577,8 @@
                             <thead>
                             <tr>
                                 <th class="sort-column companyType"><%--<font color="red">*</font>--%>开户银行</th>
-                                <th width="400px;"><%--<font color="red">*</font>--%>开户账号</th>
+                                <th width="300px;"><%--<font color="red">*</font>--%>开户账号</th>
+                                <th width="300px;">备注信息</th>
                                 <th width="100px">操作</th>
                             </tr>
                             </thead>
@@ -600,6 +601,10 @@
                                         <input placeholder="请输入开户账号 " id="workClientBankList{{idx}}_bankNumber" onblur="testBankNumber(this.value)" name="workClientBankList[{{idx}}].bankNumber" type="text" value="{{row.bankNumber}}" maxlength="25"  class="form-control required digits "/>
                                     </td>
 
+                                    <td>
+                                        <input placeholder="请输入备注信息 " id="workClientBankList{{idx}}_remarks" name="workClientBankList[{{idx}}].remarks" type="text" value="{{row.remarks}}" maxlength="255"  class="form-control "/>
+                                    </td>
+
                                     <td class="text-center op-td" width="10">
                                         {{#delBtn}}<span class="op-btn op-btn-delete" onclick="delRow(this, '#workClientBankList{{idx}}')" title="删除"><i class="fa fa-trash"></i>&nbsp;删除</span>{{/delBtn}}
                                     </td>

+ 6 - 1
src/main/webapp/webpage/modules/workclientinfo/workClientInfoForm.jsp

@@ -615,7 +615,8 @@
                             <thead>
                             <tr>
                                 <th class="sort-column companyType"><%--<font color="red">*</font>--%>开户银行</th>
-                                <th width="400px;"><%--<font color="red">*</font>--%>开户账号</th>
+                                <th width="300px;"><%--<font color="red">*</font>--%>开户账号</th>
+                                <th width="300px;"><%--<font color="red">*</font>--%>备注信息</th>
                                 <th width="100px">操作</th>
                             </tr>
                             </thead>
@@ -638,6 +639,10 @@
                                         <input placeholder="请输入开户账号 " id="workClientBankList{{idx}}_bankNumber" onblur="testBankNumber(this.value)" name="workClientBankList[{{idx}}].bankNumber" type="text" value="{{row.bankNumber}}" maxlength="25"  class="form-control required digits "/>
                                     </td>
 
+                                    <td>
+                                        <input placeholder="请输入备注信息 " id="workClientBankList{{idx}}_remarks" name="workClientBankList[{{idx}}].remarks" type="text" value="{{row.remarks}}" maxlength="255"  class="form-control "/>
+                                    </td>
+
                                     <td class="text-center op-td" width="10">
                                         {{#delBtn}}<span class="op-btn op-btn-delete" onclick="delRow(this, '#workClientBankList{{idx}}')" title="删除"><i class="fa fa-trash"></i>&nbsp;删除</span>{{/delBtn}}
                                     </td>

+ 3 - 1
src/main/webapp/webpage/modules/workclientinfo/workClientInfoFormDetail.jsp

@@ -127,7 +127,8 @@
                         <tr>
                             <th width="80px">序号</th>
                             <th ><%--<font color="red">*</font>--%>开户银行</th>
-                            <th width="400px;"><%--<font color="red">*</font>--%>开户账号</th>
+                            <th width="300px;"><%--<font color="red">*</font>--%>开户账号</th>
+                            <th width="300px;"><%--<font color="red">*</font>--%>备注信息</th>
 
                         </tr>
                         </thead>
@@ -137,6 +138,7 @@
                                 <td>${status.index + 1}</td>
                                 <td>${workClientBank.ourBank}</td>
                                 <td>${workClientBank.bankNumber}</td>
+                                <td>${workClientBank.remarks}</td>
                             </tr>
                         </c:forEach>
                         <c:if test="${bankSize == 0}">

+ 1 - 1
src/main/webapp/webpage/modules/workcontractinfo/newWorkContract/workContractInfoFormAdd.jsp

@@ -854,7 +854,7 @@
 									</div>
 								</div>
 							</div>
-							<input id="attachment_file" type="file" name="attachment_file" multiple="multiple" style="display: none;" onChange="if(this.value)insertTitle(this.value);"/>
+							<input id="attachment_file" type="file" multiple="multiple" style="display: none;" onChange="if(this.value)insertTitle(this.value);"/>
 							<span id="attachment_title"></span>
 							<div class="layui-item layui-col-xs12" style="padding:0 16px;">
 								<table id="listAttachment" class="table table-bordered table-condensed details">

+ 74 - 4
src/main/webapp/webpage/modules/workinvoice/workInvoiceAllForm.jsp

@@ -35,6 +35,18 @@
 					parent.layer.msg("请选择发票类型",{icon:0});
 					return false;
 				}
+				if(invoiceType == 1){
+					var bank = $("#bank").val();
+					if(null == bank || undefined == bank || '' == bank){
+						parent.layer.msg("请选择开户银行",{icon:0});
+						return false;
+					}
+					var bankNumber = $("#bankNumber").val();
+					if(null == bankNumber || undefined == bankNumber || '' == bankNumber){
+						parent.layer.msg("银行账号不可为空",{icon:0});
+						return false;
+					}
+				}
 				var leng=$("#workInvoiceProjectRelationList tr").length;
 				if (leng>1){
 					var count=0;
@@ -101,6 +113,8 @@
 				$(".count2").show();
 			}
 
+			setValuee('${workInvoice.client.id}')
+
 			layui.use(['form', 'layer'], function () {
 				var form = layui.form;
 				form.on("radio(invoiceType)", function(event){
@@ -148,6 +162,50 @@
 				$("#attachment_btn").click(function () {
 					$("#attachment_file").click();
 				});
+				window.bankShow = function (data){
+					$('#bank').html('<option value="">请选择开户行信息</option>')
+					//对选中开票单位的银行做级联操作
+					for (var info in data){
+						if(data[info].ourBank == '${workInvoice.bank}'){
+							$('#bank').append(new Option(data[info].ourBank,data[info].ourBank,true,true));
+							$("#bankNumber").val(data[info].bankNumber);
+							if(null != data[info].remarks && undefined != data[info].remarks && '' != data[info].remarks){
+								$('#bankRemarks').html('备注:' + data[info].remarks);
+							}else{
+								$('#bankRemarks').html('');
+							}
+						}else{
+							$('#bank').append(new Option(data[info].ourBank,data[info].ourBank));
+						}
+					}
+
+					layui.form.render("select");
+					form.render();
+				}
+
+				layui.form.on('select(bankFilter)',function(d) {
+					if(null == d.value || undefined == d.value || '' == d.value){
+						$('#bankNumber').val("");
+						$('#bankRemarks').html('');
+					}else{
+						$.ajax({
+							type:"post",
+							url:'${ctx}/workinvoiceTwo/workinvoiceTwo/getBankInfo',
+							data:{"bankName":d.value},
+							dataType:"json",
+							async: false,
+							success:function(data){
+								var info = data.data
+								$('#bankNumber').val(info.bankNumber);
+								if(null != info.remarks && undefined != info.remarks && '' != info.remarks){
+									$('#bankRemarks').html('备注:' + info.remarks);
+								}else{
+									$('#bankRemarks').html('');
+								}
+							}
+						})
+					}
+				});
 			});
 			/*$('#money').keyup(function(){
                 var c=$(this);
@@ -212,6 +270,8 @@
 		});
 
 		function setValuee(obj){
+			$("#bankNumber").val("");
+			$('#bankRemarks').html('');
 			$.ajax({
 				type:'post',
 				url:'${ctx}/workinvoice/workInvoice/getWorkClientInfo',
@@ -220,12 +280,13 @@
 				},
 				success:function(data){
 					var d = JSON.parse(data);
-					$("#bank").val(d.bank);
+					//$("#bank").val(d.bank);
 					$("#orUnicode").val(d.orUnicode);
-					$("#bankNumber").val(d.bankNumber);
+					//$("#bankNumber").val(d.bankNumber);
 					$("#telephone").val(d.telephone);
 					$("#address").val(d.registerAddress);
 					$("#ids").val(d.ids);
+					window.bankShow(d.bankList);
 				}
 			})
 		}
@@ -877,13 +938,15 @@
 				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label"><span class="require-item invoicetype">*</span>开户银行:</label>
 					<div class="layui-input-block">
-						<form:input id ="bank"  path="bank" htmlEscape="false" placeholder="请输入开户银行"  class="form-control layui-input"/>
+						<select id="bank" name="bank" value="${workInvoice.bank}" lay-filter="bankFilter"></select>
+						<span id="bankRemarks" class="spanzj" style="color:red;"></span>
+						<%--<form:input id ="bank"  path="bank" htmlEscape="false" placeholder="请输入开户银行"  class="form-control layui-input"/>--%>
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label"><span class="require-item invoicetype">*</span>银行账号:</label>
 					<div class="layui-input-block">
-						<form:input id="bankNumber" path="bankNumber" htmlEscape="false" placeholder="请输入银行账号"  onkeyup="this.value=this.value.replace(/[^\d-]/g,'')" class="form-control layui-input"/>
+						<form:input id="bankNumber" path="bankNumber" htmlEscape="false" readonly="true" placeholder="请输入银行账号"  onkeyup="this.value=this.value.replace(/[^\d-]/g,'')" class="form-control layui-input"/>
 					</div>
 				</div>
 				</div>
@@ -945,6 +1008,13 @@
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label double-line"><span class="require-item">*</span>实际开票人:</label>
+					<div class="layui-input-block  with-icon">
+						<sys:treeselectNewDrawer id="actualDrawer" name="actualDrawerId" value="${workInvoice.actualDrawerId}" labelName="actualDrawerName" labelValue="${workInvoice.actualDrawerName}"
+												 cssStyle="background-color: #fff" title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control judgment layui-input" allowClear="true" notAllowSelectParent="true"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label"><span class="require-item">*</span>对账人:</label>
 					<div class="layui-input-block  with-icon">
 						<sys:treeselect id="master" name="accountCheckingUserId" value="${workInvoice.accountCheckingUserId}" labelName="accountCheckingUserName" labelValue="${workInvoice.accountCheckingUserName}"

+ 7 - 0
src/main/webapp/webpage/modules/workinvoice/workInvoiceAllModify.jsp

@@ -902,6 +902,13 @@
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label double-line"><span class="require-item">*</span>实际开票人:</label>
+					<div class="layui-input-block  with-icon">
+						<sys:treeselectNewDrawer id="actualDrawer" name="actualDrawerId" value="${workInvoice.actualDrawerId}" labelName="actualDrawerName" labelValue="${workInvoice.actualDrawerName}"
+												 cssStyle="background-color: #fff" title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control judgment layui-input" allowClear="true" notAllowSelectParent="true"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label"><span class="require-item">*</span>对账人:</label>
 					<div class="layui-input-block  with-icon">
 						<sys:treeselect id="master" name="accountCheckingUserId" value="${workInvoice.accountCheckingUserId}" labelName="accountCheckingUserName" labelValue="${workInvoice.accountCheckingUserName}"

+ 6 - 0
src/main/webapp/webpage/modules/workinvoice/workInvoiceAllReceiptForm.jsp

@@ -335,6 +335,12 @@
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">实际开票人:</label>
+					<div class="layui-input-block  with-icon">
+						<input type="text"  readonly="true" value="${workInvoice.actualDrawerName}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label">对账人:</label>
 					<div class="layui-input-block  with-icon">
 						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoice.accountCheckingUserName}" style="background-color: #f1f1f1"/>

+ 74 - 4
src/main/webapp/webpage/modules/workinvoice/workInvoiceAllTwoForm.jsp

@@ -35,6 +35,18 @@
 					parent.layer.msg("请选择发票类型",{icon:0});
 					return false;
 				}
+				if(invoiceType == 1){
+					var bank = $("#bank").val();
+					if(null == bank || undefined == bank || '' == bank){
+						parent.layer.msg("请选择开户银行",{icon:0});
+						return false;
+					}
+					var bankNumber = $("#bankNumber").val();
+					if(null == bankNumber || undefined == bankNumber || '' == bankNumber){
+						parent.layer.msg("银行账号不可为空",{icon:0});
+						return false;
+					}
+				}
 				var leng=$("#workInvoiceProjectRelationList tr").length;
 				if (leng>1){
 					var count=0;
@@ -101,6 +113,8 @@
 				$(".count2").show();
 			}
 
+			setValuee('${workInvoice.client.id}')
+
 			layui.use(['form', 'layer'], function () {
 				var form = layui.form;
 				form.on("radio(invoiceType)", function(event){
@@ -148,6 +162,50 @@
 				$("#attachment_btn").click(function () {
 					$("#attachment_file").click();
 				});
+				window.bankShow = function (data){
+					$('#bank').html('<option value="">请选择开户行信息</option>')
+					//对选中开票单位的银行做级联操作
+					for (var info in data){
+						if(data[info].ourBank == '${workInvoice.bank}'){
+							$('#bank').append(new Option(data[info].ourBank,data[info].ourBank,true,true));
+							$("#bankNumber").val(data[info].bankNumber);
+							if(null != data[info].remarks && undefined != data[info].remarks && '' != data[info].remarks){
+								$('#bankRemarks').html('备注:' + data[info].remarks);
+							}else{
+								$('#bankRemarks').html('');
+							}
+						}else{
+							$('#bank').append(new Option(data[info].ourBank,data[info].ourBank));
+						}
+					}
+
+					layui.form.render("select");
+					form.render();
+				}
+
+				layui.form.on('select(bankFilter)',function(d) {
+					if(null == d.value || undefined == d.value || '' == d.value){
+						$('#bankNumber').val("");
+						$('#bankRemarks').html('');
+					}else{
+						$.ajax({
+							type:"post",
+							url:'${ctx}/workinvoiceTwo/workinvoiceTwo/getBankInfo',
+							data:{"bankName":d.value},
+							dataType:"json",
+							async: false,
+							success:function(data){
+								var info = data.data
+								$('#bankNumber').val(info.bankNumber);
+								if(null != info.remarks && undefined != info.remarks && '' != info.remarks){
+									$('#bankRemarks').html('备注:' + info.remarks);
+								}else{
+									$('#bankRemarks').html('');
+								}
+							}
+						})
+					}
+				});
 			});
 			/*$('#money').keyup(function(){
                 var c=$(this);
@@ -212,6 +270,8 @@
 		});
 
 		function setValuee(obj){
+			$("#bankNumber").val("");
+			$('#bankRemarks').html('');
 			$.ajax({
 				type:'post',
 				url:'${ctx}/workinvoice/workInvoice/getWorkClientInfo',
@@ -220,12 +280,13 @@
 				},
 				success:function(data){
 					var d = JSON.parse(data);
-					$("#bank").val(d.bank);
+					//$("#bank").val(d.bank);
 					$("#orUnicode").val(d.orUnicode);
-					$("#bankNumber").val(d.bankNumber);
+					//$("#bankNumber").val(d.bankNumber);
 					$("#telephone").val(d.telephone);
 					$("#address").val(d.registerAddress);
 					$("#ids").val(d.ids);
+					window.bankShow(d.bankList);
 				}
 			})
 		}
@@ -846,13 +907,15 @@
 				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label"><span class="require-item invoicetype">*</span>开户银行:</label>
 					<div class="layui-input-block">
-						<form:input id ="bank"  path="bank" htmlEscape="false" placeholder="请输入开户银行"  class="form-control layui-input"/>
+						<select id="bank" name="bank" value="${workInvoice.bank}" lay-filter="bankFilter"></select>
+						<span id="bankRemarks" class="spanzj" style="color:red;"></span>
+						<%--<form:input id ="bank"  path="bank" htmlEscape="false" placeholder="请输入开户银行"  class="form-control layui-input"/>--%>
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label"><span class="require-item invoicetype">*</span>银行账号:</label>
 					<div class="layui-input-block">
-						<form:input id="bankNumber" path="bankNumber" htmlEscape="false" placeholder="请输入银行账号" onkeyup="this.value=this.value.replace(/[^\d-]/g,'')" class="form-control layui-input"/>
+						<form:input id="bankNumber" path="bankNumber" htmlEscape="false" readonly="true" placeholder="请输入银行账号" onkeyup="this.value=this.value.replace(/[^\d-]/g,'')" class="form-control layui-input"/>
 					</div>
 				</div>
 				</div>
@@ -914,6 +977,13 @@
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label double-line"><span class="require-item">*</span>实际开票人:</label>
+					<div class="layui-input-block  with-icon">
+						<sys:treeselectNewDrawer id="actualDrawer" name="actualDrawerId" value="${workInvoice.actualDrawerId}" labelName="actualDrawerName" labelValue="${workInvoice.actualDrawerName}"
+												 cssStyle="background-color: #fff" title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control judgment layui-input" allowClear="true" notAllowSelectParent="true"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label"><span class="require-item">*</span>对账人:</label>
 					<div class="layui-input-block  with-icon">
 						<sys:treeselect id="master" name="accountCheckingUserId" value="${workInvoice.accountCheckingUserId}" labelName="accountCheckingUserName" labelValue="${workInvoice.accountCheckingUserName}"

+ 6 - 0
src/main/webapp/webpage/modules/workinvoice/workInvoiceAllTwoModify.jsp

@@ -481,6 +481,12 @@
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">实际开票人:</label>
+					<div class="layui-input-block  with-icon">
+						<input type="text"  readonly="true" value="${workInvoice.actualDrawerName}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label">对账人:</label>
 					<div class="layui-input-block  with-icon">
 						<input type="text"  readonly="true" value="${workInvoice.accountCheckingUserName}"  class="form-control layui-input" style="background-color: #f1f1f1" >

+ 6 - 0
src/main/webapp/webpage/modules/workinvoice/workInvoiceAllTwoReceiptForm.jsp

@@ -335,6 +335,12 @@
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">实际开票人:</label>
+					<div class="layui-input-block  with-icon">
+						<input type="text"  readonly="true" value="${workInvoice.actualDrawerName}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label">对账人:</label>
 					<div class="layui-input-block  with-icon">
 						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoice.accountCheckingUserName}" style="background-color: #f1f1f1"/>

+ 6 - 0
src/main/webapp/webpage/modules/workinvoice/workInvoiceAuditEnd.jsp

@@ -626,6 +626,12 @@
 				</div>
 			</div>
 			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">实际开票人:</label>
+				<div class="layui-input-block  with-icon">
+					<input type="text"  readonly="true" value="${workInvoice.actualDrawerName}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
 				<label class="layui-form-label">对账人:</label>
 				<div class="layui-input-block  with-icon">
 					<input type="text"  readonly="true" value="${workInvoice.accountCheckingUserName}"  class="form-control layui-input" style="background-color: #f1f1f1" >

+ 77 - 4
src/main/webapp/webpage/modules/workinvoice/workInvoiceModify.jsp

@@ -38,6 +38,20 @@
 					}
 				}
 
+				var invoiceType=$('input:radio[name="invoiceType"]:checked').val();
+				if(invoiceType == 1){
+					var bank = $("#bank").val();
+					if(null == bank || undefined == bank || '' == bank){
+						parent.layer.msg("请选择开户银行",{icon:0});
+						return false;
+					}
+					var bankNumber = $("#bankNumber").val();
+					if(null == bankNumber || undefined == bankNumber || '' == bankNumber){
+						parent.layer.msg("银行账号不可为空",{icon:0});
+						return false;
+					}
+				}
+
 				if(obj == 2){
                     $("#flag").val("no");
                 }else{
@@ -64,6 +78,7 @@
             return false;
         }
         $(document).ready(function() {
+			setValuee('${workInvoice.client.id}')
 			layui.use(['form', 'layer'], function () {
 				var form = layui.form;
 				form.on("radio(invoiceType)", function(event){
@@ -97,6 +112,52 @@
 					}
 					form.render();
 				})
+
+
+				window.bankShow = function (data){
+					$('#bank').html('<option value="">请选择开户行信息</option>')
+					//对选中开票单位的银行做级联操作
+					for (var info in data){
+						if(data[info].ourBank == '${workInvoice.bank}'){
+							$('#bank').append(new Option(data[info].ourBank,data[info].ourBank,true,true));
+							$("#bankNumber").val(data[info].bankNumber);
+							if(null != data[info].remarks && undefined != data[info].remarks && '' != data[info].remarks){
+								$('#bankRemarks').html('备注:' + data[info].remarks);
+							}else{
+								$('#bankRemarks').html('');
+							}
+						}else{
+							$('#bank').append(new Option(data[info].ourBank,data[info].ourBank));
+						}
+					}
+
+					layui.form.render("select");
+					form.render();
+				}
+
+				layui.form.on('select(bankFilter)',function(d) {
+					if(null == d.value || undefined == d.value || '' == d.value){
+						$('#bankNumber').val("");
+						$('#bankRemarks').html('');
+					}else{
+						$.ajax({
+							type:"post",
+							url:'${ctx}/workinvoiceTwo/workinvoiceTwo/getBankInfo',
+							data:{"bankName":d.value},
+							dataType:"json",
+							async: false,
+							success:function(data){
+								var info = data.data
+								$('#bankNumber').val(info.bankNumber);
+								if(null != info.remarks && undefined != info.remarks && '' != info.remarks){
+									$('#bankRemarks').html('备注:' + info.remarks);
+								}else{
+									$('#bankRemarks').html('');
+								}
+							}
+						})
+					}
+				});
 			});
 
 			var newDrawerRadio = '${workInvoice.newDrawer}';//后端获取值
@@ -188,6 +249,8 @@
 			});
         });
         function setValuee(obj){
+			$("#bankNumber").val("");
+			$('#bankRemarks').html('');
             $.ajax({
                 type:'post',
                 url:'${ctx}/workinvoice/workInvoice/getWorkClientInfo',
@@ -196,12 +259,13 @@
                 },
                 success:function(data){
                     var d = JSON.parse(data);
-                    $("#bank").val(d.bank);
+					//$("#bank").val(d.bank);
                     $("#orUnicode").val(d.orUnicode);
-                    $("#bankNumber").val(d.bankNumber);
+					//$("#bankNumber").val(d.bankNumber);
                     $("#telephone").val(d.telephone);
                     $("#address").val(d.adress);
                     $("#ids").val(d.ids);
+					window.bankShow(d.bankList);
                 }
             })
         }
@@ -855,13 +919,15 @@
 				<div class="layui-item layui-col-sm6 count1">
 					<label class="layui-form-label"><span class="require-item invoicetype">*</span>开户银行:</label>
 					<div class="layui-input-block">
-						<form:input id ="bank"  path="bank" htmlEscape="false" placeholder="请输入开户银行"  class="form-control layui-input"/>
+						<select id="bank" name="bank" value="${workInvoice.bank}" lay-filter="bankFilter"></select>
+						<span id="bankRemarks" class="spanzj" style="color:red;"></span>
+						<%--<form:input id ="bank"  path="bank" htmlEscape="false" placeholder="请输入开户银行"  class="form-control layui-input"/>--%>
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6 count1">
 					<label class="layui-form-label"><span class="require-item invoicetype">*</span>银行账号:</label>
 					<div class="layui-input-block">
-						<form:input id="bankNumber" path="bankNumber" htmlEscape="false" placeholder="请输入银行账号"  class="form-control number layui-input"/>
+						<form:input id="bankNumber" path="bankNumber" htmlEscape="false" readonly="true" placeholder="请输入银行账号"  class="form-control number layui-input"/>
 					</div>
 				</div>
 				<div class="layui-form-item count2">
@@ -920,6 +986,13 @@
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label double-line"><span class="require-item">*</span>实际开票人:</label>
+					<div class="layui-input-block  with-icon">
+						<sys:treeselectNewDrawer id="actualDrawer" name="actualDrawerId" value="${workInvoice.actualDrawerId}" labelName="actualDrawerName" labelValue="${workInvoice.actualDrawerName}"
+												 cssStyle="background-color: #fff" title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control judgment layui-input" allowClear="true" notAllowSelectParent="true"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label"><span class="require-item">*</span>对账人:</label>
 					<div class="layui-input-block  with-icon">
 						<sys:treeselect id="master" name="accountCheckingUserId" value="${workInvoice.accountCheckingUserId}" labelName="accountCheckingUserName" labelValue="${workInvoice.accountCheckingUserName}"

+ 6 - 0
src/main/webapp/webpage/modules/workinvoice/workInvoiceModifyInfo.jsp

@@ -600,6 +600,12 @@
 				</div>
 			</div>
 			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">实际开票人:</label>
+				<div class="layui-input-block  with-icon">
+					<input type="text"  readonly="true" value="${workInvoice.actualDrawerName}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
 				<label class="layui-form-label">对账人:</label>
 				<div class="layui-input-block  with-icon">
 					<input type="text"  readonly="true" value="${workInvoice.accountCheckingUserName}"  class="form-control layui-input" style="background-color: #f1f1f1" >

+ 75 - 5
src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoForm.jsp

@@ -35,6 +35,19 @@
 					parent.layer.msg("请选择发票类型",{icon:0});
 					return false;
 				}
+				if(invoiceType == 1){
+					var bank = $("#bank").val();
+					if(null == bank || undefined == bank || '' == bank){
+						parent.layer.msg("请选择开户银行",{icon:0});
+						return false;
+					}
+					var bankNumber = $("#bankNumber").val();
+					if(null == bankNumber || undefined == bankNumber || '' == bankNumber){
+						parent.layer.msg("银行账号不可为空",{icon:0});
+						return false;
+					}
+				}
+
 				var leng=$("#workInvoiceProjectRelationList tr").length;
 				if (leng>1){
 					var count=0;
@@ -101,6 +114,7 @@
 				$(".count1").hide();
 				$(".count2").show();
 			}
+			setValuee('${workInvoice.client.id}')
 
 			layui.use(['form', 'layer'], function () {
 				var form = layui.form;
@@ -147,6 +161,50 @@
 					}
 				});
 
+				window.bankShow = function (data){
+					$('#bank').html('<option value="">请选择开户行信息</option>')
+					//对选中开票单位的银行做级联操作
+					for (var info in data){
+						if(data[info].ourBank == '${workInvoice.bank}'){
+							$('#bank').append(new Option(data[info].ourBank,data[info].ourBank,true,true));
+							$("#bankNumber").val(data[info].bankNumber);
+							if(null != data[info].remarks && undefined != data[info].remarks && '' != data[info].remarks){
+								$('#bankRemarks').html('备注:' + data[info].remarks);
+							}else{
+								$('#bankRemarks').html('');
+							}
+						}else{
+							$('#bank').append(new Option(data[info].ourBank,data[info].ourBank));
+						}
+					}
+
+					layui.form.render("select");
+					form.render();
+				}
+
+				layui.form.on('select(bankFilter)',function(d) {
+					if(null == d.value || undefined == d.value || '' == d.value){
+						$('#bankNumber').val("");
+						$('#bankRemarks').html('');
+					}else{
+						$.ajax({
+							type:"post",
+							url:'${ctx}/workinvoiceTwo/workinvoiceTwo/getBankInfo',
+							data:{"bankName":d.value},
+							dataType:"json",
+							async: false,
+							success:function(data){
+								var info = data.data
+								$('#bankNumber').val(info.bankNumber);
+								if(null != info.remarks && undefined != info.remarks && '' != info.remarks){
+									$('#bankRemarks').html('备注:' + info.remarks);
+								}else{
+									$('#bankRemarks').html('');
+								}
+							}
+						})
+					}
+				});
 			});
             /*$('#money').keyup(function(){
                 var c=$(this);
@@ -214,7 +272,9 @@
 			});
         });
 
-        function setValuee(obj){
+		function setValuee (obj){
+			$("#bankNumber").val("");
+			$('#bankRemarks').html('');
             $.ajax({
                 type:'post',
                 url:'${ctx}/workinvoiceTwo/workinvoiceTwo/getWorkClientInfo',
@@ -223,12 +283,13 @@
                 },
                 success:function(data){
                     var d = JSON.parse(data);
-                    $("#bank").val(d.bank);
+                    //$("#bank").val(d.bank);
                     $("#orUnicode").val(d.orUnicode);
-                    $("#bankNumber").val(d.bankNumber);
+                    //$("#bankNumber").val(d.bankNumber);
                     $("#telephone").val(d.telephone);
                     $("#address").val(d.registerAddress);
                     $("#ids").val(d.ids);
+					window.bankShow(d.bankList);
                 }
             })
         }
@@ -881,13 +942,15 @@
 				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label"><span class="require-item invoicetype">*</span>开户银行:</label>
 					<div class="layui-input-block">
-						<form:input id ="bank"  path="bank" htmlEscape="false" placeholder="请输入开户银行"  class="form-control layui-input"/>
+						<select id="bank" name="bank" value="${workInvoice.bank}" lay-filter="bankFilter"></select>
+						<%--<form:input id ="bank"  path="bank" htmlEscape="false" placeholder="请输入开户银行"  class="form-control layui-input"/>--%>
+						<span id="bankRemarks" class="spanzj" style="color:red;"></span>
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label"><span class="require-item invoicetype">*</span>银行账号:</label>
 					<div class="layui-input-block">
-						<form:input id="bankNumber" path="bankNumber" htmlEscape="false" placeholder="请输入银行账号" onkeyup="this.value=this.value.replace(/[^\d-]/g,'')"  class="form-control layui-input"/>
+						<form:input id="bankNumber" path="bankNumber" htmlEscape="false" readonly="true" placeholder="请输入银行账号" onkeyup="this.value=this.value.replace(/[^\d-]/g,'')"  class="form-control layui-input"/>
 					</div>
 				</div>
 				</div>
@@ -950,6 +1013,13 @@
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label double-line"><span class="require-item">*</span>实际开票人:</label>
+					<div class="layui-input-block  with-icon">
+						<sys:treeselectNewDrawer id="actualDrawer" name="actualDrawerId" value="${workInvoice.actualDrawerId}" labelName="actualDrawerName" labelValue="${workInvoice.actualDrawerName}"
+										cssStyle="background-color: #fff" title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control judgment layui-input" allowClear="true" notAllowSelectParent="true"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label"><span class="require-item">*</span>对账人:</label>
 					<div class="layui-input-block  with-icon">
 						<sys:treeselect id="master" name="accountCheckingUserId" value="${workInvoice.accountCheckingUserId}" labelName="accountCheckingUserName" labelValue="${workInvoice.accountCheckingUserName}"

+ 74 - 4
src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoModify.jsp

@@ -37,6 +37,19 @@
 						}
 					}
 				}
+				var invoiceType=$('input:radio[name="invoiceType"]:checked').val();
+				if(invoiceType == 1){
+					var bank = $("#bank").val();
+					if(null == bank || undefined == bank || '' == bank){
+						parent.layer.msg("请选择开户银行",{icon:0});
+						return false;
+					}
+					var bankNumber = $("#bankNumber").val();
+					if(null == bankNumber || undefined == bankNumber || '' == bankNumber){
+						parent.layer.msg("银行账号不可为空",{icon:0});
+						return false;
+					}
+				}
 				if(obj == 2){
                     $("#flag").val("no");
                 }else{
@@ -63,6 +76,7 @@
             return false;
         }
         $(document).ready(function() {
+			setValuee('${workInvoice.client.id}')
 			layui.use(['form', 'layer'], function () {
 				var form = layui.form;
 				form.on("radio(invoiceType)", function(event){
@@ -96,6 +110,50 @@
 					}
 					form.render();
 				})
+				window.bankShow = function (data){
+					$('#bank').html('<option value="">请选择开户行信息</option>')
+					//对选中开票单位的银行做级联操作
+					for (var info in data){
+						if(data[info].ourBank == '${workInvoice.bank}'){
+							$('#bank').append(new Option(data[info].ourBank,data[info].ourBank,true,true));
+							$("#bankNumber").val(data[info].bankNumber);
+							if(null != data[info].remarks && undefined != data[info].remarks && '' != data[info].remarks){
+								$('#bankRemarks').html('备注:' + data[info].remarks);
+							}else{
+								$('#bankRemarks').html('');
+							}
+						}else{
+							$('#bank').append(new Option(data[info].ourBank,data[info].ourBank));
+						}
+					}
+
+					layui.form.render("select");
+					form.render();
+				}
+
+				layui.form.on('select(bankFilter)',function(d) {
+					if(null == d.value || undefined == d.value || '' == d.value){
+						$('#bankNumber').val("");
+						$('#bankRemarks').html('');
+					}else{
+						$.ajax({
+							type:"post",
+							url:'${ctx}/workinvoiceTwo/workinvoiceTwo/getBankInfo',
+							data:{"bankName":d.value},
+							dataType:"json",
+							async: false,
+							success:function(data){
+								var info = data.data
+								$('#bankNumber').val(info.bankNumber);
+								if(null != info.remarks && undefined != info.remarks && '' != info.remarks){
+									$('#bankRemarks').html('备注:' + info.remarks);
+								}else{
+									$('#bankRemarks').html('');
+								}
+							}
+						})
+					}
+				});
 			});
 
 			var newDrawerRadio = '${workInvoice.newDrawer}';//后端获取值
@@ -187,6 +245,8 @@
 			});
         });
         function setValuee(obj){
+			$("#bankNumber").val("");
+			$('#bankRemarks').html('');
             $.ajax({
                 type:'post',
                 url:'${ctx}/workinvoiceTwo/workinvoiceTwo/getWorkClientInfo',
@@ -195,12 +255,13 @@
                 },
                 success:function(data){
                     var d = JSON.parse(data);
-                    $("#bank").val(d.bank);
+                    //$("#bank").val(d.bank);
                     $("#orUnicode").val(d.orUnicode);
-                    $("#bankNumber").val(d.bankNumber);
+                    //$("#bankNumber").val(d.bankNumber);
                     $("#telephone").val(d.telephone);
                     $("#address").val(d.adress);
                     $("#ids").val(d.ids);
+					window.bankShow(d.bankList);
                 }
             })
         }
@@ -836,13 +897,15 @@
 				<div class="layui-item layui-col-sm6 count1">
 					<label class="layui-form-label"><span class="require-item invoicetype">*</span>开户银行:</label>
 					<div class="layui-input-block">
-						<form:input id ="bank"  path="bank" htmlEscape="false" placeholder="请输入开户银行"  class="form-control layui-input"/>
+						<select id="bank" name="bank" value="${workInvoice.bank}" lay-filter="bankFilter"></select>
+						<span id="bankRemarks" class="spanzj" style="color:red;"></span>
+						<%--<form:input id ="bank"  path="bank" htmlEscape="false" placeholder="请输入开户银行"  class="form-control layui-input"/>--%>
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6 count1">
 					<label class="layui-form-label"><span class="require-item invoicetype">*</span>银行账号:</label>
 					<div class="layui-input-block">
-						<form:input id="bankNumber" path="bankNumber" htmlEscape="false" placeholder="请输入银行账号"  class="form-control number layui-input"/>
+						<form:input id="bankNumber" path="bankNumber" htmlEscape="false" readonly="true" placeholder="请输入银行账号"  class="form-control number layui-input"/>
 					</div>
 				</div>
 				<div class="layui-form-item count2">
@@ -901,6 +964,13 @@
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label double-line"><span class="require-item">*</span>实际开票人:</label>
+					<div class="layui-input-block  with-icon">
+						<sys:treeselectNewDrawer id="actualDrawer" name="actualDrawerId" value="${workInvoice.actualDrawerId}" labelName="actualDrawerName" labelValue="${workInvoice.actualDrawerName}"
+												 cssStyle="background-color: #fff" title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control judgment layui-input" allowClear="true" notAllowSelectParent="true"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label"><span class="require-item">*</span>对账人:</label>
 					<div class="layui-input-block  with-icon">
 						<sys:treeselect id="master" name="accountCheckingUserId" value="${workInvoice.accountCheckingUserId}" labelName="accountCheckingUserName" labelValue="${workInvoice.accountCheckingUserName}"

+ 6 - 0
src/main/webapp/webpage/modules/workinvoice/workInvoiceView.jsp

@@ -206,6 +206,12 @@
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">实际开票人:</label>
+					<div class="layui-input-block  with-icon">
+						<input type="text"  readonly="true" value="${workInvoice.actualDrawerName}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label">对账人:</label>
 					<div class="layui-input-block  with-icon">
 						<input type="text"  readonly="true" value="${workInvoice.accountCheckingUserName}"  class="form-control layui-input" style="background-color: #f1f1f1" >

+ 3 - 3
src/main/webapp/webpage/modules/workstaff/workStaffBasicDetailForm.jsp

@@ -17,7 +17,7 @@
 			  $("#inputForm").submit();
 			  return true;
 		  }
-	
+
 		  return false;
 		}
 
@@ -37,7 +37,7 @@
 					}
 				}
 			});
-			
+
             var layDateArr = $(".layer-date");
             for(var i=0;i<layDateArr.length;i++){
                 var id = '#'+$(layDateArr[i]).attr("id");
@@ -1888,4 +1888,4 @@
 
     </script>
 </body>
-</html>
+</html>

+ 1 - 1
src/main/webapp/webpage/modules/workstaff/workStaffBasicDetailModifyDirectly.jsp

@@ -1838,4 +1838,4 @@
 
 </script>
 </body>
-</html>
+</html>

+ 73 - 0
src/main/webapp/webpage/modules/workstaff/workStaffBasicInfoForm.jsp

@@ -6,6 +6,8 @@
     <meta name="decorator" content="default"/>
     <script type="text/javascript" src="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.js"></script>
     <link rel='stylesheet' type="text/css" href="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.css"/>
+    <script type="text/javascript" src="${ctxStatic}/layui/layui.js"></script>
+    <link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/css/layui.css"/>
     <style>
         label.error{
             left:0;
@@ -46,6 +48,56 @@
             return false;
         }
         $(document).ready(function() {
+
+
+            layui.use(['upload', 'element', 'layer'], function() {
+                var $ = layui.jquery
+                    , upload = layui.upload
+                    , element = layui.element
+                    , layer = layui.layer;
+
+                //常规使用 - 普通图片上传
+                var uploadInst = upload.render({
+                    elem: '#test1'
+                    ,url: '${ctx}/bos/upLoadHandSignatureImg' //此处用的是第三方的 http 请求演示,实际使用时改成您自己的上传接口即可。
+                    ,before: function(obj){
+                        //预读本地文件示例,不支持ie8
+                        obj.preview(function(index, file, result){
+                            $('#handSignatureImg').attr('src', result); //图片链接(base64)
+                        });
+                        layer.msg('上传中', {icon: 16, time: 0});
+                    }
+                    ,done: function(res){
+                        //如果上传失败
+                        if(res.code != 1){
+                            return layer.msg('上传失败');
+                        }
+                        //上传成功的一些操作
+                        //console.log(res.url)
+                        $("#handSignature").val(res.url);
+                        layer.msg('上传完毕', {icon: 1});
+                        //……
+                        $('#handSignatureText').html(''); //置空上传失败的状态
+                    }
+                    ,error: function(){
+                        //演示失败状态,并实现重传
+                        var handSignatureText = $('#handSignatureText');
+                        handSignatureText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
+                        handSignatureText.find('.demo-reload').on('click', function(){
+                            uploadInst.upload();
+                        });
+                    }
+                    //进度条
+                    /*,progress: function(n, elem, e){
+                        if(n == 100){
+                            layer.msg('上传完毕', {icon: 1});
+                        }
+                    }*/
+                });
+            })
+
+
+
             laydate.render({
                 elem: '#tryEndTime', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
                 event: 'focus', //响应事件。如果没有传入event,则按照默认的click
@@ -369,6 +421,7 @@
             <form:hidden path="id"/>
             <form:hidden path="notifyFlag"/>
             <form:hidden path="userId"/>
+            <form:hidden path="handSignature"/>
             <input id="updateFlag" value="${updateFlag}" style="display:none;">
             <div class="form-group layui-row first">
                 <div class="form-group-label"><h2>基本信息</h2></div>
@@ -691,6 +744,26 @@
                     </div>
                 </div>--%>
             </div>
+
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>手签章</h2></div>
+                <div class="layui-item nav-btns">
+                    <button type="button" class="layui-btn" id="test1">上传手签章</button>
+                    <div class="layui-upload-list">
+                        <c:choose>
+                            <c:when test="${not empty workStaffBasicInfo.handSignatureUrl}">
+                                <img class="layui-upload-img" width="200px" height="150px" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workStaffBasicInfo.handSignatureUrl}','90%','90%')" id="handSignatureImg" src="${workStaffBasicInfo.handSignatureUrl}">
+                            </c:when>
+                            <c:otherwise>
+                                <img class="layui-upload-img" width="200px" height="150px" id="handSignatureImg">
+                            </c:otherwise>
+                        </c:choose>
+                        <p id="handSignatureText"></p>
+                    </div>
+                </div>
+            </div>
+
+
             <div class="form-group layui-row">
                 <div class="form-group-label"><h2>教育经历</h2></div>
                 <div class="layui-item nav-btns">

+ 18 - 1
src/main/webapp/webpage/modules/workstaff/workStaffBasicInfoView.jsp

@@ -345,6 +345,23 @@
                         </div>
                     </div>--%>
                 </div>
+
+                <div class="form-group layui-row">
+                    <div class="form-group-label"><h2>手签章</h2></div>
+                    <div class="layui-item nav-btns">
+                        <div class="layui-upload-list">
+                            <c:choose>
+                                <c:when test="${not empty workStaffBasicInfo.handSignatureUrl}">
+                                    <img class="layui-upload-img" width="200px" height="150px" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workStaffBasicInfo.handSignatureUrl}','90%','90%')" id="handSignatureImg" src="${workStaffBasicInfo.handSignatureUrl}">
+                                </c:when>
+                                <c:otherwise>
+                                    <img class="layui-upload-img" width="200px" height="150px" id="handSignatureImg">
+                                </c:otherwise>
+                            </c:choose>
+                            <p id="handSignatureText"></p>
+                        </div>
+                    </div>
+                </div>
                 <div class="form-group layui-row">
                     <div class="form-group-label"><h2>教育经历</h2></div>
                     <div class="layui-item layui-col-xs12 form-table-container">
@@ -863,4 +880,4 @@
         </div>
     </div>
 </body>
-</html>
+</html>