Main.java

package com.hcxy.car;

import org.springframework.boot.SpringApplication;

import com.hcxy.car.spring.config.App;

public class Main {

    public static void main(String[] args) {
SpringApplication.run(App.class, args); } }

Account.java

package com.hcxy.car.bean;

import javax.persistence.*;

import org.apache.ibatis.type.Alias;

import java.io.Serializable;
import java.util.List; @Alias("account")
public class Account implements Serializable {
private static final long serialVersionUID = 7095190807242765977L;
private int aid;
private String username; //帐号
private String password; //密码;
private String salt; //加密密码的盐
private int state; //用户状态,0:创建未认证(比如没有激活,没有输入验证码等等)--等待验证的用户 , 1:正常状态,2:用户被锁定.
private List<Role> roleList;// 一个用户具有多个角色 private List<Permission> permissions; public Integer getUid() {
return aid;
} public void setAid(Integer aid) {
this.aid = aid;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getSalt() {
return salt;
} public void setSalt(String salt) {
this.salt = salt;
} public int getState() {
return state;
} public void setState(int state) {
this.state = state;
} public List<Role> getRoleList() {
return roleList;
} public void setRoleList(List<Role> roleList) {
this.roleList = roleList;
} /**
* 密码盐.
* @return
*/
public String getCredentialsSalt(){
return this.username+this.salt;
}
//重新对盐重新进行了定义,用户名+salt,这样就更加不容易被破解 public List<Permission> getPermissions() {
return permissions;
} public void setPermissions(List<Permission> permissions) {
this.permissions = permissions;
}
}

Package.java

package com.hcxy.car.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List; import org.apache.ibatis.type.Alias; /*import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;*/ //@Entity @Alias("pack")
public class Package implements Serializable { private static final long serialVersionUID = -8102114779905245955L; // @Id
// @GeneratedValue(strategy = GenerationType.AUTO)
private int pid;// 主键. private String deviceType;// tbox,vin,ipc private String carModel;// 版本号 private String packageVersion;// 文件名 private int state;// 状态:0.已废弃,1.可用,2.暂时不可用 private String description;// 文件,描述 private String updateTime;// 上传时间 private ArrayList<PackageFile> files; public String getDeviceType() {
return deviceType;
} public void setDeviceType(String deviceType) {
this.deviceType = deviceType;
} public String getCarModel() {
return carModel;
} public void setCarModel(String carModel) {
this.carModel = carModel;
} public String getPackageVersion() {
return packageVersion;
} public void setPackageVersion(String packageVersion) {
this.packageVersion = packageVersion;
} public int getState() {
return state;
} public void setState(int state) {
this.state = state;
} public String getDescription() {
return description;
} public void setDescription(String description) {
this.description = description;
} public String getUpdateTime() {
return updateTime;
} public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
} public ArrayList<PackageFile> getFiles() {
return files;
} public void setFiles(ArrayList<PackageFile> files) {
this.files = files;
} public int getPid() {
return pid;
} public void setPid(int pid) {
this.pid = pid;
}
}

PackageFile.java

package com.hcxy.car.bean;

import java.io.Serializable;

import org.apache.ibatis.type.Alias;

@Alias("packFile")
public class PackageFile implements Serializable{ private static final long serialVersionUID = 7388621848904718389L; private int fid;// 主键. private String orignName;// 文件名 private String newName;// 文件名 private String filePath;// 文件路径 private String size;// 文件路径 private String md5;//md5校验值 private Package pack; public String getOrignName() {
return orignName;
} public void setOrignName(String orignName) {
this.orignName = orignName;
} public String getNewName() {
return newName;
} public void setNewName(String newName) {
this.newName = newName;
} public String getFilePath() {
return filePath;
} public void setFilePath(String filePath) {
this.filePath = filePath;
} public String getSize() {
return size;
} public void setSize(String size) {
this.size = size;
} public String getMd5() {
return md5;
} public void setMd5(String md5) {
this.md5 = md5;
} public Package getPack() {
return pack;
} public void setPack(Package pack) {
this.pack = pack;
} public int getFid() {
return fid;
} public void setFid(int fid) {
this.fid = fid;
} }

Permission.java

package com.hcxy.car.bean;

import javax.persistence.*;

import org.apache.ibatis.type.Alias;

import java.io.Serializable;
import java.util.List; @Alias("permission")
public class Permission implements Serializable{
private static final long serialVersionUID = -9057378183567456755L;
private int pid;//主键.
private String pname;//名称.
private String pdescription;//资源类型,[menu|button]
// private String url;//资源路径.
// private String permission; //权限字符串,menu例子:role:*,button例子:role:create,role:update,role:delete,role:view
// private Long parentId; //父编号
// private String parentIds; //父编号列表
// private Boolean available = Boolean.FALSE;
private List<Role> roles; public int getPId() {
return pid;
} public void setId(int pid) {
this.pid = pid;
} public String getPname() {
return pname;
} public void setPname(String pname) {
this.pname = pname;
} public List<Role> getRoles() {
return roles;
} public void setRoles(List<Role> roles) {
this.roles = roles;
} public String getPdescription() {
return pdescription;
} public void setPdescription(String pdescription) {
this.pdescription = pdescription;
}
}

Role.java

package com.hcxy.car.bean;

import javax.persistence.*;

import org.apache.ibatis.type.Alias;

import java.io.Serializable;
import java.util.List; @Alias("role")
public class Role implements Serializable{
private static final long serialVersionUID = -319946799189427159L;
private int rid; // 编号
private String rname; // 角色标识程序中判断使用,如"admin",这个是唯一的:
private String rdescription; // 角色描述,UI界面显示使用
private List<Permission> permissions;
private List<Account> userInfos;// 一个角色对应多个用户 public int getRId() {
return rid;
} public void setId(int rid) {
this.rid = rid;
} public String getRdescription() {
return rdescription;
} public void setRdescription(String rdescription) {
this.rdescription = rdescription;
} public List<Permission> getPermissions() {
return permissions;
} public void setPermissions(List<Permission> permissions) {
this.permissions = permissions;
} public List<Account> getUserInfos() {
return userInfos;
} public void setUserInfos(List<Account> userInfos) {
this.userInfos = userInfos;
} public String getRname() {
return rname;
} public void setRname(String rname) {
this.rname = rname;
}
}

PackageFileLink.java

package com.hcxy.car.bean.pojo;

import org.apache.ibatis.type.Alias;

import com.hcxy.car.bean.Package;
import com.hcxy.car.bean.PackageFile; @Alias("packFileLink") //使用默认的别名
public class PackageFileLink {
private Package pack; private PackageFile file; public Package getPack() {
return pack;
} public void setPack(Package pack) {
this.pack = pack;
} public PackageFile getFile() {
return file;
} public void setFile(PackageFile file) {
this.file = file;
} }

AccountController.java

