Java 仿天貓服裝商城系統(tǒng)的實現(xiàn)流程
一、項目簡述
功能:網(wǎng)上商城系統(tǒng),前臺+后臺管理,用戶注冊,登錄, 上哦展示,分組展示,搜索,收貨地址管理,購物車管 理,添加,購買,個人信息修改。訂單查詢等等,后臺商 品管理,分類管理,庫存管理,訂單管理,用戶管理,信 息、修改等等。
二、項目運行
環(huán)境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)
項目技術: JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui+ maven等等。







權限控制代碼:
/**
* 產(chǎn)品詳情頁
*/
@Controller
public class ForeProductDetailsController extends BaseController {
@Resource(name = "productService")
private ProductService productService;
@Resource(name = "userService")
private UserService userService;
@Resource(name = "productImageService")
private ProductImageService productImageService;
@Resource(name = "categoryService")
private CategoryService categoryService;
@Resource(name = "propertyValueService")
private PropertyValueService propertyValueService;
@Resource(name = "propertyService")
private PropertyService propertyService;
@Resource(name = "reviewService")
private ReviewService reviewService;
@Resource(name = "productOrderItemService")
private ProductOrderItemService productOrderItemService;
//轉到前臺天貓-產(chǎn)品詳情頁
@RequestMapping(value = "product/{pid}", method = RequestMethod.GET)
public String goToPage(HttpSession session, Map<String, Object> map,
@PathVariable("pid") String pid /*產(chǎn)品ID*/) {
logger.info("檢查用戶是否登錄");
Object userId = checkUser(session);
if (userId != null) {
logger.info("獲取用戶信息");
User user = userService.get(Integer.parseInt(userId.toString()));
map.put("user", user);
}
logger.info("獲取產(chǎn)品ID");
Integer product_id = Integer.parseInt(pid);
logger.info("獲取產(chǎn)品信息");
Product product = productService.get(product_id);
if (product == null || product.getProduct_isEnabled() == 1) {
return "redirect:/404";
}
logger.info("獲取產(chǎn)品子信息-分類信息");
product.setProduct_category(categoryService.get(product.getProduct_category().getCategory_id()));
logger.info("獲取產(chǎn)品子信息-預覽圖片信息");
List<ProductImage> singleProductImageList = productImageService.getList(product_id, (byte) 0, null);
product.setSingleProductImageList(singleProductImageList);
logger.info("獲取產(chǎn)品子信息-詳情圖片信息");
List<ProductImage> detailsProductImageList = productImageService.getList(product_id, (byte) 1, null);
product.setDetailProductImageList(detailsProductImageList);
logger.info("獲取產(chǎn)品子信息-產(chǎn)品屬性值信息");
List<PropertyValue> propertyValueList = propertyValueService.getList(new PropertyValue().setPropertyValue_product(product), null);
logger.info("獲取產(chǎn)品子信息-分類信息對應的屬性列表");
List<Property> propertyList = propertyService.getList(new Property().setProperty_category(product.getProduct_category()), null);
logger.info("屬性列表和屬性值列表合并");
for (Property property : propertyList) {
for (PropertyValue propertyValue : propertyValueList) {
if (property.getProperty_id().equals(propertyValue.getPropertyValue_property().getProperty_id())) {
List<PropertyValue> property_value_item = new ArrayList<>(1);
property_value_item.add(propertyValue);
property.setPropertyValueList(property_value_item);
break;
}
}
}
logger.info("獲取產(chǎn)品子信息-產(chǎn)品評論信息");
product.setReviewList(reviewService.getListByProductId(product_id, null));
if (product.getReviewList() != null) {
for (Review review : product.getReviewList()) {
review.setReview_user(userService.get(review.getReview_user().getUser_id()));
}
}
logger.info("獲取猜你喜歡列表");
Integer category_id = product.getProduct_category().getCategory_id();
Integer total = productService.getTotal(new Product().setProduct_category(new Category().setCategory_id(category_id)), new Byte[]{0, 2});
logger.info("分類ID為{}的產(chǎn)品總數(shù)為{}條", category_id, total);
//生成隨機數(shù)
int i = new Random().nextInt(total);
if (i + 2 >= total) {
i = total - 3;
}
if (i < 0) {
i = 0;
}
List<Product> loveProductList = productService.getList(new Product().setProduct_category(
new Category().setCategory_id(category_id)),
new Byte[]{0, 2},
null,
new PageUtil().setCount(3).setPageStart(i)
);
if (loveProductList != null) {
logger.info("獲取產(chǎn)品列表的相應的一張預覽圖片");
for (Product loveProduct : loveProductList) {
loveProduct.setSingleProductImageList(productImageService.getList(loveProduct.getProduct_id(), (byte) 0, new PageUtil(0, 1)));
}
}
logger.info("獲取分類列表");
List<Category> categoryList = categoryService.getList(null, new PageUtil(0, 3));
map.put("loveProductList", loveProductList);
map.put("categoryList", categoryList);
map.put("propertyList", propertyList);
map.put("product", product);
map.put("guessNumber", i);
map.put("pageUtil", new PageUtil(0, 10).setTotal(product.getProduct_review_count()));
logger.info("轉到前臺-產(chǎn)品詳情頁");
return "fore/productDetailsPage";
}
//按產(chǎn)品ID加載產(chǎn)品評論列表-ajax
@Deprecated
@ResponseBody
@RequestMapping(value = "review/{pid}", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
public String loadProductReviewList(@PathVariable("pid") String pid/*產(chǎn)品ID*/,
@RequestParam Integer index/* 頁數(shù) */,
@RequestParam Integer count/* 行數(shù) */) {
logger.info("獲取產(chǎn)品ID");
Integer product_id = Integer.parseInt(pid);
logger.info("獲取產(chǎn)品評論列表");
List<Review> reviewList = reviewService.getListByProductId(product_id, new PageUtil(index, count));
JSONObject jsonObject = new JSONObject();
jsonObject.put("reviewList", JSONArray.parseArray(JSON.toJSONString(reviewList)));
return jsonObject.toJSONString();
}
//按產(chǎn)品ID加載產(chǎn)品屬性列表-ajax
@Deprecated
@ResponseBody
@RequestMapping(value = "property/{pid}", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
public String loadProductPropertyList(@PathVariable("pid") String pid/*產(chǎn)品ID*/) {
logger.info("獲取產(chǎn)品ID");
Integer product_id = Integer.parseInt(pid);
logger.info("獲取產(chǎn)品詳情-屬性值信息");
Product product = new Product();
product.setProduct_id(product_id);
List<PropertyValue> propertyValueList = propertyValueService.getList(new PropertyValue().setPropertyValue_product(product), null);
logger.info("獲取產(chǎn)品詳情-分類信息對應的屬性列表");
List<Property> propertyList = propertyService.getList(new Property().setProperty_category(product.getProduct_category()), null);
logger.info("屬性列表和屬性值列表合并");
for (Property property : propertyList) {
for (PropertyValue propertyValue : propertyValueList) {
if (property.getProperty_id().equals(propertyValue.getPropertyValue_property().getProperty_id())) {
List<PropertyValue> property_value_item = new ArrayList<>(1);
property_value_item.add(propertyValue);
property.setPropertyValueList(property_value_item);
break;
}
}
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("propertyList", JSONArray.parseArray(JSON.toJSONString(propertyList)));
return jsonObject.toJSONString();
}
//加載猜你喜歡列表-ajax
@ResponseBody
@RequestMapping(value = "guess/{cid}", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
public String guessYouLike(@PathVariable("cid") Integer cid, @RequestParam Integer guessNumber) {
logger.info("獲取猜你喜歡列表");
Integer total = productService.getTotal(new Product().setProduct_category(new Category().setCategory_id(cid)), new Byte[]{0, 2});
logger.info("分類ID為{}的產(chǎn)品總數(shù)為{}條", cid, total);
//生成隨機數(shù)
int i = new Random().nextInt(total);
if (i + 2 >= total) {
i = total - 3;
}
if (i < 0) {
i = 0;
}
while (i == guessNumber) {
i = new Random().nextInt(total);
if (i + 2 >= total) {
i = total - 3;
}
if (i < 0) {
i = 0;
break;
}
}
logger.info("guessNumber值為{},新guessNumber值為{}", guessNumber, i);
List<Product> loveProductList = productService.getList(new Product().setProduct_category(
new Category().setCategory_id(cid)),
new Byte[]{0, 2},
null,
new PageUtil().setCount(3).setPageStart(i)
);
if (loveProductList != null) {
logger.info("獲取產(chǎn)品列表的相應的一張預覽圖片");
for (Product loveProduct : loveProductList) {
loveProduct.setSingleProductImageList(productImageService.getList(loveProduct.getProduct_id(), (byte) 0, new PageUtil(0, 1)));
}
}
JSONObject jsonObject = new JSONObject();
logger.info("獲取數(shù)據(jù)成功!");
jsonObject.put("success", true);
jsonObject.put("loveProductList", JSONArray.parseArray(JSON.toJSONString(loveProductList)));
jsonObject.put("guessNumber", i);
return jsonObject.toJSONString();
}
}
用戶信息管理控制層:
/**
* 用戶信息管理
*/
@Controller
public class ForeUserController extends BaseController{
@Resource(name = "addressService")
private AddressService addressService;
@Resource(name="userService")
private UserService userService;
//轉到前臺天貓-用戶詳情頁
@RequestMapping(value = "userDetails", method = RequestMethod.GET)
public String goToUserDetail(HttpSession session, Map<String,Object> map){
logger.info("檢查用戶是否登錄");
Object userId = checkUser(session);
if (userId != null) {
logger.info("獲取用戶信息");
User user = userService.get(Integer.parseInt(userId.toString()));
map.put("user", user);
logger.info("獲取用戶所在地區(qū)級地址");
String districtAddressId = user.getUser_address().getAddress_areaId();
Address districtAddress = addressService.get(districtAddressId);
logger.info("獲取市級地址信息");
Address cityAddress = addressService.get(districtAddress.getAddress_regionId().getAddress_areaId());
logger.info("獲取其他地址信息");
List<Address> addressList = addressService.getRoot();
List<Address> cityList = addressService.getList(
null,cityAddress.getAddress_regionId().getAddress_areaId()
);
List<Address> districtList = addressService.getList(null,cityAddress.getAddress_areaId());
map.put("addressList", addressList);
map.put("cityList", cityList);
map.put("districtList", districtList);
map.put("addressId", cityAddress.getAddress_regionId().getAddress_areaId());
map.put("cityAddressId", cityAddress.getAddress_areaId());
map.put("districtAddressId", districtAddressId);
return "fore/userDetails";
} else {
return "redirect:/login";
}
}
//前臺天貓-用戶更換頭像
@ResponseBody
@RequestMapping(value = "user/uploadUserHeadImage", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
public String uploadUserHeadImage(@RequestParam MultipartFile file, HttpSession session
){
String originalFileName = file.getOriginalFilename();
logger.info("獲取圖片原始文件名:{}", originalFileName);
String extension = originalFileName.substring(originalFileName.lastIndexOf('.'));
String fileName = UUID.randomUUID() + extension;
String filePath = session.getServletContext().getRealPath("/") + "res/images/item/userProfilePicture/" + fileName;
logger.info("文件上傳路徑:{}", filePath);
JSONObject jsonObject = new JSONObject();
try {
logger.info("文件上傳中...");
file.transferTo(new File(filePath));
logger.info("文件上傳成功!");
jsonObject.put("success", true);
jsonObject.put("fileName", fileName);
} catch (IOException e) {
logger.warn("文件上傳失??!");
e.printStackTrace();
jsonObject.put("success", false);
}
return jsonObject.toJSONString();
}
//前臺天貓-用戶詳情更新
@RequestMapping(value="user/update",method=RequestMethod.POST,produces ="application/json;charset=utf-8")
public String userUpdate(HttpSession session, Map<String,Object> map,
@RequestParam(value = "user_nickname") String user_nickname /*用戶昵稱 */,
@RequestParam(value = "user_realname") String user_realname /*真實姓名*/,
@RequestParam(value = "user_gender") String user_gender /*用戶性別*/,
@RequestParam(value = "user_birthday") String user_birthday /*用戶生日*/,
@RequestParam(value = "user_address") String user_address /*用戶所在地 */,
@RequestParam(value = "user_profile_picture_src", required = false)
String user_profile_picture_src /* 用戶頭像*/,
@RequestParam(value = "user_password") String user_password/* 用戶密碼 */
) throws ParseException, UnsupportedEncodingException {
logger.info("檢查用戶是否登錄");
Object userId = checkUser(session);
if (userId != null) {
logger.info("獲取用戶信息");
User user = userService.get(Integer.parseInt(userId.toString()));
map.put("user", user);
} else {
return "redirect:/login";
}
logger.info("創(chuàng)建用戶對象");
if (user_profile_picture_src != null && "".equals(user_profile_picture_src)) {
user_profile_picture_src = null;
}
User userUpdate = new User()
.setUser_id(Integer.parseInt(userId.toString()))
.setUser_nickname(user_nickname)
.setUser_realname(user_realname)
.setUser_gender(Byte.valueOf(user_gender))
.setUser_birthday(new SimpleDateFormat("yyyy-MM-dd").parse(user_birthday))
.setUser_address(new Address().setAddress_areaId(user_address))
.setUser_profile_picture_src(user_profile_picture_src)
.setUser_password(user_password);
logger.info("執(zhí)行修改");
if (userService.update(userUpdate)){
logger.info("修改成功!跳轉到用戶詳情頁面");
return "redirect:/userDetails";
}
throw new RuntimeException();
}
}
地址信息管理控制層:
/**
* 地址信息管理
*/
@RestController
public class ForeAddressController extends BaseController {
@Resource(name = "addressService")
private AddressService addressService;
//根據(jù)address_areaId獲取地址信息-ajax
@RequestMapping(value = "address/{areaId}", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
protected String getAddressByAreaId(@PathVariable String areaId) {
JSONObject object = new JSONObject();
logger.info("獲取AreaId為{}的地址信息");
List<Address> addressList = addressService.getList(null, areaId);
if (addressList == null || addressList.size() <= 0) {
object.put("success", false);
return object.toJSONString();
}
logger.info("獲取該地址可能的子地址信息");
List<Address> childAddressList = addressService.getList(null, addressList.get(0).getAddress_areaId());
object.put("success", true);
object.put("addressList", addressList);
object.put("childAddressList", childAddressList);
return object.toJSONString();
}
}
到此這篇關于Java 仿天貓服裝商城系統(tǒng)的實現(xiàn)流程的文章就介紹到這了,更多相關Java 商城系統(tǒng)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- Java 實戰(zhàn)項目錘煉之在線購書商城系統(tǒng)的實現(xiàn)流程
- Java畢業(yè)設計實戰(zhàn)之在線蛋糕銷售商城的實現(xiàn)
- Java畢業(yè)設計實戰(zhàn)之線上水果超市商城的實現(xiàn)
- Java畢業(yè)設計實戰(zhàn)項目之寵物商城系統(tǒng)的實現(xiàn)流程
- Java畢業(yè)設計實戰(zhàn)項目之在線服裝銷售商城系統(tǒng)的實現(xiàn)流程
- Java實戰(zhàn)花店商城系統(tǒng)的實現(xiàn)流程
- Java實現(xiàn)茶葉售賣商城系統(tǒng)(java+SSM+JSP+EasyUi+mysql)
- Java女裝商城系統(tǒng)的實現(xiàn)流程
- Java畢業(yè)設計實戰(zhàn)之二手書商城系統(tǒng)的實現(xiàn)
相關文章
Java Spring詳解如何配置數(shù)據(jù)源注解開發(fā)以及整合Junit
Spring 是目前主流的 Java Web 開發(fā)框架,是 Java 世界最為成功的框架。該框架是一個輕量級的開源框架,具有很高的凝聚力和吸引力,本篇文章帶你了解如何配置數(shù)據(jù)源、注解開發(fā)以及整合Junit2021-10-10
如何實現(xiàn)java8 list按照元素的某個字段去重
這篇文章主要介紹了如何實現(xiàn)java8 list按照元素的某個字段去重,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,,需要的朋友可以參考下2019-06-06
spring boot環(huán)境抽象的實現(xiàn)方法
在實際開發(fā)中,開發(fā)人員在編寫springboot的時候通常要在本地環(huán)境測試然后再部署到Production環(huán)境,這兩種環(huán)境一般來講是不同的,最主要的區(qū)別就是數(shù)據(jù)源的不同。本文主要介紹了這兩種,感興趣的可以了解一下2019-04-04

