Sfoglia il codice sorgente

修改业主也需要拍照

wuxw 6 anni fa
parent
commit
989910c2cb

+ 101 - 0
Api/src/main/java/com/java110/api/listener/file/GetFileByObjIdListener.java

@@ -0,0 +1,101 @@
+package com.java110.api.listener.file;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.api.listener.AbstractServiceApiListener;
+import com.java110.core.annotation.Java110Listener;
+import com.java110.core.context.DataFlowContext;
+import com.java110.core.smo.file.IFileInnerServiceSMO;
+import com.java110.core.smo.file.IFileRelInnerServiceSMO;
+import com.java110.dto.file.FileDto;
+import com.java110.dto.file.FileRelDto;
+import com.java110.event.service.api.ServiceDataFlowEvent;
+import com.java110.utils.constant.ServiceCodeServiceConstant;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.vo.api.file.ApiFileVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+import java.util.List;
+
+
+/**
+ * 查询小区侦听类
+ */
+@Java110Listener("getFileByObjIdListener")
+public class GetFileByObjIdListener extends AbstractServiceApiListener {
+
+    @Autowired
+    private IFileInnerServiceSMO fileInnerServiceSMOImpl;
+
+    @Autowired
+    private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
+
+    @Override
+    public String getServiceCode() {
+        return ServiceCodeServiceConstant.GET_FILE_BY_OBJ_ID;
+    }
+
+    @Override
+    public HttpMethod getHttpMethod() {
+        return HttpMethod.GET;
+    }
+
+
+    @Override
+    public int getOrder() {
+        return DEFAULT_ORDER;
+    }
+
+
+    @Override
+    protected void validate(ServiceDataFlowEvent event, JSONObject reqJson) {
+        Assert.hasKeyAndValue(reqJson,"objId", "未包含文件ID");
+        Assert.hasKeyAndValue(reqJson,"fileTypeCd", "未包含文件类型");
+        Assert.hasKeyAndValue(reqJson,"communityId", "未包含小区ID");
+        //super.validatePageInfo(reqJson);
+    }
+
+    @Override
+    protected void doSoService(ServiceDataFlowEvent event, DataFlowContext context, JSONObject reqJson) {
+
+        FileRelDto fileRelDto = new FileRelDto();
+        fileRelDto.setObjId(reqJson.getString("objId"));
+        fileRelDto.setRelTypeCd(reqJson.getString("fileTypeCd"));
+
+        List<FileRelDto> fileRelDtos = fileRelInnerServiceSMOImpl.queryFileRels(fileRelDto);
+
+        Assert.listOnlyOne(fileRelDtos,"存在多条数据或未存在数据");
+
+        FileDto fileDto = BeanConvertUtil.covertBean(reqJson, FileDto.class);
+        fileDto.setFileId(fileRelDtos.get(0).getFileSaveName());
+        List<FileDto> fileDtos = fileInnerServiceSMOImpl.queryFiles(fileDto);
+
+        Assert.listOnlyOne(fileDtos,"存在多个文件,数据错误" + reqJson.toJSONString());
+
+        ApiFileVo fileVo = BeanConvertUtil.covertBean(fileDtos.get(0), ApiFileVo.class);
+
+        ResponseEntity<String> responseEntity = new ResponseEntity<String>(JSONObject.toJSONString(fileVo), HttpStatus.OK);
+
+        context.setResponseEntity(responseEntity);
+
+    }
+
+    public IFileInnerServiceSMO getFileInnerServiceSMOImpl() {
+        return fileInnerServiceSMOImpl;
+    }
+
+    public void setFileInnerServiceSMOImpl(IFileInnerServiceSMO fileInnerServiceSMOImpl) {
+        this.fileInnerServiceSMOImpl = fileInnerServiceSMOImpl;
+    }
+
+    public IFileRelInnerServiceSMO getFileRelInnerServiceSMOImpl() {
+        return fileRelInnerServiceSMOImpl;
+    }
+
+    public void setFileRelInnerServiceSMOImpl(IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl) {
+        this.fileRelInnerServiceSMOImpl = fileRelInnerServiceSMOImpl;
+    }
+}