package com.hcxy.car.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController; import com.hcxy.car.bean.Account;
import com.hcxy.car.bean.DeviceType;
import com.hcxy.car.bean.Permission;
import com.hcxy.car.service.IAccountService;
import com.hcxy.car.util.CommomUtil; @RestController
@RequestMapping("/account")
public class AccountController extends BaseController{
@Resource(name = "accountService")
IAccountService accountService; @PostMapping("/add")
public @ResponseBody Map<String, Object> adddevice(@RequestBody Map<String, String> reqMap) throws Exception {
String accountname = reqMap.get("username");
String pwd = reqMap.get("password");
Map<String, Object> map = new HashMap<String, Object>();
boolean b = findByName(accountname);
if(b == true) {
map.put("errcode", 1);
map.put("mess", "账号名:" + accountname + ",已存在,请重命名!");
return map;
}
Account ac = new Account();
ac.setUsername(accountname);
ac.setPassword(CommomUtil.password(pwd));
ac.setState(1);
ac.setSalt("");
try {
accountService.addAccount(ac);
} catch (Exception e1) {
e1.printStackTrace();
map.put("errcode", 1);
map.put("mess", "添加失败");
return map;
}
map.put("errcode", 0);
map.put("mess", "添加成功");
return null;
} public Boolean findByName(String name) throws Exception {
boolean b = accountService.findByName(name);
return b;
} @RequestMapping(value = "/all", method = RequestMethod.GET)
public Map<String, Object> all(HttpServletRequest request, HttpServletResponse response) {
Map<String, Object> map = new HashMap<String, Object>();
List<Account> l = null;
try {
l = accountService.findAll();
} catch (Exception e) {
e.printStackTrace();
}
map.put("accounts", l);
return map;
} @RequestMapping(value = "/permissions", method = RequestMethod.POST)
public Map<String, Object> permissions() {
Map<String, Object> map = new HashMap<String, Object>();
List<Permission> l = null;
try {
l = accountService.findAllpermissions();
} catch (Exception e) {
e.printStackTrace();
}
map.put("permissions", l);
return map;
}
}

PackageController.java

package com.hcxy.car.controller;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest; import com.alibaba.fastjson.JSON;
import com.hcxy.car.bean.Package;
import com.hcxy.car.bean.PackageFile;
import com.hcxy.car.bean.pojo.PackageFileLink;
import com.hcxy.car.service.IPackageService;
import com.hcxy.car.util.CommomUtil; @CrossOrigin
@RestController
@RequestMapping("/package")
public class PackageController extends BaseController { private String UPLOAD_FOLDER; private Logger logger = LoggerFactory.getLogger(PackageController.class); /*
* @Autowired(required=true) //接口只有一个实现类的时候会找到,多个实现类的时候指定子类的类名
* @Qualifier("PackageServiceImpl")
*/
@Resource(name = "packageService")
IPackageService pkService; @RequestMapping(value = "/all", method = RequestMethod.POST)
public Map<String, Object> all(HttpServletRequest request, HttpServletResponse response) {
/*
* User user = UserThreadLocal.get(); if (null == user) { // 未登录状态
* this.cartCookieService.delete(itemId, request, response); } else { // 登录状态
* this.cartService.delete(itemId, user.getId()); } System.out.println("haha");
*/
Map<String, Object> map = new HashMap<String, Object>();
List<Package> l = null;
try {
l = pkService.findAllPackages();
} catch (Exception e) { e.printStackTrace();
}
map.put("total", l.size());
map.put("limit", 100);
map.put("packages", l);
return map;
} // PostMapping = @RequestMapping(value =“/xx”, method = RequestMethod.POST).
//public @ResponseBody ResponseEntity<String> uploadImg(HttpServletRequest request, HttpServletResponse response) {
//return new ResponseEntity<String>("文件为空,请重新上传", HttpStatus.OK);
@PostMapping("/add")
public @ResponseBody Map<String, Object> uploadImg(HttpServletRequest request, HttpServletResponse response) {
// response.setHeader("Access-Control-Allow-Origin", "*");
Map<String, Object> m = new HashMap<String, Object>(); MultipartHttpServletRequest params = ((MultipartHttpServletRequest) request);
List<MultipartFile> filelist = ((MultipartHttpServletRequest) request).getFiles("fileList");
//System.out.println("filelist: " + JSON.toJSONString(filelist, true)); if (filelist.size() == 0) {
logger.error("文件为空");
m.put("errcode", 1);
m.put("mess", "文件为空,请重新上传");
return m;
} String now = CommomUtil.DateFormat();
Package t = new Package();
String version = params.getParameter("fileVersion");
t.setPackageVersion(version);
t.setDescription(params.getParameter("description"));
t.setUpdateTime(now);
int state = Integer.parseInt(params.getParameter("state"));
t.setState(state);
String[] selectedOptions = params.getParameter("selectedOptions").split(",");
t.setDeviceType(selectedOptions[0]);
t.setCarModel(selectedOptions[1]); boolean b = pkService.findByName(selectedOptions[0],selectedOptions[1],version);
if(b == true) {
m.put("errcode", 1);
m.put("mess", selectedOptions[0] + "--" + "selectedOptions[1]" + "--" + version + ",已存在,请重命名!");
return m;
} try {
pkService.addPackage(t);
} catch (Exception e1) {
e1.printStackTrace();
} UPLOAD_FOLDER = request.getSession().getServletContext().getRealPath("/") + "upload\\" +selectedOptions[0]+
"\\" + selectedOptions[1] + "\\"+version + "\\";
File dir = new File(UPLOAD_FOLDER);
if (!dir.exists()) {
dir.mkdirs();
} for (int i = 0; i < filelist.size(); i++) {
if (filelist.get(i) != null) {
MultipartFile file = filelist.get(i);
String filename = file.getOriginalFilename();
String filetype = file.getContentType();
String suffix = filename.substring(filename.lastIndexOf("."));
String defineName = UUID.randomUUID() + "-" + CommomUtil.DateFormat() + suffix; // 重命名
// 获取文件大小
long size = file.getSize();
File serverFile = new File(UPLOAD_FOLDER + defineName);
try {
file.transferTo(serverFile);//会先传到tomcat的临时目录,C:\Users\17M38332\AppData\Local\Temp\tomcat.5717973570587192077.8086\work\Tomcat\localhost\ROOT PackageFile tf = new PackageFile();
tf.setOrignName(filename);
tf.setNewName(defineName);
tf.setFilePath(UPLOAD_FOLDER + defineName);
tf.setSize(Long.toString(size));
tf.setMd5(CommomUtil.md5(serverFile)); pkService.insertfile(tf); PackageFileLink tfl = new PackageFileLink();
tfl.setPack(t);
tfl.setFile(tf);
pkService.saveRelativity(tfl);
} catch (IllegalStateException e) {
e.printStackTrace();
m.put("errcode", 1);
m.put("mess", "上传第" + i + "个文件失败");
return m;
} catch (IOException e) {
e.printStackTrace();
m.put("errcode", 1);
m.put("mess", "上传第" + i + "个文件失败");
return m;
}
}
}
// 调用文件处理类FileUtil,处理文件,将文件写入指定位置
/*
* try { service.uploadFile(fileList[0].getBytes(), filePath, fileName); } catch
* ( Exception e) { // TODO: handle exception }
*/
List<Package> l = findStateEnable(selectedOptions[0],selectedOptions[1],1);
if(l.size() > 1) {
m.put("errcode", 0);
m.put("mess", selectedOptions[0]+"--"+selectedOptions[1]+",有多个启用版本");
}else if(l.size() == 0) {
m.put("errcode", 0);
m.put("mess", selectedOptions[0]+"--"+selectedOptions[1]+",没有启用版本");
}else {
m.put("errcode", 0);
m.put("mess", "添加成功");
}
return m;
} @RequestMapping(value = "/modify", method = RequestMethod.POST)
public Map<String, Object> modifystate(@RequestBody Map<String, String> reqMap) {
/*
* User user = UserThreadLocal.get(); if (null == user) { // 未登录状态
* this.cartCookieService.delete(itemId, request, response); } else { // 登录状态
* this.cartService.delete(itemId, user.getId()); } System.out.println("haha");
*/
int pid = Integer.parseInt(reqMap.get("pid"));
int state = Integer.parseInt(reqMap.get("state"));
String deviceType = reqMap.get("deviceType");
String carModel = reqMap.get("carModel");
try {
pkService.modifyPackageByState(pid, state);
} catch (Exception e) {
e.printStackTrace();
}
Map<String, Object> m = new HashMap<String, Object>();
List<Package> l = findStateEnable(deviceType,carModel,1);
if(l.size() > 1) {
m.put("errcode", 1);
m.put("mess", deviceType+"--"+carModel+",有多个启用版本");
}else if(l.size() == 0) {
m.put("errcode", 1);
m.put("mess", deviceType+"--"+carModel+",没有启用版本");
}else {
m.put("errcode", 0);
m.put("mess", "修改成功");
}
return m;
} public List<Package> findStateEnable(String deviceType,String carModel,int n){
List<Package> l = pkService.findMore(deviceType,carModel,n);
return l;
} //文件下载相关代码
@RequestMapping("/download")
public String downloadFile(HttpServletRequest request, HttpServletResponse response) {
String fileName = "b60bcf72-219d-4e92-88de-ed6b0ad9b0e7-2018-04-23-14-09-14.xls";// 设置文件名,根据业务需要替换成要下载的文件名
if (fileName != null) {
//设置文件路径
/*String realPath = request.getServletContext().getRealPath("//WEB-INF//");*/
String realPath = "D:\\eclipsworksapce1\\upgrade\\src\\main\\webapp\\upload\\tbox\\456789\\";
File file = new File(realPath , fileName);
if (file.exists()) {
response.setContentType("application/force-download");//
response.setHeader("content-type", "application/octet-stream");
response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);// 设置文件名
byte[] buffer = new byte[1024];
FileInputStream fis = null;
BufferedInputStream bis = null;
try {
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
OutputStream os = response.getOutputStream();
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer, 0, i);
i = bis.read(buffer);
}
System.out.println("success");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
return null;
} @RequestMapping(value = "/test", method = RequestMethod.GET)
public String test(String deviceType,String carModel,int n){
return "ssssssssssssss";
}
}

