AddressController.java 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. package modules.address;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.jfinal.aop.Before;
  4. import com.jfinal.aop.Inject;
  5. import com.jfinal.kit.StrKit;
  6. import common.interceptor.LoginInterceptor;
  7. import common.interceptor.empty.EmptyInterface;
  8. import common.model.Address;
  9. import common.model.User;
  10. import common.utils.http.MyController;
  11. import common.utils.http.MyRet;
  12. import modules.user.UserService;
  13. import java.util.List;
  14. @Before(LoginInterceptor.class)
  15. public class AddressController extends MyController {
  16. @Inject
  17. private AddressService service;
  18. @Inject
  19. private UserService userService;
  20. public void hello() {
  21. renderText("Hello, Address!");
  22. }
  23. public void getDefaultAddress() {
  24. User user = userService.findUserByMobileNumber(getSessionAttr("mobile_number"));
  25. Long userId = user.getId();
  26. Address address = service.findDefaultByUserId(userId);
  27. if (address == null) {
  28. renderJson(MyRet.fail("默认地址不存在,请添加").setCode(MyRet.CODE_NO_ADDR));
  29. return;
  30. }
  31. renderJson(MyRet.ok("获取成功").setData(address));
  32. }
  33. /**
  34. * 获取用户的收货地址列表
  35. */
  36. public void list() {
  37. User user = userService.findUserByMobileNumber(getSessionAttr("mobile_number"));
  38. List<Address> addresses = service.findByUserId(user.getId());
  39. renderJson(MyRet.ok("获取成功").setData(addresses));
  40. }
  41. /**
  42. * 获取单个收货地址详情
  43. */
  44. public void get() {
  45. User user = userService.findUserByMobileNumber(getSessionAttr("mobile_number"));
  46. JSONObject requestBodyJson = MyController.getJsonModelByRequestAndType(getRequest(), JSONObject.class);
  47. Integer addressId;
  48. try {
  49. addressId = requestBodyJson.getInteger("id");
  50. } catch (Exception e) {
  51. renderJson(MyRet.fail("你传入的 id 有些问题:" + e.getMessage()).setData(requestBodyJson));
  52. return;
  53. }
  54. if (addressId == null) {
  55. renderJson(MyRet.fail("id 不能为空"));
  56. return;
  57. }
  58. Address address = service.findById(addressId, user.getId());
  59. if (address == null) {
  60. renderJson(MyRet.fail("地址不存在"));
  61. return;
  62. }
  63. renderJson(MyRet.ok("获取成功").setData(address));
  64. }
  65. /**
  66. * 新增收货地址
  67. */
  68. @EmptyInterface({"recipient_name", "phone_number", "detailed_address"})
  69. public void save() {
  70. User user = userService.findUserByMobileNumber(getSessionAttr("mobile_number"));
  71. JSONObject json = MyController.getJsonModelByRequestAndType(getRequest(), JSONObject.class);
  72. Address address = new Address();
  73. // 校验收货人姓名
  74. String recipientName = json.getString("recipient_name");
  75. if (StrKit.isBlank(recipientName)) {
  76. renderJson(MyRet.fail("收货人姓名不能为空"));
  77. return;
  78. }
  79. address.setRecipientName(recipientName);
  80. // 校验手机号码
  81. String phoneNumber = json.getString("phone_number");
  82. if (StrKit.isBlank(phoneNumber)) {
  83. renderJson(MyRet.fail("手机号码不能为空"));
  84. return;
  85. }
  86. address.setPhoneNumber(phoneNumber);
  87. // 校验详细地址
  88. String detailedAddress = json.getString("detailed_address");
  89. if (StrKit.isBlank(detailedAddress)) {
  90. renderJson(MyRet.fail("详细地址不能为空"));
  91. return;
  92. }
  93. address.setDetailedAddress(detailedAddress);
  94. // 处理是否默认地址
  95. Object isDefaultObj = json.get("is_default");
  96. if (isDefaultObj != null) {
  97. try {
  98. int isDefaultValue = com.alibaba.fastjson.util.TypeUtils.castToInt(isDefaultObj);
  99. if (isDefaultValue == 0 || isDefaultValue == 1) {
  100. address.setIsDefault(isDefaultValue);
  101. } else {
  102. renderJson(MyRet.fail("is_default 字段的值必须是 0 或 1"));
  103. return;
  104. }
  105. } catch (Exception e) {
  106. renderJson(MyRet.fail("is_default 字段格式不正确,必须是数字 0 或 1"));
  107. return;
  108. }
  109. }
  110. address.setUserId(user.getId().intValue());
  111. try {
  112. if (service.save(address)) {
  113. renderJson(MyRet.ok("保存成功").setData(address));
  114. } else {
  115. renderJson(MyRet.fail("保存失败"));
  116. }
  117. } catch (RuntimeException e) {
  118. // 捕获地址数量超过上限的异常
  119. renderJson(MyRet.fail(e.getMessage()));
  120. }
  121. }
  122. /**
  123. * 修改收货地址
  124. */
  125. public void update() {
  126. User user = userService.findUserByMobileNumber(getSessionAttr("mobile_number"));
  127. JSONObject json = MyController.getJsonModelByRequestAndType(getRequest(), JSONObject.class);
  128. // 校验地址ID
  129. Integer id = json.getInteger("id");
  130. if (id == null) {
  131. renderJson(MyRet.fail("地址ID不能为空"));
  132. return;
  133. }
  134. // 查找并验证地址是否存在
  135. Address address = service.findById(id, user.getId());
  136. if (address == null) {
  137. renderJson(MyRet.fail("地址不存在"));
  138. return;
  139. }
  140. // 更新收货人姓名(如果提供)
  141. String recipientName = json.getString("recipient_name");
  142. if (StrKit.notBlank(recipientName)) {
  143. address.setRecipientName(recipientName);
  144. }
  145. // 更新手机号码(如果提供)
  146. String phoneNumber = json.getString("phone_number");
  147. if (StrKit.notBlank(phoneNumber)) {
  148. address.setPhoneNumber(phoneNumber);
  149. }
  150. // 更新详细地址(如果提供)
  151. String detailedAddress = json.getString("detailed_address");
  152. if (StrKit.notBlank(detailedAddress)) {
  153. address.setDetailedAddress(detailedAddress);
  154. }
  155. // 处理是否默认地址(如果提供)
  156. Object isDefaultObj = json.get("is_default");
  157. if (isDefaultObj != null) {
  158. try {
  159. int isDefaultValue = com.alibaba.fastjson.util.TypeUtils.castToInt(isDefaultObj);
  160. if (isDefaultValue == 0 || isDefaultValue == 1) {
  161. address.setIsDefault(isDefaultValue);
  162. } else {
  163. renderJson(MyRet.fail("is_default 字段的值必须是 0 或 1"));
  164. return;
  165. }
  166. } catch (Exception e) {
  167. renderJson(MyRet.fail("is_default 字段格式不正确,必须是数字 0 或 1"));
  168. return;
  169. }
  170. }
  171. if (service.update(address)) {
  172. renderJson(MyRet.ok("更新成功").setData(address));
  173. } else {
  174. renderJson(MyRet.fail("更新失败"));
  175. }
  176. }
  177. /**
  178. * 删除收货地址
  179. */
  180. public void delete() {
  181. User user = userService.findUserByMobileNumber(getSessionAttr("mobile_number"));
  182. JSONObject requestBodyJson = MyController.getJsonModelByRequestAndType(getRequest(), JSONObject.class);
  183. Integer addressId;
  184. try {
  185. addressId = requestBodyJson.getInteger("id");
  186. } catch (Exception e) {
  187. renderJson(MyRet.fail("你传入的 id 有些问题:" + e.getMessage()).setData(requestBodyJson));
  188. return;
  189. }
  190. if (addressId == null) {
  191. renderJson(MyRet.fail("id 不能为空"));
  192. return;
  193. }
  194. if (service.delete(addressId, user.getId())) {
  195. renderJson(MyRet.ok("删除成功"));
  196. } else {
  197. renderJson(MyRet.fail("删除失败"));
  198. }
  199. }
  200. /**
  201. * 设置默认地址
  202. */
  203. public void setDefault() {
  204. User user = userService.findUserByMobileNumber(getSessionAttr("mobile_number"));
  205. JSONObject requestBodyJson = MyController.getJsonModelByRequestAndType(getRequest(), JSONObject.class);
  206. Integer addressId;
  207. try {
  208. addressId = requestBodyJson.getInteger("id");
  209. } catch (Exception e) {
  210. renderJson(MyRet.fail("你传入的 id 有些问题:" + e.getMessage()).setData(requestBodyJson));
  211. return;
  212. }
  213. if (addressId == null) {
  214. renderJson(MyRet.fail("id 不能为空"));
  215. return;
  216. }
  217. if (service.setDefault(addressId, user.getId())) {
  218. renderJson(MyRet.ok("设置成功"));
  219. } else {
  220. renderJson(MyRet.fail("设置失败"));
  221. }
  222. }
  223. }