37b1f1e1e1948641970b9f9994077b47117d0ef1.svn-base 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. package com.iamberry.app.api.controller;
  2. import static com.iamberry.app.config.Response.BARCODE_NOT_FOUND;
  3. import static com.iamberry.app.config.Response.INVALID_TOKEN;
  4. import static com.iamberry.app.config.Response.SUCCESS;
  5. import java.util.HashMap;
  6. import java.util.List;
  7. import java.util.Map;
  8. import javax.servlet.http.HttpServletRequest;
  9. import org.springframework.stereotype.Controller;
  10. import org.springframework.web.bind.WebDataBinder;
  11. import org.springframework.web.bind.annotation.InitBinder;
  12. import org.springframework.web.bind.annotation.PathVariable;
  13. import org.springframework.web.bind.annotation.RequestMapping;
  14. import org.springframework.web.bind.annotation.RequestMethod;
  15. import org.springframework.web.bind.annotation.RequestParam;
  16. import org.springframework.web.bind.annotation.ResponseBody;
  17. import org.springframework.web.multipart.MultipartFile;
  18. import com.iamberry.app.config.Response;
  19. import com.iamberry.app.config.ResponseHeader;
  20. import com.iamberry.app.core.dto.RecordDTO;
  21. import com.iamberry.app.core.entity.MilkDatetimeValue;
  22. import com.iamberry.app.core.entity.MilkImages;
  23. import com.iamberry.app.core.entity.MilkMakingRecord;
  24. import com.iamberry.app.core.entity.MilkPowderInfo;
  25. import com.iamberry.app.core.entity.User;
  26. import com.iamberry.wechat.file.FileUtils;
  27. import com.iamberry.wechat.file.UploadResultBean;
  28. import com.iamberry.wechat.tools.ResponseJson;
  29. /**
  30. * UserController
  31. *
  32. * @author Moon Cheng
  33. * @date 2016年1月18日 上午11:53:04
  34. */
  35. @Controller
  36. @RequestMapping("/secure/milk")
  37. public class MilkController extends BaseController {
  38. /**
  39. * 上传奶粉信息的域名,及保存的路径,需要tomcat单独域名映射/或者是nginx
  40. */
  41. private static String SAVE_MILK_IMAGE_DOMAIN = "http://milk.iamberry.com/";
  42. private static String SAVE_MILK_IMAGE_PATH = "/common/";
  43. @InitBinder("makingRecord")
  44. public void initBinderRecord(WebDataBinder binder) {
  45. binder.setFieldDefaultPrefix("makingRecord.");
  46. }
  47. @InitBinder("milkPowderInfo")
  48. public void initBinderMilkPowder(WebDataBinder binder) {
  49. binder.setFieldDefaultPrefix("milkPowderInfo.");
  50. }
  51. /**
  52. * 添加冲奶信息
  53. * @author Moon Cheng
  54. * @param token 唯一标识符
  55. * @param makingRecord 冲奶信息实体类
  56. * @return 1000:请求成功;2100:无效token;
  57. */
  58. @RequestMapping(value = "/set_milk_making_record", method = RequestMethod.POST)
  59. @ResponseBody
  60. private Response setMilkMakingRecord(@RequestParam("token") String token, MilkMakingRecord makingRecord) {
  61. makingRecord = milkService.setMilkMakingRecord(makingRecord, token);
  62. if (makingRecord == null) {
  63. return INVALID_TOKEN;
  64. }
  65. return SUCCESS.setData(makingRecord, 1);
  66. }
  67. /**
  68. * 通过日期,日期类型,统计某时间的,冲奶总量
  69. * @param token 唯一标识符
  70. * @param dateStatus 标识符 : day week year
  71. * @param chosenDate 结束时间
  72. * @param machineMac 机器mac地址
  73. * @return
  74. */
  75. @RequestMapping(value = "/search_user_records_by_time", method = RequestMethod.POST)
  76. @ResponseBody
  77. private Response searchUserRecordsByTime(@RequestParam(value = "token") String token,
  78. @RequestParam("date_status") String dateStatus, @RequestParam("chosen_date") String chosenDate,
  79. @RequestParam("devid") String machineMac) {
  80. User userInfo = userService.validateUserToken(token);
  81. if (userInfo == null) {
  82. return INVALID_TOKEN;
  83. }
  84. Map<String, List<RecordDTO>> makingRecords = milkService.searchUserRecordsByTime(userInfo.getId(), dateStatus,
  85. chosenDate, machineMac);
  86. return SUCCESS.setData(makingRecords, makingRecords.size());
  87. }
  88. /**
  89. * 根据用户id获取用户,冲奶总容量
  90. * @author Moon Cheng
  91. * @param userId 用户id
  92. * @return
  93. */
  94. @RequestMapping(value = "/get_user_total_milk_volume", method = RequestMethod.POST)
  95. @ResponseBody
  96. private Response getTotalMilkVolumeMadeByUser(@RequestParam(value = "user_id") Long userId) {
  97. return SUCCESS.setData(milkService.getTotalMilkVolumeMadeByUser(userId), 0);
  98. }
  99. /**
  100. * 手动添加,奶粉信息!
  101. * @author Moon Cheng
  102. * @param token 唯一标识符
  103. * @param milkPowderInfo 奶粉信息
  104. * @return
  105. */
  106. @RequestMapping(value = "/set_milk_powder_info", method = RequestMethod.POST)
  107. @ResponseBody
  108. private Response setMilkPowderInfo(@RequestParam(value = "token") String token, MilkPowderInfo milkPowderInfo) {
  109. // 勺量,每勺多少克 量勺 克数范围2-18
  110. String amountStr = request.getParameter("a_mount");
  111. if (amountStr == null) {
  112. // 兼容低版本
  113. milkPowderInfo = milkService.setMilkPowderInfo(milkPowderInfo, token);
  114. if (milkPowderInfo == null) {
  115. return INVALID_TOKEN;
  116. }
  117. return SUCCESS.setData(milkPowderInfo, 1);
  118. }
  119. float amount = Float.parseFloat(amountStr);
  120. // 勺数,多少少 量勺勺数范围 1-10
  121. int spoonNum = Integer.parseInt(request.getParameter("spoon_num"));
  122. // ML,1勺多少奶量 水量范围30-300
  123. float spoonML = Float.parseFloat(request.getParameter("spoon_ml"));
  124. // 毫升/勺
  125. float s = spoonML / spoonNum;
  126. // 混合比 计算公式:勺量 * 勺数 / 毫升 * 100 = 混合比
  127. float ratio = amount * spoonNum / spoonML * 100;
  128. milkPowderInfo.setPowder_ratio(ratio);
  129. milkPowderInfo.setWeight_per_spoon(amount);
  130. milkPowderInfo.setMilk_volume_per_spoon(s);
  131. // 密度
  132. /*
  133. * A<13.2 6
  134. 13.21<A<15.3 7
  135. 15.31<A<17.4 8
  136. 17.41<A<19.5 9
  137. 19.51<A<22.0 10
  138. 22.1 <A 10
  139. */
  140. int m = 6;
  141. if (ratio < 13.2) {
  142. m = 6;
  143. } else if (ratio > 13.21 && ratio < 15.3) {
  144. m = 7;
  145. } else if (ratio > 15.31 && ratio < 17.4) {
  146. m = 8;
  147. } else if (ratio > 17.41 && ratio < 19.5) {
  148. m = 9;
  149. } else {
  150. m = 10;
  151. }
  152. milkPowderInfo.setDensity((float)m);
  153. // 保存操作
  154. milkPowderInfo = milkService.setMilkPowderInfo(milkPowderInfo, token);
  155. if (milkPowderInfo == null) {
  156. return INVALID_TOKEN;
  157. }
  158. // 保存图片
  159. String imageFront = request.getParameter("imageFront");
  160. String imageBar = request.getParameter("imageBar");
  161. String imageFeed = request.getParameter("imageFeed");
  162. MilkImages images = new MilkImages();
  163. images.setImage_Front(imageFront);
  164. images.setImage_Bar(imageBar);
  165. images.setImage_Feed(imageFeed);
  166. images.setImage_Milk_ID(milkPowderInfo.getId());
  167. milkService.setMilkImages(images);
  168. return SUCCESS.setData(milkPowderInfo, 1);
  169. }
  170. /**
  171. * 通过,条形码获取奶粉信息
  172. * @author Moon Cheng
  173. * @param barcode 条形码code
  174. * @return
  175. */
  176. @RequestMapping(value = "/search_milk_powder_info_by_barcode", method = RequestMethod.POST)
  177. @ResponseBody
  178. private Response searchMilkPowderInfoByBarCode(@RequestParam(value = "barcode") String barcode) {
  179. MilkPowderInfo milkPowderInfo = milkService.searchMilkPowderInfoByBarCode(barcode);
  180. if (milkPowderInfo == null) {
  181. return BARCODE_NOT_FOUND;
  182. }
  183. return SUCCESS.setData(milkPowderInfo, 1);
  184. }
  185. /**
  186. * 通过品牌名获取奶粉信息
  187. * @author Moon Cheng, Yin
  188. * @param brand 品牌名
  189. * @return
  190. */
  191. @RequestMapping(value = "/search_milk_powder_infos_by_brand", method = RequestMethod.POST)
  192. @ResponseBody
  193. private Response searchMilkPowderInfosByBrand(@RequestParam(value = "brand") String brand) {
  194. Map<String, List<String>> milkPowderInfos = milkService.searchMilkPowderInfosByBrand(brand);
  195. return SUCCESS.setData(milkPowderInfos, milkPowderInfos.size());
  196. }
  197. /**
  198. * 获取奶粉品牌
  199. * @author Yin
  200. * @return 过滤掉品牌名中有.的 例如 a.b 这里或只查询到a
  201. */
  202. @RequestMapping(value = "/search_milk_powder_brand", method = RequestMethod.GET)
  203. @ResponseBody
  204. private Response searchMilkPowderBrand() {
  205. List<String> milkPowderInfos = milkService.searchMilkPowderBrand();
  206. return SUCCESS.setData(milkPowderInfos, milkPowderInfos.size());
  207. }
  208. /**
  209. * @param model
  210. * @param request
  211. * @return
  212. */
  213. @ResponseBody
  214. @RequestMapping(value = "/upload_image", method = RequestMethod.POST)
  215. public Response uploadFileImage(@RequestParam("file")MultipartFile[] files, HttpServletRequest request) {
  216. Map<String, String> filemap= new HashMap<String, String>();
  217. for (int i = 0; i < files.length; i++) {
  218. MultipartFile file = files[i];
  219. // 保存文件
  220. UploadResultBean bean = FileUtils.saveFile(request.getServletContext(), file, SAVE_MILK_IMAGE_PATH, false);
  221. if (bean == null) {
  222. // 文件有误
  223. return new Response(new ResponseHeader(4204, "文件有误!", -1));
  224. }
  225. filemap.put("file"+i,SAVE_MILK_IMAGE_DOMAIN + bean.getSaveFileName());
  226. }
  227. return SUCCESS.setData(filemap, filemap.size());
  228. }
  229. /**
  230. * 获取冲奶记录详情
  231. * @param mac 机器id
  232. * @param userToken 用户token
  233. * @param date 时间,格式为yyyy-MM-dd,可以为空,如果为空,默认为当天
  234. * @return
  235. * @author 献
  236. * @Time 2016年12月12日
  237. */
  238. @ResponseBody
  239. @RequestMapping(value = "/{mac}/milk_record", method = RequestMethod.POST)
  240. public ResponseJson machineRecordByTime(@PathVariable("mac") String mac,
  241. @RequestParam("token") String userToken,
  242. @RequestParam(value = "date", required = false) String date) {
  243. User userInfo = userService.validateUserToken(userToken);
  244. if (userInfo == null) {
  245. //token不存在,表示登录的时候没有..
  246. return new ResponseJson(200, "SUCCESS", 404);
  247. }
  248. // 找到机器
  249. ResponseJson json = new ResponseJson(200, "SUCCESS", 200);
  250. List<MilkDatetimeValue> values = milkService.getMilkRecordByTime(mac, date);
  251. if (values == null) {
  252. json.addResponseKeyValue("data", false);
  253. } else {
  254. json.addResponseKeyValue("data", true);
  255. }
  256. json.addResponseKeyValue("values", values);
  257. return json;
  258. }
  259. /**
  260. * 根据机器号,按照日期统计
  261. * @param mac 机器号
  262. * @param userToken 用户token
  263. * @param date 日期,可以为空,如果为空,默认查询本月数据
  264. * @return
  265. * @author 献
  266. * @Time 2016年12月12日
  267. */
  268. @ResponseBody
  269. @RequestMapping(value = "/{mac}/date/milk_record")
  270. public ResponseJson machineRecordByDate(
  271. @PathVariable("mac") String mac,
  272. @RequestParam("token") String userToken,
  273. @RequestParam(value = "date", required = false) String date) {
  274. User userInfo = userService.validateUserToken(userToken);
  275. if (userInfo == null) {
  276. //token不存在,表示登录的时候没有..
  277. return new ResponseJson(200, "SUCCESS", 404);
  278. }
  279. // 提取数据
  280. ResponseJson json = new ResponseJson(200, "SUCCESS", 200);
  281. List<MilkDatetimeValue> values = milkService.getMilkRecordByDate(mac, date);
  282. if (values == null) {
  283. json.addResponseKeyValue("data", false);
  284. } else {
  285. json.addResponseKeyValue("data", true);
  286. }
  287. json.addResponseKeyValue("values", values);
  288. return json;
  289. }
  290. }