package org.taobao88.taobao.controllers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; 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.taobao88.taobao.enterprise.dao.OrdersStatusesDAO; import org.taobao88.taobao.enterprise.dao.PackagesStatusesDAO; import org.taobao88.taobao.enterprise.dao.StatusesDAO; import org.taobao88.taobao.enterprise.dao.UuidDAO; import org.taobao88.taobao.enterprise.entity.*; import org.taobao88.taobao.enterprise.service.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.sql.Timestamp; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; @Controller @RequestMapping("/admin") public class AdminController extends MainController{ @Autowired private OrderService orderDAO; @Autowired private UserService userDAO; @Autowired private GoodsService goodsDAO; @Autowired private OrderStatusService orderStatusDAO; @Autowired private PackageService packageDAO; @Autowired private PackageStatusService packageStatusDAO; @Autowired private UserService userService; @Autowired private MessagesService messagesService; @Autowired private BalanceService balanceService; @Autowired private StatusesDAO statusesDAO; @Autowired private OrdersStatusesDAO ordersStatusesDAO; @Autowired private PackagesStatusesDAO packagesStatusesDAO; @Autowired private UuidDAO uuidDAO; @Autowired private PriceService priceService; @Autowired private PackageService packageService; @RequestMapping(method = RequestMethod.GET) public String adminPage(HttpServletRequest request) { request.getSession().setAttribute("TIME",getCurrentDate()); List<PackageT> packageTList = packageDAO.getPackagesForAdmin(); packageTList = getListForFirstPage(packageTList,request); request.setAttribute("activePackages",packageTList); return "activePackages"; } @RequestMapping(value="/orderHistory", method = RequestMethod.GET) public String adminHistoryPage(HttpServletRequest request) { List<PackageT> packageTList = packageDAO.getPackagesForAdminHistory(); packageTList = getListForFirstPage(packageTList,request); request.setAttribute("activePackages",packageTList); return "history"; } @RequestMapping(value="/toAdminStatus", method = RequestMethod.GET) public String adminStatus(HttpServletRequest request) { int idOrderStatus = Integer.parseInt(request.getParameter("idOrderStatus")); request.getSession().setAttribute("currentIdOrderStatus",idOrderStatus); OrderStatus orderStatus = orderStatusDAO.findStatusById(idOrderStatus); request.setAttribute("status",orderStatus); return "adminStatus"; } @RequestMapping(value="/saveOrderStatus", method = RequestMethod.GET) public String saveStatus(@RequestParam ("idOrder") int[] idOrder, @RequestParam ("statusId") int[] statusId, @RequestParam ("idPackage") int idPackage, Model model, HttpServletRequest request) { UserT user = null; for (int i = 0; i < idOrder.length; i++) { OrderT order = orderDAO.findOrderById(idOrder[i]); user = userDAO.findUserById(order.getIdUser()); Status status = statusesDAO.findById(statusId[i]); boolean foundStatus = false; for (OrdersStatuses os : order.getOrdersStatuses()) { if (os != null) { if (os.getStatus().getId() == status.getId()) { foundStatus = true; os.setCreatedAt(new Timestamp(new Date().getTime())); ordersStatusesDAO.update(os); } } } if (!foundStatus) { OrdersStatuses os = new OrdersStatuses(); os.setStatus(status); os.setOrderT(order); os.setCreatedAt(new Timestamp(new Date().getTime())); ordersStatusesDAO.add(os); } } PackageT packageT = packageDAO.findPackageById(idPackage); for (OrderT o : packageT.getOrders()) { o.setGoods(goodsDAO.findEmployeeById(o.getIdGoods())); } model.addAttribute("allStatuses", statusesDAO.getAll()); model.addAttribute("packageT", packageT); model.addAttribute("userOfCurrentPackage", user); return "showPackageAdmin"; } @RequestMapping(value="/orderInformation", method = RequestMethod.GET) public String orderInformation(HttpServletRequest request) { int idOrder = Integer.parseInt(request.getParameter("idOrder")); OrderT orderT = orderDAO.findOrderById(idOrder); Goods goods = goodsDAO.findEmployeeById(orderT.getIdGoods()); UserT userT = userDAO.findUserById(orderT.getIdUser()); request.setAttribute("good",goods); request.setAttribute("user",userT); request.setAttribute("order",orderT); return "orderInformation"; } @RequestMapping(value="/activePackages", method = RequestMethod.GET) public String activePackages(HttpServletRequest request) { request.setAttribute("activePackages",packageDAO.getPackagesForAdmin()); return "activePackages"; } @RequestMapping(value="/showPackageAdmin", method = RequestMethod.GET) public String showPackageAdmin(HttpServletRequest request) { int idPackage = Integer.parseInt(request.getParameter("idPackage")); PackageT packageT = packageDAO.findPackageById(idPackage); UserT user = null; for (OrderT o : packageT.getOrders()) { if (user == null) { user = userDAO.findUserById(o.getIdUser()); } o.setGoods(goodsDAO.findEmployeeById(o.getIdGoods())); } request.setAttribute("allStatuses", statusesDAO.getAll()); request.setAttribute("packageT", packageT); request.setAttribute("userOfCurrentPackage", user); return "showPackageAdmin"; } @RequestMapping(value="/userInformation", method = RequestMethod.GET) public String userInformation(HttpServletRequest request) { HttpSession session = request.getSession(true); request.setAttribute("changeSettingsBool","false"); UserT userT = (UserT)session.getAttribute("currentUserOfPackage"); request.setAttribute("user",userT); request.setAttribute("adminSettingsBool","true"); return "adminSettings"; } @RequestMapping(value = "showMessages", method = RequestMethod.GET) public String showMessages(Model model) { List<PackageT> packs = packageDAO.getPackagesForAdmin(); Map<Integer, UserT> packagesUsers = new HashMap<>(); for (PackageT p : packs) { p.setMessages(messagesService.findMessagesByPackage(p)); UserT user = userDAO.findUserById(orderDAO.getOrdersByPackages(p.getIdPackage()).get(0).getIdUser()); packagesUsers.put(p.getIdPackage(), user); } model.addAttribute("packages", packs); model.addAttribute("packagesUsers", packagesUsers); return "messages/messagesAdmin"; } @RequestMapping(value = "showBalances", method = RequestMethod.GET) public String showBalances(HttpServletRequest request) { List<UserT> users = userService.getAll(); Map<Integer, Integer> usersBalances = new HashMap<>(); for (UserT u : users) { usersBalances.put(u.getIdUser(), balanceService.getBalance(u)); } request.setAttribute("users", users); request.setAttribute("balances", usersBalances); return "balancesAdmin"; } @RequestMapping(value = "adjustBalance", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody String adjustBalance(@RequestParam ("user_id") int userId, @RequestParam ("amount") int amount, @RequestParam ("type") String type, HttpServletRequest request) { UserT user = userService.findUserById(userId); if (type.equals("inc")) { String uuidStr = UUID.randomUUID().toString(); Uuid uuid = new Uuid(); uuid.setUuid(uuidStr); uuidDAO.addUuid(uuid); String server = request.getServerName(); int serverPort = request.getServerPort(); String contextPath = request.getContextPath(); String confirmUrl = "http://" + server + ":" + serverPort + contextPath + "/pay/confirmBalanceAdjustment?userId=" + userId + "&amount=" + amount + "&uuid=" + uuid.getUuid(); sendToAdmin("Пополнение счета для " + user.getNameUser(), confirmUrl); return "{\"success\":true,\"message\":\"message_sended\"}"; } else { BalanceOperation bo = new BalanceOperation(); bo.setUserT(userService.findUserById(userId)); bo.setAmount(amount); bo.setReason("Decrement by Admin"); balanceService.adjustBalance(bo); return "{\"success\":true,\"message\":\"decrement_success\"}"; } } @RequestMapping(value = "packages/update", method = RequestMethod.GET) public String updatePackage(@RequestParam ("idPackage") int idPackage, Model model) { model.addAttribute("allStatuses", statusesDAO.getAll()); model.addAttribute("packageT", packageDAO.findPackageById(idPackage)); return "packages/update"; } @RequestMapping(value = "packages/doUpdate", method = RequestMethod.POST) public String doUpdatePackage(HttpServletRequest request) { int idPackage = Integer.parseInt(request.getParameter("idPackage")); int fullPrice = Integer.parseInt(request.getParameter("fullPrice")); double weight = Double.parseDouble(request.getParameter("weight")); String tracknumber = request.getParameter("tracknumber"); int statusId = Integer.parseInt(request.getParameter("statusId")); Status status = statusesDAO.findById(statusId); PackageT p = packageDAO.findPackageById(idPackage); p.setFullPrice(fullPrice); p.setWeight(weight); p.setTracknumber(tracknumber); packageDAO.updatePackage(p); boolean foundStatus = false; for (PackagesStatuses ps : p.getPackagesStatuses()) { if (ps != null) { if (ps.getStatus().getId() == status.getId()) { foundStatus = true; ps.setCreatedAt(new Timestamp(new Date().getTime())); packagesStatusesDAO.update(ps); } } } if (!foundStatus) { PackagesStatuses ps = new PackagesStatuses(); ps.setPackageT(p); ps.setStatus(status); ps.setCreatedAt(new Timestamp(new Date().getTime())); packagesStatusesDAO.add(ps); } return "redirect:/admin/showPackageAdmin?idPackage=" + p.getIdPackage(); } @RequestMapping(value = "/removeStatus", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody String removeOrdersStatuses(@RequestParam ("id") int id, @RequestParam ("action") String action) { boolean success = false; if (action.equals("removeOrdersStatuses")) { OrdersStatuses os = ordersStatusesDAO.findById(id); if (os != null) { ordersStatusesDAO.delete(os); } success = ordersStatusesDAO.findById(id) == null; } else if (action.equals("removePackagesStatuses")) { PackagesStatuses ps = packagesStatusesDAO.findById(id); if (ps != null) { packagesStatusesDAO.delete(ps); } success = packagesStatusesDAO.findById(id) == null; } return "{\"success\":" + success + ",\"message\":\"ok\"}"; } @RequestMapping(value = "/updateOrder", method = RequestMethod.GET) public String updateOrder(@RequestParam ("orderId") int orderId, @RequestParam ("packageId") int packageId, Model model) { OrderT order = orderDAO.findOrderById(orderId); PackageT packageT = packageDAO.findPackageById(packageId); model.addAttribute("orderT", order); model.addAttribute("packageT", packageT); return "orders/updateByAdmin"; } @RequestMapping(value = "/doUpdateOrder", method = RequestMethod.POST) public String doUpdateOrder(@RequestParam ("orderId") int orderId, @RequestParam ("packageId") int packageId, HttpServletRequest request, Model model) { OrderT order = orderDAO.findOrderById(orderId); PackageT packageT = packageDAO.findPackageById(packageId); Goods goods = goodsDAO.findEmployeeById(order.getIdGoods()); goods.setAmountGoods(Integer.parseInt(request.getParameter("amountGoods"))); goods.setPriceGoods(Integer.parseInt(request.getParameter("priceGoods"))); order.setGoods(goods); orderDAO.updateOrder(order); order.setFullPrice(priceService.getOrderPrice(order)); orderDAO.updateOrder(order); List<OrderT> orders = orderDAO.getOrdersByPackages(packageT.getIdPackage()); int priceWithoutDelivery = 0; for (OrderT o : orders) { o.setGoods(goodsDAO.findEmployeeById(o.getIdGoods())); priceWithoutDelivery += o.getFullPrice(); } PostService service = packageT.getPostService(); UserT user = userDAO.findUserById(order.getIdUser()); int deliveryPrice = priceService.getDeliveryPrice(orders, user, priceWithoutDelivery, service); packageT.setFullPrice(deliveryPrice); packageT.setWeight(priceService.calculatePackageWeight(orders)); packageService.updatePackage(packageT); return "redirect:/admin/showPackageAdmin?idPackage=" + packageT.getIdPackage(); } }