+ 1 - 1
Api/src/main/java/com/java110/api/listener/owner/SaveOwnerListener.java

@@ -99,7 +99,7 @@ public class SaveOwnerListener extends AbstractServiceApiDataFlowListener {
             fileDto.setFileName(fileDto.getFileId());
             fileDto.setContext(paramObj.getString("ownerPhoto"));
             fileDto.setSuffix("jpeg");
-            fileDto.setCommunityId("communityId");
+            fileDto.setCommunityId(paramObj.getString("communityId"));
             if (fileInnerServiceSMOImpl.saveFile(fileDto) < 1) {
                 throw new ListenerExecuteException(ResponseConstant.RESULT_PARAM_ERROR, "保存文件出错");
             }

+ 22 - 0
WebService/src/main/java/com/java110/web/components/file/GetFileComponent.java

@@ -3,6 +3,7 @@ package com.java110.web.components.file;
 
 import com.java110.core.context.IPageData;
 import com.java110.web.smo.app.IListAppsSMO;
+import com.java110.web.smo.file.IGetFileByObjIdSMO;
 import com.java110.web.smo.file.IGetFileSMO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
@@ -24,6 +25,9 @@ public class GetFileComponent {
     @Autowired
     private IGetFileSMO getFileSMOImpl;
 
+    @Autowired
+    private IGetFileByObjIdSMO getFileByObjIdSMOImpl;
+
     /**
      * 查询应用列表
      *
@@ -34,6 +38,24 @@ public class GetFileComponent {
         return getFileSMOImpl.getFile(pd);
     }
 
+    /**
+     * 查询应用列表
+     *
+     * @param pd 页面数据封装
+     * @return 返回 ResponseEntity 对象
+     */
+    public ResponseEntity<Object> fileByObjId(IPageData pd) throws IOException {
+        return getFileByObjIdSMOImpl.getFileByObjId(pd);
+    }
+
+    public IGetFileByObjIdSMO getGetFileByObjIdSMOImpl() {
+        return getFileByObjIdSMOImpl;
+    }
+
+    public void setGetFileByObjIdSMOImpl(IGetFileByObjIdSMO getFileByObjIdSMOImpl) {
+        this.getFileByObjIdSMOImpl = getFileByObjIdSMOImpl;
+    }
+
     public IGetFileSMO getGetFileSMOImpl() {
         return getFileSMOImpl;
     }

+ 23 - 0
WebService/src/main/java/com/java110/web/smo/file/IGetFileByObjIdSMO.java

@@ -0,0 +1,23 @@
+package com.java110.web.smo.file;
+
+import com.java110.core.context.IPageData;
+import com.java110.utils.exception.SMOException;
+import org.springframework.http.ResponseEntity;
+
+import java.io.IOException;
+
+/**
+ * 公告管理服务接口类
+ *
+ * add by wuxw 2019-06-29
+ */
+public interface IGetFileByObjIdSMO {
+
+    /**
+     * 查询公告信息
+     * @param pd 页面数据封装
+     * @return ResponseEntity 对象数据
+     * @throws SMOException 业务代码层
+     */
+    ResponseEntity<Object> getFileByObjId(IPageData pd) throws SMOException, IOException;
+}

+ 84 - 0
WebService/src/main/java/com/java110/web/smo/file/impl/GetFileByObjIdSMOImpl.java

@@ -0,0 +1,84 @@
+package com.java110.web.smo.file.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.component.BaseComponentSMO;
+import com.java110.core.context.IPageData;
+import com.java110.entity.component.ComponentValidateResult;
+import com.java110.utils.constant.PrivilegeCodeConstant;
+import com.java110.utils.constant.ServiceConstant;
+import com.java110.utils.exception.SMOException;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.Base64Convert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.web.smo.file.IGetFileByObjIdSMO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * 查询notice服务类
+ */
+@Service("getFileByObjIdSMOImpl")
+public class GetFileByObjIdSMOImpl extends BaseComponentSMO implements IGetFileByObjIdSMO {
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Override
+    public ResponseEntity<Object> getFileByObjId(IPageData pd) throws SMOException, IOException {
+        JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
+
+        Assert.hasKeyAndValue(paramIn, "communityId", "请求报文中未包含小区ID");
+        Assert.hasKeyAndValue(paramIn, "objId", "请求报文中未包含文件ID");
+        Assert.hasKeyAndValue(paramIn, "fileTypeCd", "请求报文中未包含文件类型");
+
+        super.checkUserHasPrivilege(pd, restTemplate, PrivilegeCodeConstant.GET_FILE);
+
+        ComponentValidateResult result = super.validateStoreStaffCommunityRelationship(pd, restTemplate);
+
+        Map paramMap = BeanConvertUtil.beanCovertMap(result);
+        paramIn.putAll(paramMap);
+
+        String apiUrl = ServiceConstant.SERVICE_API_URL + "/api/file.getFileByObjId" + mapToUrlParam(paramIn);
+
+
+        ResponseEntity<String> responseEntity = this.callCenterService(restTemplate, pd, paramIn.toJSONString(),
+                apiUrl,
+                HttpMethod.GET);
+
+        //处理文件下载功能
+        if (responseEntity.getStatusCode() != HttpStatus.OK) {
+            return new ResponseEntity<Object>(responseEntity.getBody(), responseEntity.getStatusCode());
+        }
+
+        JSONObject outParam = JSONObject.parseObject(responseEntity.getBody());
+        MultiValueMap headers = new HttpHeaders();
+        if ("jpeg".equals(outParam.getString("suffix"))) {
+            headers.add("content-type", "image/jpeg");
+        } else {
+            headers.add("content-type", "application/octet-stream");
+        }
+        //headers.add("Content-Disposition", "attachment; filename=" + outParam.getString("fileName"));
+        headers.add("Accept-Ranges", "bytes");
+
+        byte[] context = Base64Convert.base64ToByte(outParam.getString("context").replace("data:image/webp;base64,", ""));
+
+        return new ResponseEntity<Object>(context, headers, HttpStatus.OK);
+    }
+
+    public RestTemplate getRestTemplate() {
+        return restTemplate;
+    }
+
+    public void setRestTemplate(RestTemplate restTemplate) {
+        this.restTemplate = restTemplate;
+    }
+}

+ 5 - 5
WebService/src/main/java/com/java110/web/smo/file/impl/GetFileSMOImpl.java

@@ -33,7 +33,7 @@ public class GetFileSMOImpl extends BaseComponentSMO implements IGetFileSMO {
     private RestTemplate restTemplate;
 
     @Override
-    public ResponseEntity<Object> getFile(IPageData pd) throws SMOException,IOException {
+    public ResponseEntity<Object> getFile(IPageData pd) throws SMOException, IOException {
         JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
 
         Assert.hasKeyAndValue(paramIn, "communityId", "请求报文中未包含小区ID");
@@ -46,7 +46,7 @@ public class GetFileSMOImpl extends BaseComponentSMO implements IGetFileSMO {
         Map paramMap = BeanConvertUtil.beanCovertMap(result);
         paramIn.putAll(paramMap);
 
-        String apiUrl = ServiceConstant.SERVICE_API_URL + "/api/file.getFile"+mapToUrlParam(paramIn);
+        String apiUrl = ServiceConstant.SERVICE_API_URL + "/api/file.getFile" + mapToUrlParam(paramIn);
 
 
         ResponseEntity<String> responseEntity = this.callCenterService(restTemplate, pd, paramIn.toJSONString(),
@@ -55,7 +55,7 @@ public class GetFileSMOImpl extends BaseComponentSMO implements IGetFileSMO {
 
         //处理文件下载功能
         if (responseEntity.getStatusCode() != HttpStatus.OK) {
-            return new ResponseEntity<Object>(responseEntity.getBody(),responseEntity.getStatusCode());
+            return new ResponseEntity<Object>(responseEntity.getBody(), responseEntity.getStatusCode());
         }
 
         JSONObject outParam = JSONObject.parseObject(responseEntity.getBody());
@@ -68,9 +68,9 @@ public class GetFileSMOImpl extends BaseComponentSMO implements IGetFileSMO {
         //headers.add("Content-Disposition", "attachment; filename=" + outParam.getString("fileName"));
         headers.add("Accept-Ranges", "bytes");
 
-        byte[] context = Base64Convert.base64ToByte(outParam.getString("context"));
+        byte[] context = Base64Convert.base64ToByte(outParam.getString("context").replace("data:image/webp;base64,", ""));
 
-        return new ResponseEntity<Object>(context,headers,HttpStatus.OK);
+        return new ResponseEntity<Object>(context, headers, HttpStatus.OK);
     }
 
     public RestTemplate getRestTemplate() {

+ 31 - 12
WebService/src/main/resources/components/ownerPackage/edit-owner/editOwner.html

@@ -1,20 +1,31 @@
-<div id = "editOwnerModel" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true" >
+<div id="editOwnerModel" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"
+     aria-hidden="true">
     <div class="modal-dialog modal-lg">
         <div class="modal-content">
             <div class="modal-body">
                 <h3 class="m-t-none m-b ">修改小区楼</h3>
                 <div class="ibox-content">
-                    <div>
-                        <div>
+                    <div class="row">
+                        <div class="col-sm-6" style="text-align:center">
+                            <video id="ownerPhotoForEdit" style="width: 100%;height: 100%;"></video>
+                            <canvas id="canvasForEdit" style="display:none;"></canvas>
+                            <div style="margin-top:20px">
+                                <button class="btn btn-primary" type="button" v-on:click="_takePhotoForEdit()"><span
+                                        class="glyphicon glyphicon-camera"></span> 拍照
+                                </button>
+                            </div>
+                        </div>
+                        <div class="col-sm-6">
                             <div class="form-group row">
                                 <label class="col-sm-2 col-form-label">名称</label>
-                                <div class="col-sm-10"><input v-model="editOwnerInfo.name" type="text" placeholder="必填,请填写名称" class="form-control"></div>
+                                <div class="col-sm-10"><input v-model="editOwnerInfo.name" type="text"
+                                                              placeholder="必填,请填写名称" class="form-control"></div>
                             </div>
                             <div class="form-group row">
                                 <label class="col-sm-2 col-form-label">性别</label>
                                 <div class="col-sm-10">
                                     <select class="custom-select" v-model="editOwnerInfo.sex">
-                                        <option selected  disabled value="">必填,请选择性别</option>
+                                        <option selected disabled value="">必填,请选择性别</option>
                                         <option value="0">男</option>
                                         <option value="1">女</option>
                                     </select>
@@ -22,21 +33,29 @@
                             </div>
                             <div class="form-group row">
                                 <label class="col-sm-2 col-form-label">年龄</label>
-                                <div class="col-sm-10"><input v-model="editOwnerInfo.age" type="number" placeholder="必填,请填写年龄" class="form-control"></div>
+                                <div class="col-sm-10"><input v-model="editOwnerInfo.age" type="number"
+                                                              placeholder="必填,请填写年龄" class="form-control"></div>
                             </div>
                             <div class="form-group row">
                                 <label class="col-sm-2 col-form-label">手机</label>
-                                <div class="col-sm-10"><input v-model="editOwnerInfo.link" type="number" placeholder="必填,请填写联系方式" class="form-control"></div>
+                                <div class="col-sm-10"><input v-model="editOwnerInfo.link" type="number"
+                                                              placeholder="必填,请填写联系方式" class="form-control"></div>
                             </div>
                             <div class="form-group row">
                                 <label class="col-sm-2 col-form-label">备注</label>
-                                <div class="col-sm-10"><input v-model="editOwnerInfo.remark" type="tel" placeholder="可填,请填写备注" class="form-control"></div>
-                            </div>
-                            <div class="ibox-content">
-                                <button class="btn btn-primary float-right" type="button" v-on:click="editOwnerMethod()" ><i class="fa fa-check"></i>&nbsp;保存</button>
-                                <button type="button" class="btn btn-warning float-right" style="margin-right:20px;" data-dismiss="modal">取消</button>
+                                <div class="col-sm-10"><input v-model="editOwnerInfo.remark" type="tel"
+                                                              placeholder="可填,请填写备注" class="form-control"></div>
                             </div>
                         </div>
+
+                    </div>
+                    <div class="ibox-content">
+                        <button class="btn btn-primary float-right" type="button" v-on:click="editOwnerMethod()"><i
+                                class="fa fa-check"></i>&nbsp;保存
+                        </button>
+                        <button type="button" class="btn btn-warning float-right" style="margin-right:20px;"
+                                data-dismiss="modal">取消
+                        </button>
                     </div>
                 </div>
             </div>

+ 55 - 2
WebService/src/main/resources/components/ownerPackage/edit-owner/editOwner.js

@@ -12,7 +12,9 @@
                 age:'',
                 link:'',
                 sex:'',
-                remark:''
+                remark:'',
+                ownerPhoto:'',
+                videoPlaying:false
             }
         },
          _initMethod:function(){
@@ -21,7 +23,11 @@
          _initEvent:function(){
             vc.on('editOwner','openEditOwnerModal',function(_owner){
                 vc.copyObject(_owner,vc.component.editOwnerInfo);
+                //根据memberId 查询 照片信息
+                vc.component.editOwnerInfo.ownerPhoto = "https://hc.demo.winqi.cn/callComponent/download/getFileByObjId/file?objId="+
+                   vc.component.editOwnerInfo.memberId +"&communityId="+vc.getCommunitys().communityId;
                 $('#editOwnerModel').modal('show');
+                vc.component._initAddOwnerMediaForEdit();
             });
         },
         methods:{
@@ -83,6 +89,7 @@
 
                 });
             },
+
             editOwnerMethod:function(){
 
                 if(!vc.component.editOwnerValidate()){
@@ -125,8 +132,54 @@
                     age:'',
                     link:'',
                     sex:'',
-                    remark:''
+                    remark:'',
+                    ownerPhoto:'',
+                    videoPlaying:false
                 };
+            },
+            _editUserMedia:function() {
+                return navigator.getUserMedia = navigator.getUserMedia ||
+                    navigator.webkitGetUserMedia ||
+                    navigator.mozGetUserMedia ||
+                    navigator.msGetUserMedia || null;
+            },
+            _initAddOwnerMediaForEdit:function () {
+                if(vc.component._editUserMedia()){
+                    vc.component.editOwnerInfo.videoPlaying = false;
+                    var constraints = {
+                        video: true,
+                        audio: false
+                    };
+                    var video = document.getElementById('ownerPhotoForEdit');
+                    var media = navigator.getUserMedia(constraints, function (stream) {
+                        var url = window.URL || window.webkitURL;
+                        //video.src = url ? url.createObjectURL(stream) : stream;
+                        try {
+                            video.src = url ? url.createObjectURL(stream) : stream;
+                        } catch (error) {
+                            video.srcObject = stream;
+                        }
+                        video.play();
+                        vc.component.editOwnerInfo.videoPlaying = true;
+                    }, function (error) {
+                        console.log("ERROR");
+                        console.log(error);
+                    });
+                }else{
+                    console.log("初始化视频失败");
+                }
+            },
+            _takePhotoForEdit:function () {
+                if (vc.component.editOwnerInfo.videoPlaying) {
+                    var canvas = document.getElementById('canvasForEdit');
+                    var video = document.getElementById('ownerPhotoForEdit');
+                    canvas.width = video.videoWidth;
+                    canvas.height = video.videoHeight;
+                    canvas.getContext('2d').drawImage(video, 0, 0);
+                    var data = canvas.toDataURL('image/webp');
+                    vc.component.editOwnerInfo.ownerPhoto = data;
+                    //document.getElementById('photo').setAttribute('src', data);
+                }
             }
         }
     });

+ 5 - 0
java110-utils/src/main/java/com/java110/utils/constant/ServiceCodeServiceConstant.java

@@ -39,6 +39,11 @@ public class ServiceCodeServiceConstant {
      */
     public static final String GET_FILE = "file.getFile";
 
+    /**
+     * 查询文件
+     */
+    public static final String GET_FILE_BY_OBJ_ID = "file.getFileByObjId";
+
     /**
      * 保存文件
      */