AccountMapper.java

package com.hcxy.car.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.hcxy.car.bean.Account;
import com.hcxy.car.bean.Permission; @Mapper
public interface AccountMapper {
int addAccount(Account dt);
List<Account> findAll();
int deleteByAccountId(int id); List<Account> findByName(String name); List<Permission> findAllpermissions(); }

PackageFileMapper.java

package com.hcxy.car.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.hcxy.car.bean.PackageFile;

@Mapper
public interface PackageFileMapper { PackageFile selectByPrimaryKeyfile(Long id); List<PackageFile> selectAllTboxFile(); Long deleteByPrimaryKeyfile(Long id); Long insertfile(PackageFile tboxfile); Long insertSelectivefile(PackageFile tboxfile); Long updateByPrimaryKeySelectivefile(PackageFile tboxfile); Long updateByPrimaryKeyfile(PackageFile tboxfile);
}

PackageMapper.java

package com.hcxy.car.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.hcxy.car.bean.Package;
import com.hcxy.car.bean.pojo.PackageFileLink; @Mapper
public interface PackageMapper{ Package tboxselectByPrimaryKey(Long id); List<Package> tboxselectAllTboxFile(); Long tboxdeleteByPrimaryKey(Long id); Long addPackage(Package tbox); Long saveRelativity(PackageFileLink tfl); Long insertSelectivetbox(Package tbox); Long updateByPrimaryKeySelectivetbox(Package tbox); Long updateByPrimaryKeytbox(Package tbox); List<Package> selectAllTboxandFiles();
List<Package> selectAllFiles();//请求所有升级包列表
void modifyPackageByState(int pid,int state);
List<Package> findByName(String devicetype, String carmodel, String version);
List<Package> findMore(String deviceType,String carModel,int n); }

IAccountService.java

package com.hcxy.car.service;

import java.util.List;

import com.hcxy.car.bean.Account;
import com.hcxy.car.bean.Permission; public interface IAccountService extends IBaseService {
boolean findByName(String name); int addAccount(Account dt);
List<Account> findAll();
int deleteByAccountId(int id); List<Permission> findAllpermissions(); }

IPackageService.java

package com.hcxy.car.service;

import java.io.File;
import java.io.FileOutputStream;
import java.util.List; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import com.hcxy.car.bean.Package;
import com.hcxy.car.bean.PackageFile;
import com.hcxy.car.bean.pojo.PackageFileLink; /*@Service
@Transactional*/
public interface IPackageService extends IBaseService {
public void uploadFile(byte[] file, String filePath, String fileName) throws Exception; int addPackage(Package tbox); int insertfile(PackageFile tf); int saveRelativity(PackageFileLink tfl); List<Package> findAllTbox(int pageNum, int pageSize); List<Package> findAllPackages();//请求所有升级包列表 void modifyPackageByState(int pid,int state) throws Exception; boolean findByName(String devicetype,String carmodel,String version); List<Package> findMore(String deviceType,String carModel,int n);
}

AccountServiceImpl.java

