Controller層:
@ResponseBody
@RequestMapping(value = "", method = RequestMethod.POST)
public JSONObject addTroubleTicket(HttpServletRequest request,
@RequestParam(value="accessToken",required=true)String accessToken,
TroubleTicket troubleTicket,
@RequestParam(value="file",required=false) MultipartFile[] images) throws Exception{
troubleTicketReportService.addTroubleTicket(troubleTicket, images, accessToken);
return returnSuccess();
}
ps:圖片表單提交,所以不能用@RequestBody接收參數,可以用對象接收。
Service層:
@Service("troubleTicketReportImpl")
public class TroubleTicketReportImpl implements TroubleTicketReportService{
@Resource(name="troubleTicketDaoImpl")
private TroubleTicketDao troubleTicketDao;
@Resource(name="electrombileDaoImpl")
private ElectrombileDao electrombileDao;
private final String upload_img_root = PropertiesUtil.getStringValue("upload_root");
private final String upload_img_report_dir = PropertiesUtil.getStringValue("upload_img_report_dir");
private final String upload_img_report_url = PropertiesUtil.getStringValue("upload_img_report_url");
//文件最大值 kb,默認1024kb
private final Integer max_img_size =PropertiesUtil.get("trouble_max_img_size", 1024);
@Override
public void addTroubleTicket(TroubleTicket ttk,MultipartFile[] images,String accessToken) {
String electrombileCode = ttk.getElectrombileCode();
ValidUtil.valid("車輛編碼", electrombileCode, "{'required':true,'regex':'" + RegexConstants.NUM_10_PATTERN + "'}");
String remark = ttk.getRemark();
if(remark != null && remark != ""){
ValidUtil.valid("備注", remark, "{'required':false,'regex':'" + RegexConstants.STRING_0_300_PATTERN + "'}");
}
String reportContent = ttk.getReportContent();
if(reportContent != null && reportContent != ""){
ValidUtil.valid("故障內容", reportContent, "{'required':false,'regex':'" + RegexConstants.STRING_0_300_PATTERN + "'}");
}
String types = ttk.getTroubleType();
if(types.isEmpty() || types ==null){
throw new BizException("E1000022", MessageUtil.getMessage("E1000022","維修類型"));//維修類型不存在
}
if(types.contains(",")){
String[] type = types.split(",");
for(String t :type){
if(null==TroubleType.contains(Integer.valueOf(t))){
throw new BizException("E1000015", MessageUtil.getMessage("E1000015","維修類型"));
}
}
}else {
if(null==TroubleType.contains(Integer.valueOf(types))){
throw new BizException("E1000015", MessageUtil.getMessage("E1000015","維修類型"));
}
}
Electrombile electrombile = new Electrombile();
electrombile.setElectrombileCode(electrombileCode);
List<Electrombile> elist = electrombileDao.queryListByParams(electrombile,1,10);
if(elist.size() ==0 || elist == null || elist.size() > 1){
throw new BizException("E1000022", MessageUtil.getMessage("E1000022","車輛信息"));//車輛信息不存在
}
//查看status=0,1,2,3的數據有幾條
TroubleTicket troubleTicket = new TroubleTicket();
troubleTicket.setElectrombileCode(electrombileCode);
int size = troubleTicketDao.selectCountByStatus(troubleTicket);
if(size > 0){
throw new BizException("E1000014", MessageUtil.getMessage("E1000014","報修信息"));//報修信息存在
}
String reportPhoto = "";
if(images != null && images.length!=0){
reportPhoto = saveImages(images);
}
AppUserDTO usrDto = KeyUtil.getAppUserByAccessToken(accessToken);
AppUser user = usrDto.getUserInfo();
Integer subscriberId = user.getId();//用戶ID
// ttk.setTicketCode(String.valueOf(System.currentTimeMillis()));//工單編號
ttk.setId(null);
ttk.setReportDate(new Date());
ttk.setReportPhoto(reportPhoto);
ttk.setSubscriberId(subscriberId);
ttk.setStatus(0);
troubleTicketDao.insertSelective(ttk);
}
@Override
public TroubleTicket queryByElectrombileCode(String accessToken) {
AppUserDTO usrDto = KeyUtil.getAppUserByAccessToken(accessToken);
AppUser user = usrDto.getUserInfo();
String electrombileCode = user.getElectrombileCode();
TroubleTicket ttk = troubleTicketDao.selectByElectrombileCode(electrombileCode);
return ttk;
}
private String saveImages(MultipartFile[] images) {
//當前時間 的 年月日路徑 2017/06/27
String folderpath = DateUtil.getToday();
//如果不是以/ 結尾 添加斜杠/ /smart-lease-pub/imgreport --> /smart-lease-pub/imgreport/
String uploadImgReportDir = upload_img_report_dir;
if(!upload_img_report_dir.endsWith("/")){
uploadImgReportDir +="/";
}
StringBuilder urls = new StringBuilder();
//最多只能上傳4張報修圖片
if(images.length>4) {
throw new ValidException("E1000017", MessageUtil.getMessage("E1000017","圖片張數"));
}
for(MultipartFile image : images){
// 文件類型校驗 image jpeg bmp.
String contentType = image.getContentType();
if(!StringUtils.isBlank(contentType)){
if (contentType.equals("image/jpeg") || contentType.equals("image/png")
|| contentType.equals("image/bmp")) {
} else {
throw new ValidException("E1000015", MessageUtil.getMessage("E1000015","圖片類型"));//圖片類型不合法
}
} else {
throw new ValidException("E1000013", MessageUtil.getMessage("E1000013","圖片類型")); //圖片類型不允許為空
}
//文件大小校驗
if(image.getSize() == 0){
throw new ValidException("E1000013", MessageUtil.getMessage("E1000013","圖片內容"));
}
//文件大小大於配置最大值
long fileSize = image.getSize();
if(fileSize > max_img_size*1024){
throw new ValidException("E1000031", MessageUtil.getMessage("E1000031", new Object[]{"圖片大小",max_img_size*1024}));
}
//圖片保存路徑和訪問URL不能為空
if(StringUtils.isBlank(upload_img_report_dir) || StringUtils.isBlank(upload_img_report_url)){
throw new ValidException("E1000013", MessageUtil.getMessage("E1000013","圖片保存路徑和訪問URL"));
}
String fileName = System.currentTimeMillis() + RandomUtil.getRandomNumber(4) + ".png"; //時間戳 + 四位隨機數
//文件完整路徑示例 : /service/media/smart-lease-pub/imgreport/2018/12/12/xxxxxx.png
String path = upload_img_root + uploadImgReportDir + folderpath + "/" ;
File dir = new File(path);
if(!dir.exists()){
dir.mkdirs();
}
path += fileName;
File newFile=new File(path);
try {
image.transferTo(newFile);
}catch(Exception e) {
throw new BizException("E1000038", MessageUtil.getMessage("E1000038","保存圖片"));
}
String url = upload_img_report_url + uploadImgReportDir + folderpath + "/" + fileName;
urls.append(url);
urls.append(Constants.URL_SPLIT);//多個用|分割
}
return urls.substring(0,urls.length()-1);//去掉最后一個分隔符
}
}