ソースを参照

Merge remote-tracking branch 'origin/master'

Administrator 2 年 前
コミット
25e6a5b4e2

+ 5 - 5
mhotel/src/com/happy/Model/AdminManager.java

@@ -100,7 +100,7 @@ public class AdminManager {
 	/**
 	 * 备注
 	 */
-	private String remake;
+	private String remark;
 
 	/**
 	 * 营业执照
@@ -243,12 +243,12 @@ public class AdminManager {
 		this.status = status;
 	}
 
-	public String getRemake() {
-		return remake;
+	public String getRemark() {
+		return remark;
 	}
 
-	public void setRemake(String remake) {
-		this.remake = remake;
+	public void setRemark(String remark) {
+		this.remark = remark;
 	}
 
 	public List<File> getFileList() {

+ 41 - 0
mhotel/src/com/happy/Model/weixin/CodeEntity.java

@@ -0,0 +1,41 @@
+package com.happy.Model.weixin;
+
+public class CodeEntity {
+
+    public String openid;
+    public String sessionkey;
+    public String unionid;
+    public boolean flagPhone;
+
+    public String getOpenid() {
+        return openid;
+    }
+
+    public void setOpenid(String openid) {
+        this.openid = openid;
+    }
+
+    public String getSessionkey() {
+        return sessionkey;
+    }
+
+    public void setSessionkey(String sessionkey) {
+        this.sessionkey = sessionkey;
+    }
+
+    public String getUnionid() {
+        return unionid;
+    }
+
+    public void setUnionid(String unionid) {
+        this.unionid = unionid;
+    }
+
+    public boolean isFlagPhone() {
+        return flagPhone;
+    }
+
+    public void setFlagPhone(boolean flagPhone) {
+        this.flagPhone = flagPhone;
+    }
+}

+ 32 - 0
mhotel/src/com/happy/Model/weixin/CodeEntityVo.java

@@ -0,0 +1,32 @@
+package com.happy.Model.weixin;
+
+public class CodeEntityVo {
+
+    public String code;
+    public String encryptedData;
+    public String iv;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getEncryptedData() {
+        return encryptedData;
+    }
+
+    public void setEncryptedData(String encryptedData) {
+        this.encryptedData = encryptedData;
+    }
+
+    public String getIv() {
+        return iv;
+    }
+
+    public void setIv(String iv) {
+        this.iv = iv;
+    }
+}

+ 2 - 2
mhotel/src/com/happy/action/adminAction.java

@@ -99,7 +99,7 @@ public class adminAction extends ActionSupport implements ServletRequestAware {
                 ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString());
                 return null;
             }
-            if (admin.getAdminName()==null || admin.getUserName()==null || admin.getLevel()==null || admin.getAdminPower()==null || admin.getAdminPower().equals("") || admin.getPhone()==null){
+            if (admin.getAdminName()==null || admin.getUserName()==null || admin.getLevel()==null || admin.getPhone()==null){
                 resultJson.put("message", "各参数不能为空");
                 resultJson.put("code", 500);
                 ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString());
@@ -169,7 +169,7 @@ public class adminAction extends ActionSupport implements ServletRequestAware {
                 ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString());
                 return null;
             }
-            if (admin.getAdminName()==null || admin.getUserName()==null || admin.getLevel()==null || admin.getAdminPower()==null || admin.getAdminPower().equals("") || admin.getPhone()==null){
+            if (admin.getAdminName()==null || admin.getUserName()==null || admin.getLevel()==null || admin.getPhone()==null){
                 resultJson.put("message", "各参数不能为空");
                 resultJson.put("code", 500);
                 ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString());

+ 1 - 1
mhotel/src/com/happy/action/adminManagerAction.java

@@ -90,7 +90,7 @@ public class adminManagerAction extends ActionSupport implements ServletRequestA
             }else{
                 //是否主账号首次登录
                 Hotel hotel = hotelService.getOen("and manager_id = '"+login.getId()+"'");
-                if(hotel==null && hotel.getManagerId().equals(login.getId())){
+                if(hotel==null && "2".equals(login.getLevel())){
                     resultJson.put("isLogin",1);
                 }else{
                     resultJson.put("isLogin",0);

+ 18 - 6
mhotel/src/com/happy/action/bookAction.java

@@ -169,6 +169,12 @@ public class bookAction extends ActionSupport implements ServletRequestAware {
 
         List<Booking> list = bookService.queryList(s1.toString()); // 查询分页
         List<Vector> vectorsList = new ArrayList<>();
+        if(list==null){
+            resultJson.put("code", 500);
+            resultJson.put("message", "无数据无法导出");
+            ResponseUtil.writeJson(ServletActionContext.getResponse(),
+                    resultJson.toString());
+        }
         for(Booking book:list){
             Vector columnValue = new Vector();
             columnValue.add(book.getOrderNum());
@@ -179,6 +185,7 @@ public class bookAction extends ActionSupport implements ServletRequestAware {
             columnValue.add(book.getHouseOrderNumber());
             columnValue.add(book.getHouseTotalPrice());
             columnValue.add(book.getPayTime());
+            vectorsList.add(columnValue);
         }
         // 项目路径地址
         String path = request.getSession().getServletContext()
@@ -193,11 +200,13 @@ public class bookAction extends ActionSupport implements ServletRequestAware {
             columnName.add("房间数");
             columnName.add("订单金额(元)");
             columnName.add("支付时间");
+
+            String filePathName ="订单信息" + UUIDUtil.generateID() +"Report.xls";
             // 导出文件
-            new toExcel().book(vectorsList, path + "订单信息" + UUIDUtil.generateID() +"Report.xls",
+            new toExcel().book(vectorsList, path + filePathName,
                     "sheet1", columnName);
-            String url = request.getSession().getServletContext().getContextPath();
-            resultJson.put("downurl", url+"/download/订单信息" + "Report.xls");
+            String url = request.getServerName()+":"+request.getServerPort() + request.getSession().getServletContext().getContextPath();
+            resultJson.put("downurl", url + "/download/" + filePathName);
             resultJson.put("code", 200);
             resultJson.put("message", "导出成功");
             ResponseUtil.writeJson(ServletActionContext.getResponse(),
@@ -317,6 +326,7 @@ public class bookAction extends ActionSupport implements ServletRequestAware {
             columnValue.add(book.getHouseOrderNumber());
             columnValue.add(book.getPayAccount());
             columnValue.add(book.getPayTime());
+            vectorsList.add(columnValue);
         }
         // 项目路径地址
         String path = request.getSession().getServletContext()
@@ -330,11 +340,13 @@ public class bookAction extends ActionSupport implements ServletRequestAware {
             columnName.add("房间数");
             columnName.add("订单金额");
             columnName.add("退房时间");
+
+            String filePathName ="台账信息" + UUIDUtil.generateID() +"Report.xls";
             // 导出文件
-            new toExcel().book(vectorsList, path + "台账信息" + UUIDUtil.generateID() + "Report.xls",
+            new toExcel().book(vectorsList, path + filePathName,
                     "sheet1", columnName);
-            String url = request.getSession().getServletContext().getContextPath();
-            resultJson.put("downurl", url+"/download/台账信息" + "Report.xls");
+            String url = request.getServerName()+":"+request.getServerPort() + request.getSession().getServletContext().getContextPath();
+            resultJson.put("downurl", url + "/download/" + filePathName);
             resultJson.put("code", 200);
             resultJson.put("message", "导出成功");
             ResponseUtil.writeJson(ServletActionContext.getResponse(),

+ 144 - 0
mhotel/src/com/happy/common/util/WechatUtil.java

@@ -0,0 +1,144 @@
+package com.happy.common.util;
+
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+// vo实体类参数
+
+import com.happy.Model.weixin.CodeEntityVo;
+import org.bouncycastle.util.encoders.Base64;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.util.TextUtils;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.springframework.stereotype.Component;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.security.AlgorithmParameters;
+import java.security.Security;
+import java.util.*;
+
+public class WechatUtil {
+    private static final String appId = "wx2fc3f45732fae5d3";
+    private static final String secret = "7eee4a49a4470a77f9222995e8511547";
+
+    /**
+     * 获取小程序code换取openid、session_key
+     *
+     * @param code
+     * @return
+     */
+    public static JSONObject getOpenId(String code) {
+
+        String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appId
+                + "&secret=" + secret + "&js_code=" + code + "&grant_type=authorization_code";
+        PrintWriter out = null;
+        BufferedReader in = null;
+        String line;
+        StringBuffer stringBuffer = new StringBuffer();
+        try {
+            URL realUrl = new URL(url);
+            // 打开和URL之间的连接
+            URLConnection conn = realUrl.openConnection();
+
+            // 设置通用的请求属性 设置请求格式
+            //设置返回类型
+            conn.setRequestProperty("contentType", "text/plain");
+            //设置请求类型
+            conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
+            //设置超时时间
+            conn.setConnectTimeout(1000);
+            conn.setReadTimeout(1000);
+            conn.setDoOutput(true);
+            conn.connect();
+            // 获取URLConnection对象对应的输出流
+            out = new PrintWriter(conn.getOutputStream());
+            // flush输出流的缓冲
+            out.flush();
+            // 定义BufferedReader输入流来读取URL的响应    设置接收格式
+            in = new BufferedReader(
+                    new InputStreamReader(conn.getInputStream(), "UTF-8"));
+            while ((line = in.readLine()) != null) {
+                stringBuffer.append(line);
+            }
+            JSONObject jsonObject = JSONObject.parseObject(stringBuffer.toString());
+            return jsonObject;
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        //使用finally块来关闭输出流、输入流
+        finally {
+            try {
+                if (out != null) {
+                    out.close();
+                }
+                if (in != null) {
+                    in.close();
+                }
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+        }
+        return null;
+    }
+
+    /**
+     *   在上面的代码中我们已经获取到了openid和session_key了,而code信息中是不能获取到用户的手机号码的,
+     *   解析微信手机号的相关数据需要openid和session_key才行,所以在上面代码中,我将相关数据返回给了前端,
+     *   前端将我传回的参数,还有第二次请求中的iv、encryptedData一起传回给后端,然后我们进行解密
+     * **/
+    public static Map<String, Object> getPhoneNumber(CodeEntityVo vo,String openid,String session_key) {
+        Map<String,Object> map=new HashMap<>();
+        if (openid!=null) {
+            if(session_key==null){
+                return null;
+            }
+            map.put("openid",openid);
+            // 被加密的数据
+            byte[] dataByte = Base64.decode(vo.getEncryptedData());
+            // 加密秘钥
+            byte[] keyByte = Base64.decode(session_key);
+            // 偏移量
+            byte[] ivByte = Base64.decode(vo.getIv());
+            try {
+                // 如果密钥不足16位,那么就补足. 这个if 中的内容很重要
+                int base = 16;
+                String result = null;
+                if (keyByte.length % base != 0) {
+                    int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
+                    byte[] temp = new byte[groups * base];
+                    Arrays.fill(temp, (byte) 0);
+                    System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
+                    keyByte = temp;
+                }
+                // 初始化
+                Security.addProvider(new BouncyCastleProvider());
+                Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
+                SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
+                AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
+                parameters.init(new IvParameterSpec(ivByte));
+                // 初始化
+                cipher.init(Cipher.DECRYPT_MODE, spec, parameters);
+                byte[] resultByte = cipher.doFinal(dataByte);
+                if (null != resultByte && resultByte.length > 0) {
+                    result = new String(resultByte, "UTF-8");
+                    JSONObject jsonObject = JSONObject.parseObject(result);
+                    map.put("param",jsonObject);
+                    return map;
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
+}
+

+ 4 - 4
mhotel/src/com/happy/dao/impl/AdminManagerImplDao.java

@@ -30,7 +30,7 @@ public class AdminManagerImplDao implements AdminManagerDao {
     @Override
     public int insertAdmin(AdminManager adminManager) {
 
-        String sql = "INSERT INTO admin_manager (id, manager_id, admin_name, password, hotel_name, hotel_township, corpn_name, corpn_phone, level, admin_power, bank_card, card_name, bank_name, create_id, create_date, status, remake) VALUES (:id, :admin_name, :password, :hotel_name, :hotel_township, :corpn_name, :corpn_phone, :level, :admin_power, :bank_card, :card_name, :bank_name, :create_id, :create_date, :status, :remake)";
+        String sql = "INSERT INTO admin_manager (id, manager_id, admin_name, password, hotel_name, hotel_township, corpn_name, corpn_phone, level, admin_power, bank_card, card_name, bank_name, create_id, create_date, status, remark) VALUES (:id, :admin_name, :password, :hotel_name, :hotel_township, :corpn_name, :corpn_phone, :level, :admin_power, :bank_card, :card_name, :bank_name, :create_id, :create_date, :status, :remark)";
 
         MapSqlParameterSource sps = new MapSqlParameterSource();
         sps.addValue("manager_id", adminManager.getAdminName());
@@ -48,7 +48,7 @@ public class AdminManagerImplDao implements AdminManagerDao {
         sps.addValue("create_id", adminManager.getCreateId());
         sps.addValue("create_date",adminManager.getCreateDate());
         sps.addValue("status", 1);
-        sps.addValue("remake", adminManager.getRemake());
+        sps.addValue("remark", adminManager.getRemark());
         if(adminManager.getId()==null){
             sps.addValue("id", UUIDUtil.generateID());
         }else{
@@ -67,7 +67,7 @@ public class AdminManagerImplDao implements AdminManagerDao {
     @Override
     public int updateAdmin(AdminManager adminManager) {
 
-        String sql = "UPDATE admin_manager SET admin_name = :admin_name, password = :password, hotel_name = :hotel_name, hotel_township = :hotel_township, corpn_name = :corpn_name, corpn_phone = :corpn_phone, level = :level, admin_power = :admin_power, bank_card = :bank_card, card_name = :card_name, bank_name = :bank_name, create_id = :create_id, modify_date =:modify_date, status =:status, remake =:remake WHERE id = :id";
+        String sql = "UPDATE admin_manager SET admin_name = :admin_name, password = :password, hotel_name = :hotel_name, hotel_township = :hotel_township, corpn_name = :corpn_name, corpn_phone = :corpn_phone, level = :level, admin_power = :admin_power, bank_card = :bank_card, card_name = :card_name, bank_name = :bank_name, create_id = :create_id, modify_date =:modify_date, status =:status, remark =:remark WHERE id = :id";
 
         MapSqlParameterSource sps = new MapSqlParameterSource();
         sps.addValue("admin_name", adminManager.getAdminName());
@@ -84,7 +84,7 @@ public class AdminManagerImplDao implements AdminManagerDao {
         sps.addValue("create_id", adminManager.getCreateId());
         sps.addValue("modify_date",adminManager.getModifyDate());
         sps.addValue("status", adminManager.getStatus());
-        sps.addValue("remake", adminManager.getRemake());
+        sps.addValue("remark", adminManager.getRemark());
         sps.addValue("id",adminManager.getId());
         int num = 0;
         try{

+ 8 - 0
mhotel/src/com/happy/service/AppService.java

@@ -0,0 +1,8 @@
+package com.happy.service;
+
+import com.happy.Model.weixin.CodeEntity;
+
+public interface AppService {
+
+    public CodeEntity getCodeInfo(String code);
+}

+ 33 - 0
mhotel/src/com/happy/service/impl/AppImplService.java

@@ -0,0 +1,33 @@
+package com.happy.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.happy.Model.weixin.CodeEntity;
+import com.happy.common.util.WechatUtil;
+import com.happy.service.AppService;
+import org.springframework.stereotype.Service;
+
+@Service("AppService")
+public class AppImplService implements AppService {
+
+    public CodeEntity getCodeInfo(String code){
+        CodeEntity entity = new CodeEntity();
+        JSONObject wx = WechatUtil.getOpenId(code);
+        // json数据转换成字符串
+        assert wx != null;
+        String openid = wx.get("openid").toString();
+        String sessionkey = wx.get("session_key").toString();
+        // 当主体账户绑定小程序后就可以获取到,未绑定无法获取
+        String unionId="";
+        if(wx.get("unionid")!=null){
+            unionId=wx.get("unionid").toString();
+        }
+        entity.setOpenid(openid);
+        entity.setSessionkey(sessionkey);
+        entity.setUnionid(unionId);
+        // 是否需要获取手机号,true需要
+        entity.setFlagPhone(true);
+        System.out.println("openid:"+openid+",session_key:"+sessionkey+",unionid:"+unionId);
+        // 返回参数
+        return entity;
+    }
+}