package com.hcxy.car.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import com.hcxy.car.bean.Account;
import com.hcxy.car.bean.DeviceType;
import com.hcxy.car.bean.Permission;
import com.hcxy.car.mapper.AccountMapper;
import com.hcxy.car.mapper.CarModelMapper;
import com.hcxy.car.mapper.DeviceTypeMapper;
import com.hcxy.car.service.IAccountService;
import com.hcxy.car.service.IDeviceTypeService; @Service(value = "accountService")
public class AccountServiceImpl implements IAccountService { @Resource(name = "accountMapper")
private AccountMapper accountMapper; @Transactional
public int addAccount(Account dt) {
accountMapper.addAccount(dt);
return 0;
} public List<Account> findAll(){
List<Account> l = null;
try {
l = accountMapper.findAll();
} catch (Exception e) {
e.printStackTrace();
}
return l;
}; @Transactional
public int deleteByAccountId(int id){
accountMapper.deleteByAccountId(id);
return 0;
}; public boolean findByName(String name) {
List<Account> d = accountMapper.findByName(name);
if(d == null || d.size() == 0) {//true有false没有
return false;
}else {
return true;
}
} public List<Permission> findAllpermissions() {
List<Permission> d = accountMapper.findAllpermissions();
return d;
} }

PackageServiceImpl.java

package com.hcxy.car.service.impl;

import java.io.File;
import java.io.FileOutputStream;
import java.util.List; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import com.hcxy.car.bean.Package;
import com.hcxy.car.bean.PackageFile;
import com.hcxy.car.bean.pojo.PackageFileLink;
import com.hcxy.car.mapper.PackageFileMapper;
import com.hcxy.car.mapper.PackageMapper;
import com.hcxy.car.service.IPackageService; @Service(value = "packageService")
public class PackageServiceImpl implements IPackageService{
//@Autowired
@Resource(name = "packageMapper")
private PackageMapper packageMapper;
// @Autowired
@Resource(name = "packageFileMapper")
private PackageFileMapper packageFileMapper; public void uploadFile(byte[] file, String filePath, String fileName) throws Exception { System.out.println("sssssss");
File targetFile = new File(filePath);
if (!targetFile.exists()) {
targetFile.mkdirs();
}
FileOutputStream out = new FileOutputStream(filePath + fileName);
out.write(file);
out.flush();
out.close();
} @Transactional
public int addPackage(Package tbox) {
try {
packageMapper.addPackage(tbox);
} catch (Exception e) {
e.printStackTrace();
}
return 0;
} public List<Package> findALlFiles(int pageNum, int pageSize) {
// packageMapper.selectALlFiles();
return null;
} public List<Package> findAllPackages() {//请求所有升级包列表
return packageMapper.selectAllFiles();
// return null;
} @Transactional
public int insertfile(PackageFile tf) {
packageFileMapper.insertfile(tf);
return 0;
} @Transactional
public int saveRelativity(PackageFileLink tfl) {
packageMapper.saveRelativity(tfl);
return 0;
} public List<Package> findAllTbox(int pageNum, int pageSize) {
// TODO Auto-generated method stub
return null;
} @Transactional
public void modifyPackageByState(int pid,int state) throws Exception {
packageMapper.modifyPackageByState(pid,state);
//throw new Exception();
} public boolean findByName(String devicetype, String carmodel, String version) {
List<Package> p = packageMapper.findByName(devicetype,carmodel,version);
if(null == p || p.size() == 0) {
return false;
}else {
return true;
}
} public List<Package> findMore(String deviceType,String carModel,int n) {
List<Package> l = packageMapper.findMore(deviceType,carModel,n);
return l;
}
}

App.java

package com.hcxy.car.spring.config;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource; //import com.jolbox.bonecp.BoneCPDataSource; @Configuration
@PropertySource(value = {"classpath:jdbc.properties", "classpath:env.properties",
"classpath:httpclient.properties"})
@ComponentScan(basePackages = "com.hcxy.car") //扫描 @Server @Controller @Repository
@MapperScan(value = "com.hcxy.car.mapper")
@ServletComponentScan //不加MyServlet不起作用
//@ImportResource(value = "classpath:dubbo/dubbo-consumer.xml") //ImportResource是import导入
@EnableAutoConfiguration
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
public class App extends SpringBootServletInitializer{ @Value("${jdbc.url}")
private String jdbcUrl; @Value("${jdbc.driverClassName}")
private String jdbcDriverClassName; @Value("${jdbc.username}")
private String jdbcUsername; @Value("${jdbc.password}")
private String jdbcPassword; /*@Bean(destroyMethod = "close")
public DataSource dataSource() {
BoneCPDataSource boneCPDataSource = new BoneCPDataSource();
// 数据库驱动
boneCPDataSource.setDriverClass(jdbcDriverClassName);
// 相应驱动的jdbcUrl
boneCPDataSource.setJdbcUrl(jdbcUrl);
// 数据库的用户名
boneCPDataSource.setUsername(jdbcUsername);
// 数据库的密码
boneCPDataSource.setPassword(jdbcUsername);
// 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0
boneCPDataSource.setIdleConnectionTestPeriodInMinutes(60);
// 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0
boneCPDataSource.setIdleMaxAgeInMinutes(30);
// 每个分区最大的连接数
boneCPDataSource.setMaxConnectionsPerPartition(100);
// 每个分区最小的连接数
boneCPDataSource.setMinConnectionsPerPartition(5);
return boneCPDataSource;
}*/ protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(App.class);
} //Tomcat large file upload connection reset
/*@Bean
public TomcatEmbeddedServletContainerFactory tomcatEmbedded() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) (connector) -> {
if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
//-1 means unlimited
((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
}
});
return tomcat;
}*/ }

CORSConfig.java

package com.hcxy.car.spring.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import static org.springframework.web.cors.CorsConfiguration.ALL; /**
* CORS configuration,去掉就不能访问了
*/
@Configuration
public class CORSConfig { @Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins(ALL)
.allowedMethods(ALL)
.allowedHeaders(ALL)
.allowCredentials(true);
}
};
} }

DruidDBConfig.java

package com.hcxy.car.spring.config;

import java.sql.SQLException;

import javax.sql.DataSource;

import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary; import com.alibaba.druid.pool.DruidDataSource; import org.slf4j.Logger; @Configuration
public class DruidDBConfig {
private Logger logger = LoggerFactory.getLogger(DruidDBConfig.class); @Value("${spring.datasource.url}")
private String dbUrl; @Value("${spring.datasource.username}")
private String username; @Value("${spring.datasource.password}")
private String password; @Value("${spring.datasource.driverClassName}")
private String driverClassName; @Value("${spring.datasource.initialSize}")
private int initialSize; @Value("${spring.datasource.minIdle}")
private int minIdle; @Value("${spring.datasource.maxActive}")
private int maxActive; @Value("${spring.datasource.maxWait}")
private int maxWait; @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
private int timeBetweenEvictionRunsMillis; @Value("${spring.datasource.minEvictableIdleTimeMillis}")
private int minEvictableIdleTimeMillis; @Value("${spring.datasource.validationQuery}")
private String validationQuery; @Value("${spring.datasource.testWhileIdle}")
private boolean testWhileIdle; @Value("${spring.datasource.testOnBorrow}")
private boolean testOnBorrow; @Value("${spring.datasource.testOnReturn}")
private boolean testOnReturn; @Value("${spring.datasource.poolPreparedStatements}")
private boolean poolPreparedStatements; @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
private int maxPoolPreparedStatementPerConnectionSize; @Value("${spring.datasource.filters}")
private String filters; @Value("{spring.datasource.connectionProperties}")
private String connectionProperties; @Bean //声明其为Bean实例
@Primary //在同样的DataSource中,首先使用被标注的DataSource
public DataSource dataSource(){
DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(this.dbUrl);
datasource.setUsername(username);
datasource.setPassword(password);
datasource.setDriverClassName(driverClassName); //configuration
datasource.setInitialSize(initialSize);
datasource.setMinIdle(minIdle);
datasource.setMaxActive(maxActive);
datasource.setMaxWait(maxWait);
datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
datasource.setValidationQuery(validationQuery);
datasource.setTestWhileIdle(testWhileIdle);
datasource.setTestOnBorrow(testOnBorrow);
datasource.setTestOnReturn(testOnReturn);
datasource.setPoolPreparedStatements(poolPreparedStatements);
datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
try {
datasource.setFilters(filters);
} catch (SQLException e) {
logger.error("druid configuration initialization filter", e);
}
datasource.setConnectionProperties(connectionProperties); return datasource;
}
}

CommomUtil.java

package com.hcxy.car.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date; import org.apache.commons.codec.digest.DigestUtils;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.crypto.hash.SimpleHash; public class CommomUtil { public static String DateFormat() {
Date d = new Date();
System.out.println(d);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
String dateNowStr = sdf.format(d);
return dateNowStr;
} public static String md5(File f) {//得到文件的md5值
String md5 = null;
try {
md5 = DigestUtils.md5Hex(new FileInputStream(f));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return md5;
} public static String password(String pwd) {//得到文件的md5值
String md5 = null;
//盐
String salt = "hcxyupgrade";
//散列次数
int hashIterations = 1;
SimpleHash simpleHash = new SimpleHash("md5", pwd, salt, hashIterations);
String password_md5 = simpleHash.toString();
return password_md5;
} }

dubbo-consumer.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 -->
<!-- <dubbo:application name="taotao-cart-consumer" /> --> <!-- 这里使用的注册中心是zookeeper -->
<!-- <dubbo:registry address="zookeeper://127.0.0.1:2181" client="zkclient"/> --> <!-- 从注册中心中查找服务 -->
<!-- <dubbo:reference id="userQueryService" interface="com.taotao.sso.query.service.UserQueryService"/> --> </beans>

AccountMapper.xml

<?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.hcxy.car.mapper.AccountMapper" > <resultMap id="BaseResultMap" type="account" >
<id column="aid" property="aid" jdbcType="INTEGER" />
<result column="user_name" property="username" jdbcType="CHAR" />
<result column="state" property="state" jdbcType="CHAR" />
<collection property="permissions" ofType="permission" javaType="ArrayList">
<id property="pid" column="pid" jdbcType="INTEGER"/>
<result property="pname" column="p_name" jdbcType="CHAR"/>
<result property="pdescription" column="pdescription" jdbcType="VARCHAR"/>
</collection>
</resultMap> <resultMap id="permissionsResult" type="permission" >
<id column="pid" property="pid" jdbcType="INTEGER" />
<result column="p_name" property="pname" jdbcType="CHAR" />
<result column="pdescription" property="pdescription" jdbcType="VARCHAR" />
</resultMap> <sql id="Base_Column" >
aid, user_name
</sql> <select id="selectByid" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column" />
from t_device_type
where dtid = #{dtid,jdbcType=INTEGER}
</select> <select id="findAll" resultMap="BaseResultMap">
select ac.aid ,ac.user_name ,ac.state ,pe.pid, pe.p_name ,pe.pdescription
from t_account ac
left join t_account_permission ap on ac.aid = ap.account_id
left join t_permission pe on ap.permission_id = pe.pid
</select> <select id="findAllpermissions" resultMap="permissionsResult">
select p.pid,p.p_name,p.pdescription
from t_permission p
</select> <select id="findByName" resultMap="BaseResultMap" parameterType="java.lang.String">
select aid, user_name
from t_account
where t_account.user_name = #{arg0,jdbcType=VARCHAR}
</select> <delete id="deleteByiud" parameterType="java.lang.Integer" >
delete from t_device_type
where dtid = #{arg0,jdbcType=INTEGER}
</delete> <insert id="addAccount" parameterType="account" useGeneratedKeys="true" keyProperty="id">
insert into t_account (user_name, password,state)
values (#{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},#{state,jdbcType=CHAR})
</insert> <!-- <insert id="insertSelectivefile" parameterType="tboxFile" useGeneratedKeys="true" keyProperty="id">
insert into t_tboxfile
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="id != null" >
id,
</if>
<if test="orignName != null" >
orignName,
</if>
<if test="newName != null" >
newName,
</if>
<if test="filePath != null" >
filePath,
</if>
<if test="size != null" >
size,
</if>
<if test="md5 != null" >
md5,
</if>
<if test="state != null" >
state,
</if>
<if test="updateTime != null" >
updateTime
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="id != null" >
#{id,jdbcType=BIGINT},
</if>
<if test="orignName != null" >
#{orignName,jdbcType=VARCHAR},
</if>
<if test="newName != null" >
#{newName,jdbcType=VARCHAR},
</if>
<if test="filePath != null" >
#{filePath,jdbcType=VARCHAR},
</if>
<if test="size != null" >
#{size,jdbcType=VARCHAR},
</if>
<if test="md5 != null" >
#{md5,jdbcType=VARCHAR},
</if>
<if test="state != null" >
#{state,jdbcType=INTEGER},
</if>
<if test="updateTime != null" >
#{updateTime,jdbcType=VARCHAR},
</if>
</trim>
</insert> --> <update id="updateById" parameterType="account" >
update t_device_type
<set >
<if test="name != null" >
dtname = #{dtname,jdbcType=CHAR},
</if>
<if test="description != null" >
description = #{description,jdbcType=VARCHAR},
</if>
</set>
where dtid = #{dtid,jdbcType=INTEGER}
</update> <update id="update" parameterType="account" >
update t_device_type
set dtname = #{dtname,jdbcType=CHAR},
description = #{description,jdbcType=VARCHAR}
where dtid = #{dtid,jdbcType=INTEGER}
</update> </mapper>

PackageFileMapper.xml

<?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.hcxy.car.mapper.PackageFileMapper" > <resultMap id="BaseResultMap" type="packFile">
<id column="fid" property="fid" jdbcType="INTEGER"/>
<result column="orign_name" property="orignName" jdbcType="VARCHAR" />
<result column="new_name" property="newName" jdbcType="VARCHAR" />
<result column="file_path" property="filePath" jdbcType="VARCHAR" />
<result column="size" property="size" jdbcType="VARCHAR" />
<result column="md5" property="md5" jdbcType="VARCHAR" />
<association property="pack" javaType="pack">
<id property="pid" column="pid" />
<result property="deviceType" column="device_type" />
<result property="carModel" column="car_model" />
<result property="packageVersion" column="package_version" />
<result property="state" column="state" />
<result property="description" column="description" />
<result property="updateTime" column="update_time" />
</association>
</resultMap> <!-- <sql id="File_Base_Column_List" >
fid, orignName, newName,filePath, size, md5,state,updateTime
</sql> <select id="selectByPrimaryKeyfile" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="File_Base_Column_List" />
from t_tboxfile
where fid = #{fid,jdbcType=BIGINT}
</select> --> <!-- <select id="selectAllTboxFile" resultMap="BaseResultMap">
select
<include refid="File_Base_Column_List" />
from t_tboxfile
</select> --> <!-- <delete id="deleteByPrimaryKeyfile" parameterType="java.lang.Integer" >
delete from t_tboxfile
where fid = #{fid,jdbcType=BIGINT}
</delete> --> <insert id="insertfile" parameterType="packFile" useGeneratedKeys="true" keyProperty="fid">
<!-- <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="fid">
SELECT LAST_INSERT_ID()
</selectKey> -->
insert into t_file (orign_name, new_name, file_path, size, md5)
values (#{orignName,jdbcType=VARCHAR}, #{newName,jdbcType=VARCHAR},
#{filePath,jdbcType=VARCHAR},#{size,jdbcType=VARCHAR},#{md5,jdbcType=VARCHAR})
</insert> <!-- <insert id="insertSelectivefile" parameterType="tboxFile" useGeneratedKeys="true" keyProperty="id">
insert into t_tboxfile
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="fid != null" >
fid,
</if>
<if test="orignName != null" >
orignName,
</if>
<if test="newName != null" >
newName,
</if>
<if test="filePath != null" >
filePath,
</if>
<if test="size != null" >
size,
</if>
<if test="md5 != null" >
md5,
</if>
<if test="state != null" >
state,
</if>
<if test="updateTime != null" >
updateTime
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="fid != null" >
#{fid,jdbcType=BIGINT},
</if>
<if test="orignName != null" >
#{orignName,jdbcType=VARCHAR},
</if>
<if test="newName != null" >
#{newName,jdbcType=VARCHAR},
</if>
<if test="filePath != null" >
#{filePath,jdbcType=VARCHAR},
</if>
<if test="size != null" >
#{size,jdbcType=VARCHAR},
</if>
<if test="md5 != null" >
#{md5,jdbcType=VARCHAR},
</if>
<if test="state != null" >
#{state,jdbcType=INTEGER},
</if>
<if test="updateTime != null" >
#{updateTime,jdbcType=VARCHAR},
</if>
</trim>
</insert> --> <!-- <update id="updateByPrimaryKeySelectivefile" parameterType="tboxFile" >
update t_tboxfile
<set >
<if test="orignName != null" >
orignName = #{orignName,jdbcType=VARCHAR},
</if>
<if test="newName != null" >
newName = #{newName,jdbcType=VARCHAR},
</if>
<if test="filePath != null" >
filePath = #{filePath,jdbcType=VARCHAR},
</if>
<if test="size != null" >
size = #{size,jdbcType=VARCHAR},
</if>
<if test="md5 != null" >
md5 = #{md5,jdbcType=VARCHAR},
</if>
<if test="state != null" >
state = #{state,jdbcType=INTEGER},
</if>
<if test="updateTime != null" >
updateTime = #{updateTime,jdbcType=VARCHAR},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update> --> <!-- <update id="updateByPrimaryKeyfile" parameterType="tboxFile" >
update t_tboxfile
set orignName = #{orignName,jdbcType=VARCHAR},
newName = #{newName,jdbcType=VARCHAR},
filePath = #{filePath,jdbcType=VARCHAR},
size = #{size,jdbcType=VARCHAR},
md5 = #{md5,jdbcType=VARCHAR},
state = #{state,jdbcType=INTEGER},
updateTime = #{updateTime,jdbcType=VARCHAR}
where id = #{id,jdbcType=BIGINT}
</update> -->
</mapper>

PackageMapper.xml

<?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.hcxy.car.mapper.PackageMapper" > <resultMap id="BaseResult" type="pack" >
<id column="pid" property="pid" jdbcType="INTEGER" />
<result column="device_type" property="deviceType" jdbcType="VARCHAR" />
<result column="car_model" property="carModel" jdbcType="VARCHAR" />
<result column="package_version" property="packageVersion" jdbcType="VARCHAR" />
<result column="state" property="state" jdbcType="INTEGER" />
<result column="description" property="description" jdbcType="VARCHAR" />
<result column="update_time" property="updateTime" jdbcType="VARCHAR" />
<!-- </resultMap>
<resultMap type="pack" id="FilesResult" extends="BaseResult"> -->
<collection property="files" ofType="packFile" javaType="ArrayList">
<id property="fid" column="fid" />
<result property="orignName" column="orignName" />
<result property="newName" column="newName" />
<result property="filePath" column="filePath" />
<result property="size" column="size" />
<result property="md5" column="md5" />
</collection>
</resultMap>
<!-- javaType="ArrayList" select="getPackFiles" -->
<sql id="Base_Column" >
pid, device_type, car_model,package_version, state, description,update_time
</sql>
<!-- 请求所有的升级包列表 -->
<select id="selectAllFiles" resultMap="BaseResult">
select p.pid,
p.device_type,
p.car_model,
p.package_version,
p.state,
p.description,
p.update_time,
f.fid ,
f.orign_name as orignName,
f.new_name as newName,
f.file_path as filePath,
f.size,
f.md5
from t_package p
left join t_package_file pf on pf.package_id=p.pid
left join t_file f on pf.file_id=f.fid where p.state!=2
</select> <select id="tboxselectByPrimaryKey" resultMap="BaseResult" parameterType="java.lang.Integer" >
select
<include refid="Base_Column" />
from t_package
where pid = #{pid,jdbcType=BIGINT}
</select> <select id="findByName" resultMap="BaseResult">
select *
from t_package
where device_type = #{arg0,jdbcType=VARCHAR} and car_model=#{arg1,jdbcType=VARCHAR}
and package_version=#{arg2,jdbcType=VARCHAR}
</select> <select id="findMore" resultMap="BaseResult">
select *
from t_package
where state = #{arg2,jdbcType=VARCHAR} and device_type = #{arg0,jdbcType=INTEGER} and car_model = #{arg1,jdbcType=INTEGER}
</select>
<!--
<select id="tboxselectAllTboxFile" resultMap="BaseResult">
select
<include refid="Base_Column" />
from t_package
</select> --> <!-- 根据tbox表中的id查询tbox和file信息 -->
<select id="selectALlFilesById" parameterType="int" resultMap="BaseResult">
select p.pid,p.device_type,p.car_model,p.package_version,p.state,p.description,p.update_time,
f.fid as fId,f.orign_name as Fo, f.new_name as fn,f.file_path as ff ,f.size as fs,f.md5 as fm
from t_package p left join t_package_file pf on p.pid=pf.package_id left join t_file f on pf.file_id=f.fid where p.pid = #{id} and p.state!=2
</select> <!-- <delete id="tboxdeleteByPrimaryKey" parameterType="java.lang.Integer" >
delete from t_package
where pid = #{pid,jdbcType=BIGINT}
</delete> --> <insert id="addPackage" parameterType="pack" useGeneratedKeys="true" keyProperty="pid"> <!-- keyProperty="pid"是对象的属性id -->
<!-- <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="pid">
SELECT LAST_INSERT_ID()
</selectKey> -->
insert into t_package (device_type, car_model, package_version, state, description,update_time)
values (#{deviceType,jdbcType=VARCHAR}, #{carModel,jdbcType=VARCHAR},
#{packageVersion,jdbcType=VARCHAR},#{state,jdbcType=INTEGER},
#{description,jdbcType=VARCHAR},#{updateTime,jdbcType=VARCHAR})
</insert> <!-- 保存用户和组之间的关系信息 -->
<insert id="saveRelativity" parameterType="com.hcxy.car.bean.pojo.PackageFileLink">
insert into t_package_file(package_id,file_id)
values(#{pack.pid},#{file.fid})
</insert> <!-- <insert id="insertSelectivetbox" parameterType="tbox" useGeneratedKeys="true" keyProperty="id">
insert into t_package
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="pid != null" >
pid,
</if>
<if test="fileType != null" >
fileType,
</if>
<if test="fileVersion != null" >
fileVersion,
</if>
<if test="state != null" >
state,
</if>
<if test="updateTime != null" >
updateTime,
</if>
<if test="description != null" >
description,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="pid != null" >
#{pid,jdbcType=BIGINT},
</if>
<if test="fileType != null" >
#{fileType,jdbcType=VARCHAR},
</if>
<if test="fileVersion != null" >
#{fileVersion,jdbcType=VARCHAR},
</if>
<if test="state != null" >
#{state,jdbcType=INTEGER},
</if>
<if test="updateTime != null" >
#{updateTime,jdbcType=VARCHAR},
</if>
<if test="description != null" >
#{description,jdbcType=VARCHAR},
</if>
</trim>
</insert> --> <!-- <update id="updateByPrimaryKeySelectivetbox" parameterType="tbox" >
update t_package
<set >
<if test="fileType != null" >
fileType = #{fileType,jdbcType=VARCHAR},
</if>
<if test="fileVersion != null" >
fileVersion = #{fileVersion,jdbcType=VARCHAR},
</if>
<if test="state != null" >
state = #{state,jdbcType=BIGINT},
</if>
<if test="description != null" >
description = #{description,jdbcType=VARCHAR},
</if>
<if test="updateTime != null" >
updateTime = #{updateTime,jdbcType=VARCHAR},
</if>
</set>
where pid = #{pid,jdbcType=BIGINT}
</update> --> <!-- <update id="updateByPrimaryKeytbox" parameterType="tbox" >
update t_package
set fileType = #{fileType,jdbcType=VARCHAR},
fileVersion = #{fileVersion,jdbcType=VARCHAR},
state = #{state,jdbcType=INTEGER},
description = #{description,jdbcType=VARCHAR},
updateTime = #{updateTime,jdbcType=VARCHAR}
where pid = #{pid,jdbcType=BIGINT}
</update> --> <update id="modifyPackageByState">
update t_package
set state = #{arg1}
where pid = #{arg0}
</update>
</mapper>

application.yml

server:
port: 8086
servlet:
path: / spring:
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
http:
multipart:
enabled: true
max-file-size: -1
max-request-size: -1
resolve-lazily: false
file-size-threshold: 0
datasource:
url: jdbc:mysql://127.0.0.1:3306/upgrade?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=true
username: root
password:
# 使用druid数据源,
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
filters: stat,wall,log4j
maxActive: 20
initialSize: 5
maxWait: 60000
minIdle: 5
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 20
maxPoolPreparedStatementPerConnectionSize: 20
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
jpa:
database: mysql
show-sql: true
hibernate:
#ddl-auto: update
naming:
strategy: org.hibernate.cfg.DefaultComponentSafeNamingStrategy
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5Dialect
hbm2ddl:
auto: update mybatis:
mapper-locations: classpath:mapper/*.xml
#config-location: classpath:mybatis-config.xml
type-aliases-package: com.hcxy.car.bean #pagehelper
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql logging:
level:
com:
hcxy:
car:
mapper: DEBUG

tbox.sql

DROP TABLE IF EXISTS `t_package`;
--升级包表
CREATE TABLE `t_package` (
`pid` int unsigned not null primary key auto_increment,
`device_type` char(20) NOT NULL,
`car_model` char(20) NOT NULL,
`package_version` varchar(50) NOT NULL,
`state` char(1) NOT NULL,
`update_time` char(20) NOT NULL,
`description` text DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; --文件表
DROP TABLE IF EXISTS `t_file`;
CREATE TABLE `t_file` (
`fid` int unsigned not null primary key auto_increment,
`orign_name` varchar(50) NOT NULL,
`new_name` varchar(150) NOT NULL,
`size` varchar(150) DEFAULT "",
`file_path` varchar(255) NOT NULL,
`md5` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; ---中间表
DROP TABLE IF EXISTS `t_package_file`;
CREATE TABLE `t_package_file` (
`pfid` int unsigned NOT NULL primary key auto_increment,
`package_id` int unsigned NOT NULL,
`file_id` int unsigned NOT NULL,
CONSTRAINT `FK_package_ID3` FOREIGN KEY (`package_id`) REFERENCES `t_package` (`pid`),
CONSTRAINT `FK_file_ID3` FOREIGN KEY (`file_id`) REFERENCES `t_file` (`fid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; --设备类型表
DROP TABLE IF EXISTS `t_device_type`;
CREATE TABLE `t_device_type` (
`dtid` int unsigned not null primary key auto_increment,
`dtname` char(20) NOT NULL,
`description` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; --车型表
DROP TABLE IF EXISTS `t_car_model`;
CREATE TABLE `t_car_model` (
`cmid` int unsigned not null primary key auto_increment,
`cname` char(20) NOT NULL,
`device_type_id` int unsigned NOT NULL,
CONSTRAINT `FK_device_type_ID` FOREIGN KEY (`device_type_id`) REFERENCES `t_device_type` (`dtid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; --设备表
DROP TABLE IF EXISTS `t_device`;
CREATE TABLE `t_device` (
`did` int NOT NULL primary key auto_increment,
`device_uuid` varchar(150) NOT NULL,
`device_type` char(20) NOT NULL,
`car_model` char(20),
`package_id` int unsigned,
`is_newset` char(1),
CONSTRAINT `FK_package` FOREIGN KEY (`package_id`) REFERENCES `t_package` (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; --下载记录表
DROP TABLE IF EXISTS `t_download_log`;
CREATE TABLE `t_download_log` (
`dlid` int NOT NULL primary key auto_increment,
`package_id` int unsigned not null,
`device_id` int NOT NULL,
`download_time` char(20),
`is_success` char(1),
CONSTRAINT `FK_package_ID1` FOREIGN KEY (`package_id`) REFERENCES `t_package` (`pid`),
CONSTRAINT `FK_device_ID` FOREIGN KEY (`device_id`) REFERENCES `t_device` (`did`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; --tsp推送记录
DROP TABLE IF EXISTS `t_tsp_push`;
CREATE TABLE `t_tsp_push` (
`tpid` int NOT NULL primary key auto_increment,
`package_id` int unsigned default null,
`date` char(20),
`message_body` text,
`is_success` char(1),
`type` char(20) not null,
CONSTRAINT `FK_package_ID2` FOREIGN KEY (`package_id`) REFERENCES `t_package` (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; --推送和设备中间表
DROP TABLE IF EXISTS `t_push_device`;
CREATE TABLE `t_push_device` (
`pdid` int NOT NULL primary key auto_increment,
`push_id` int NOT NULL,
`device_id` int NOT NULL,
CONSTRAINT `FK_push_ID` FOREIGN KEY (`push_id`) REFERENCES `t_tsp_push` (`tpid`),
CONSTRAINT `FK_device_ID2` FOREIGN KEY (`device_id`) REFERENCES `t_device` (`did`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `t_account`;
CREATE TABLE `t_account` (
`aid` int NOT NULL primary key auto_increment,
`user_name` char(20) NOT NULL,
`password` char(20) NOT NULL,
`sault` char(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `t_role`;
CREATE TABLE `t_role` (
`rid` int NOT NULL primary key auto_increment,
`r_name` char(20) NOT NULL,
`description` varchar(100) default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `t_permission`;
CREATE TABLE `t_permission` (
`pid` int NOT NULL primary key auto_increment,
`p_name` char(20) NOT NULL,
`description` varchar(100) default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `t_account_role`;
CREATE TABLE `t_account_role` (
`arid` int NOT NULL primary key auto_increment,
`account_id` int NOT NULL,
`role_id` int NOT NULL,
CONSTRAINT `FK_account_ID` FOREIGN KEY (`account_id`) REFERENCES `t_account` (`aid`),
CONSTRAINT `FK_role_ID2` FOREIGN KEY (`role_id`) REFERENCES `t_role` (`rid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `t_role_permission`;
CREATE TABLE `t_role_permission` (
`rpid` int NOT NULL primary key auto_increment,
`role_id` int NOT NULL,
`permission_id` int NOT NULL,
CONSTRAINT `FK_role_ID` FOREIGN KEY (`role_id`) REFERENCES `t_role` (`rid`),
CONSTRAINT `FK_permission_ID` FOREIGN KEY (`permission_id`) REFERENCES `t_permission` (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; //账号权限表
CREATE TABLE `t_account_permission` (
`apid` int NOT NULL primary key auto_increment,
`account_id` int NOT NULL,
`permission_id` int NOT NULL,
CONSTRAINT `FK_account_ID3` FOREIGN KEY (`account_id`) REFERENCES `t_account` (`aid`),
CONSTRAINT `FK_permission_ID3` FOREIGN KEY (`permission_id`) REFERENCES `t_permission` (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.12.RELEASE</version>
</parent>
<groupId>com.hcxy.car</groupId>
<artifactId>upgrade</artifactId>
<version>1.0.0-SNAPSHOT</version>
<!-- <packaging>war</packaging> -->
<packaging>jar</packaging>
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency> <!-- Mybatis -->
<!-- <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId>
<version>3.2.8</version> </dependency> <dependency> <groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency> <!-- 分页助手 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>3.7.5</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.1</version>
</dependency>
<!--支持热启动-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>true</scope>
</dependency>
<!-- 阿里系的Druid数据源: -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.25</version>
</dependency> <!-- Spring Boot的JPA依赖包: -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- 通用Mapper -->
<dependency>
<groupId>com.github.abel533</groupId>
<artifactId>mapper</artifactId>
<version>2.3.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml</groupId>
<artifactId>classmate</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.4.0</version>
</dependency>
<!-- MySqlDriver驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 连接池 -->
<!-- <dependency> <groupId>com.jolbox</groupId> <artifactId>bonecp-spring</artifactId>
<version>0.8.0.RELEASE</version> </dependency> --> <!-- httpclient -->
<!-- <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId>
</dependency> --> <!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency> <!-- Apache工具组件 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<!-- <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId>
</dependency> --> <!-- <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId>
<version>2.5.3</version> <exclusions> <exclusion> 排除传递spring依赖 <artifactId>spring</artifactId>
<groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> --> <!-- <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId>
<version>3.3.3</version> </dependency> --> <!-- <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId>
<version>0.1</version> </dependency> -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.39</version>
</dependency>
</dependencies> <build>
<!-- <defaultGoal>compile</defaultGoal> -->
<plugins>
<!-- 资源文件拷贝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--fork : 如果没有该项配置,肯呢个devtools不会起作用,即应用不会restart -->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build> </project>

最新文章

  1. Matlab(1) -- Matlab清屏命令
  2. [zt]java synchronized详解
  3. Java 语句总结
  4. HDU 5695 Gym Class 拓扑排序
  5. Android(java)学习笔记127:Android Studio新建工程中的build.gradle、settings.gradle
  6. [Mugeda HTML5技术教程之12]制作跨屏互动应用
  7. Java中常见数据结构Set之HashSet
  8. 剑指offer面试题48: 最长不含重复字符的子字符串
  9. python-数据分析与展示(Numpy、matplotlib、pandas)---1
  10. progress 进度条
  11. LOJ 10127 -「一本通 4.3 练习 1」最大数
  12. c++builder ZIP文件解压与压缩(ZLIB DLL调用)(转载 )
  13. 使用Maven部署构件至私服
  14. dp之最长上升子序列
  15. [LeetCode 题解]: Validate Binary Search Tree
  16. java中的各种命令参数
  17. svn update解决冲突
  18. HDU5742 It&#39;s All In The Mind 数学思维题
  19. SPOJ - FAVDICE 简单期望
  20. shell中嵌套执行expect命令实例(利用expect实现自动登录)

热门文章

  1. bootstrap-table接合abp
  2. 如何在GitHub上删除某个文件夹?
  3. [已解决]pycharm报错:AttributeError: module &#39;pip&#39; has no attribute &#39;main&#39;
  4. 使用Salt-ssh部署Salt-minion之yum安装(一)
  5. ansible使用
  6. Unity3D学习笔记——NGUI之UIToggle
  7. 【BZOJ2282】[Sdoi2011]消防 树形DP+双指针法+单调队列
  8. ACM至大二省赛小结
  9. 160818、CSS页面布局笔记
  10. 阻塞(sleep等等)区别 中断(interrupt)+ 中断的意义