• SpringBoot校园商铺系统Shop模块开发


    //SpringBoot是对SSM框架的进一步改进与封装,随着微服务时代的来临,使用多个子模块组建一个大的应用项目成为时下后端开发的趋势。

    //数据库Dao层 使用Mybatis框架

    @Repository
    public interface ShopDao {
    
        /**
         * 返回查询条件的总数
         * @param shopCondition
         * @return
         */
        int queryShopCount(@Param("shopCondition") Shop shopCondition);
    
        /**
         *
         * 分页查询店铺
         *    输入条件
         *       店铺名(模糊查询)、店铺状态、店铺类别、区域Id、owner
         *
         * @param shopCondition
         * @param rowIndex 第几行
         * @param pageSize 取几行
         * @return
         */
        List<Shop> queryShopList(@Param("shopCondition") Shop shopCondition,
                                 @Param("rowIndex") int rowIndex,
                                 @Param("pageSize") int pageSize);
    
        /***
         * 新增店铺
         * @param shop
         * @return
         */
        int insertSHop(Shop shop);
    
        /***
         * 更新店铺信息
         * @param shop
         * @return
         */
        int updateShop(Shop shop);
    
        /**
         * 店铺信息查询
         * @param shopId
         * @return
         */
        Shop queryByShopId(long shopId);
    }
    

     // 对应的ShopDao.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.swust.emporium.dao.ShopDao">
    	<!--
    		useGeneratedKeys 代表插入结束后是否自动获取数据表的自增主键值
    		keyColumn 代表数据表的主键是哪个属性
    		keyProperty 代表数据表的主键与实体类中哪个属性相对应
    	-->
    	<insert id="insertSHop" useGeneratedKeys="true" keyColumn="shop_id" keyProperty="shopId">
    		insert into
    		tb_shop(owner_id, area_id,shop_category_id, shop_name, shop_desc, shop_addr, phone,
    		shop_img, priority, create_time, last_edit_time, enable_status, advice)
    		values(
    		#{owner.userId},
    		#{area.areaId},
    		#{shopCategory.shopCategoryId},
    		#{shopName},
    		#{shopDesc},
    		#{shopAddr},
    		#{phone},
    		#{shopImg},
    		#{priority},
    		#{createTime},
    		#{lastEditTime},
    		#{enableStatus},
    		#{advice}
    		)
    	</insert>
    
    	<update id="updateShop" parameterType="com.swust.emporium.pojo.Shop">
    		<!--
    		动态SQL生成
    		实体类字段不为空 则更新数据库字段 注意逗号
    		<if test="xxx != null"> xxx_xxx = #{xxx}> </if>
    		-->
    		update tb_shop
    		<set>
    			<if test="shopName != null"> shop_name = #{shopName},</if>
    			<if test="shopDesc != null"> shop_desc = #{shopDesc},</if>
    			<if test="shopAddr != null"> shop_addr = #{shopAddr},</if>
    			<if test="phone != null"> phone = #{phone},</if>
    			<if test="shopImg != null"> shop_img = #{shopImg},</if>
    			<if test="priority != null"> priority = #{priority},</if>
    			<if test="lastEditTime != null"> last_edit_time = #{lastEditTime},</if>
    			<if test="enableStatus != null"> enable_status = #{enableStatus},</if>
    			<if test="advice != null"> advice = #{advice},</if>
    
    			<!--复合类型-->
    			<if test="shopCategory != null"> shop_category_id = #{shopCategory.shopCategoryId},</if>
    			<if test="area != null"> area_id = #{area.areaId}</if>
    		</set>
    		where shop_id = #{shopId}
    	</update>
    
    	<!--定义queryByShopId查询方法的返回值类型-->
    	<resultMap type="com.swust.emporium.pojo.Shop" id ="shopMap">
    		<!--定义主键Id 有且仅有一个-->
    		<id column="shop_id" property="shopId"></id>
    		<!--定义基本数据类型-->
    		<result column="shop_name" property="shopName"></result>
    		<result column="shop_desc" property="shopDesc"></result>
    		<result column="shop_addr" property="shopAddr"></result>
    		<result column="phone" property="phone"></result>
    		<result column="shop_img" property="shopImg"></result>
    		<result column="priority" property="priority"></result>
    		<result column="create_time" property="createTime"></result>
    		<result column="last_edit_time" property="lastEditTime"></result>
    		<result column="enable_status" property="enableStatus"></result>
    		<result column="advice" property="advice"></result>
    		<!--定义复合数据类型-->
    		<association property="area" column="area_id" javaType="com.swust.emporium.pojo.Area">
    			<id column="area_id" property="areaId"></id>
    			<result column="area_name" property="areaName"></result>
    		</association>
    		<association property="owner" column="owner" javaType="com.swust.emporium.pojo.PersonInfo">
    			<id column="user_id" property="userId"></id>
    			<result column="name" property="name"></result>
    		</association>
    		<association property="shopCategory" column="shop_category_id" javaType="com.swust.emporium.pojo.ShopCategory">
    			<id column="shop_category_id" property="shopCategoryId"></id>
    			<result column="shop_category_name" property="shopCategoryName"></result>
    		</association>
    	</resultMap>
    	<select id="queryByShopId" resultMap="shopMap" parameterType="Long">
    		select
    		s.shop_id,
    		s.shop_name,
    		s.shop_desc,
    		s.shop_addr,
    		s.phone,
    		s.shop_img,
    		s.priority,
    		s.create_time,
    		s.last_edit_time,
    		s.enable_status,
    		s.advice,
    		a.area_id,
    		a.area_name,
    		sc.shop_category_id,
    		sc.shop_category_name
    		FROM
    		tb_shop s,
    		tb_area a,
    		tb_shop_category sc
    		where
    		s.area_id = a.area_id
    		and
    		s.shop_category_id = sc.shop_category_id
    		and
    		s.shop_id = #{shopId}
    	</select>
    
    	<!--分页查询功能-->
    
    	<select id="queryShopList" resultMap="shopMap">
    		select
    		s.shop_id,
    		s.shop_name,
    		s.shop_desc,
    		s.shop_addr,
    		s.phone,
    		s.shop_img,
    		s.priority,
    		s.create_time,
    		s.last_edit_time,
    		s.enable_status,
    		s.advice,
    		a.area_id,
    		a.area_name,
    		sc.shop_category_id,
    		sc.shop_category_name
    		FROM
    		tb_shop s,
    		tb_area a,
    		tb_shop_category sc
    		<!--实现条件查询功能-->
    		<where>
    			<!--实现店铺类别条件查询功能-->
    			<if test="shopCondition.shopCategory != null
    			 and
    			 shopCondition.shopCategory.shopCategoryId != null ">
    				and s.shop_category_id = #{shopCondition.shopCategory.shopCategoryId}
    			</if>
    			<!--实现区域信息条件查询功能-->
    			<if test="shopCondition.area != null
    			and
    			shopCondition.area.areaId != null">
    				and s.area_id = #{shopCondition.area.areaId}
    			</if>
    
    			<!---->
    			<if test="shopCondition.shopCategory != null and
    			shopCondition.shopCategory.parent != null and
    			shopCondition.shopCategory.parent.shopCategoryId != null">
    				and s.shop_category_id in(select shop_category_id from tb_shop_category where parent_id = #{shopCondition.shopCategory.parent.shopCategoryId})
    			</if>
    
    			<!--%%%%%实现店铺名称模糊功能%%%%%-->
    			<if test="shopCondition.shopName != null">
    				and s.shop_name like '%${shopCondition.shopName}%'
    			</if>
    			<!--实现状态信息条件查询功能-->
    			<if test="shopCondition.enableStatus">
    				and s.enable_status = #{shopCondition.enableStatus}
    			</if>
    			<if test="shopCondition.owner != null
    			and
    			shopCondition.owner.userId != null">
    				and s.owner_id = #{shopCondition.owner.userId}
    			</if>
    			<!--通过Id连接三张表-->
    			and 
    			s.area_id = a.area_id
    			and
    			s.shop_category_id = sc.shop_category_id
    		</where>
    		<!--按照优先级降序排列-->
    		order by
    		s.priority
    		desc
    		<!--实现分页功能-->
    		limit #{rowIndex},#{pageSize};
    	</select>
    	<!--获取分页查询功能所查询出来的数据总数-->
    	<select id="queryShopCount" resultType="int">
    		select
    		count(1)
    		from
    		tb_shop s,
    		tb_area a,
    		tb_shop_category sc
    		<!--实现条件查询功能-->
    		<where>
    			<!--实现店铺类别条件查询功能-->
    			<if test="shopCondition.shopCategory != null
    			 and
    			 shopCondition.shopCategory.shopCategoryId != null ">
    				and s.shop_category_id = #{shopCondition.shopCategory.shopCategoryId}
    			</if>
    			<!--实现区域信息条件查询功能-->
    			<if test="shopCondition.area != null
    			and
    			shopCondition.area.areaId != null">
    				and s.area_id = #{shopCondition.area.areaId}
    			</if>
    
    			<if test="shopCondition.shopCategory != null and
    			shopCondition.shopCategory.parent != null and
    			shopCondition.shopCategory.parent.shopCategoryId != null">
    				and s.shop_category_id in(select shop_category_id from tb_shop_category where parent_id = #{shopCondition.shopCategory.parent.shopCategoryId})
    			</if>
    
    			<!--%%%%%实现店铺名称模糊功能%%%%%-->
    			<if test="shopCondition.shopName != null">
    				and s.shop_name like '%${shopCondition.shopName}%'
    			</if>
    			<!--实现状态信息条件查询功能-->
    			<if test="shopCondition.enableStatus">
    				and s.enable_status = #{shopCondition.enableStatus}
    			</if>
    			<if test="shopCondition.owner != null
    			and
    			shopCondition.owner.userId != null">
    				and s.owner_id = #{shopCondition.owner.userId}
    			</if>
    			<!--通过Id连接三张表-->
    			and
    			s.area_id = a.area_id
    			and
    			s.shop_category_id = sc.shop_category_id
    		</where>
    	</select>
    </mapper>
    

    //业务逻辑层

    //为了更加符合实际项目的内容需求,在原始的包+impl实现类的实际基础上,引入enum枚举类存储店铺的相关操作信息,使用dto下的ShopExecution对原始信息的包装,并设计专属于Shop操作的异常类。

    // 枚举类

    public enum ShopStateEnum {
    
        CHECK(0,"审核中"),
        OFFLINE(-1,"非法店铺"),
        SUCCESS(1, "操作成功"),
        PASS(2, "通过认证"),
        INNER_ERROR(-1001, "内部系统错误"),
        NULL_SHOPID(-1002,"shop为空"),
        NULL_SHOP(-1003,"shop信息为空");
    
        private int state;
        private String stateInfo;
    
        /**
         * 枚举构造方法
         * @param state
         * @param stateInfo
         */
        private ShopStateEnum(int state, String stateInfo){
            this.state = state;
            this.stateInfo = stateInfo;
        }
    
        /***
         * 根据传入的state值返回对应的数据
         * @param state
         * @return
         */
        public static ShopStateEnum stateEnum(int state){
            for (ShopStateEnum stateEnum : ShopStateEnum.values()){
                if (stateEnum.getState() == state){
                    return stateEnum;
                }
            }
            return null;
        }
    
    
        public String getStateInfo(){
            return this.stateInfo;
        }
    
        public int getState(){
            return this.state;
        }
    }
    

    //店铺操作表示符合操作信息描述

    @Getter
    @Setter
    public class ShopExecution {
        //结果状态
        private int state;
        //状态描述
        private String stateInfo;
        //店铺数量
        private int count;
        //操作的Shop 增删改
        private Shop shop;
        //shop列表 查询
        private List<Shop> shopList;
    
        public ShopExecution(){}
    
        // 店铺操作失败的时候使用的构造器
        public ShopExecution(ShopStateEnum shopStateEnum){
            this.state = shopStateEnum.getState();
            this.stateInfo = shopStateEnum.getStateInfo();
        }
        //  店铺操作成功的时候使用构的造器
        public ShopExecution(ShopStateEnum shopStateEnum, Shop shop){
            this.state = shopStateEnum.getState();
            this.stateInfo = shopStateEnum.getStateInfo();
            this.shop = shop;
        }
        //  店铺操作成功的时候使用的构造器
        public ShopExecution(ShopStateEnum shopStateEnum, List<Shop> shopList){
            this.state = shopStateEnum.getState();
            this.stateInfo = shopStateEnum.getStateInfo();
            this.shopList = shopList;
        }
    }
    

    // 店铺操作异常类 生成随机序列化ID需要在类名上使用Alt+Enter快捷键

    public class ShopOperationException extends RuntimeException{
    
        //生成随机序列化ID
        private static final long serialVersionUID = -2293712388036514485L;
    
        public ShopOperationException(String msg){
            super(msg);
        }
    
    }
    

    // web层

    // web层相对于SSM框架所对应的controller层 这里是实现前端与后端的连接层 我采用的admin和management对不同的访问请求进行处理,admin主要处理html页面跳转请求,management主要负责shopoperation.js文件传递来的AJAX业务访问请求

    @Controller
    @RequestMapping("/shopadmin")
    public class ShopManagementController {
    
    
        @Autowired
        private ShopService shopService;
    
        @Autowired
        private ShopCategoryService shopCategoryService;
    
        @Autowired
        private AreaService areaService;
    
        /***
         * 获取初始信息
         * @return
         */
        @RequestMapping(value = "/getshopinitinfo", method = RequestMethod.GET)
        @ResponseBody
        public Map<String, Object> getShopInitInfo(HttpServletRequest request){
            Map<String, Object> modelMap = new HashMap<>();
    
    
            List<ShopCategory> shopCategoryLists = new ArrayList<>();
            List<Area> areaLists = new ArrayList<>();
    
            try {
                ShopCategoryExecution sce = shopCategoryService.getShopCategoryList(new ShopCategory());
                shopCategoryLists = sce.getShopCategoryList();
                areaLists = areaService.getAreaList();
                modelMap.put("shopCategoryList", shopCategoryLists);
                modelMap.put("areaList", areaLists);
                modelMap.put("success", true);
    
            }catch (Exception e){
                modelMap.put("success", false);
                modelMap.put("errMsg", e.getMessage());
                return modelMap;
            }
            return modelMap;
        }
    
        /**
         * 注册店铺
         * @param request
         * @return
         */
        @RequestMapping(value = "/registershop", method = RequestMethod.POST)
        @ResponseBody //将返回的map自动转换为Json格式
        private Map<String, Object> registerShop(HttpServletRequest request){
            Map<String,Object> modelMap = new HashMap<>();
    
            // 校验验证码是否一致
            if (CodeUtils.checkVerifyCode(request)){
                modelMap.put("success", false);
                modelMap.put("errMsg", "校验码不能为空或输入错误...");
                return modelMap;
            }
    
            // 接收并转换响应参数 店铺信息 图片信息
            String shopStr = HttpServletRequestUtils.getString(request, "shopStr");
    
            ObjectMapper mapper = new ObjectMapper();
            Shop shop = null;
            try {
                 shop = mapper.readValue(shopStr, Shop.class);
            } catch (IOException e) {
                modelMap.put("success",false);
                modelMap.put("errMsg",e.getMessage());
                return modelMap;
            }
    
            // 接收图片信息
            CommonsMultipartFile shopImg = null;
            // 文件上传解析器
            CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(
                    request.getSession().getServletContext()
            );
            // 是否存在上传的文件流信息
            if (commonsMultipartResolver.isMultipart(request)){
                MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
                shopImg = (CommonsMultipartFile)multipartHttpServletRequest.getFile("shopImg");
            }else {
                modelMap.put("success",false);
                modelMap.put("errMsg","上传图片不能为空");
                return modelMap;
            }
            // 注册店铺
            if (shop != null && shopImg != null){
    //            PersonInfo owner = new PersonInfo();
                PersonInfo owner = (PersonInfo) request.getSession().getAttribute("user"); // 从session域中获取店铺信息
                //  Session TODO ...
    //            owner.setUserId(1L);
                shop.setOwner(owner);
    
                String fileName = shopImg.getOriginalFilename();
                ShopExecution se = null;
    
                try {
                    ImageHolder imageHolder = new ImageHolder();
                    imageHolder.setImage(shopImg.getInputStream());
                    imageHolder.setImageName(fileName);
    
                    se = shopService.addShop(shop, imageHolder);
                } catch (IOException e) {
                    modelMap.put("success",false);
                    modelMap.put("errMsg", e.getMessage());
                    return modelMap;
                }
    
                // 判断店铺是否创建成功 同时将店铺信息更新到session中
                if (se.getState() == ShopStateEnum.CHECK.getState()){
                    modelMap.put("success",true);
                    // 将店铺保存到session域内
                        // unchecked 去除警告信息
                    @SuppressWarnings("unchecked")
                    List<Shop> shopList = (List<Shop>) request.getSession().getAttribute("shopList");
                    //是否是第一次创建店铺
                    if (shopList.size() == 0 || shopList == null){
                        shopList = new ArrayList<>();
                    }
                    shopList.add(se.getShop());
                    request.getSession().setAttribute("shopList", shopList);
                    return modelMap;
                }else {
                    modelMap.put("success",false);
                    modelMap.put("errMsg", se.getStateInfo());
                    return modelMap;
                }
            }else {
                modelMap.put("success",false);
                modelMap.put("errMsg","请输入店铺信息");
                return modelMap;
            }
    
        }
    
    //    /**
    //     * 将InputStream转换成file对象
    //     * 该方法已废弃
    //     * @param inputStream
    //     * @param file
    //     */
    //    private static void InputStramToFile(InputStream inputStream, File file){
    //        FileOutputStream os = null;
    //        try {
    //            os = new FileOutputStream(file);
    //            int bytesRead = 0;
    //            // 读取数据的buffer缓冲区
    //            byte[] buffer = new byte[1024];
    //            // 从输入流读取一些字节数,并将它们存储到缓冲区buffer中。
    //            while ((bytesRead = inputStream.read(buffer)) != -1){
    //                    // 需要理解
    //                os.write(buffer,0,bytesRead);
    //            }
    //        } catch (Exception e) {
    //            throw new RuntimeException("调用InputStramToFile方法流解析异常 ==> " + e.getMessage());
    //        } finally {
    //            if (os != null){
    //                try {
    //                    os.close();
    //                } catch (IOException e) {
    //                    throw new RuntimeException("调用InputStramToFile方法关闭输出流异常 ==> " + e.getMessage());
    //                }
    //            }
    //            if (inputStream != null){
    //                try {
    //                    inputStream.close();
    //                } catch (IOException e) {
    //                    throw new RuntimeException("调用InputStramToFile方法关闭输入流异常 ==> " + e.getMessage());
    //                }
    //            }
    //        }
    //    }
    
        /**
         * 基于传入的shopId查询店铺信息
         * @param request
         * @return
         */
        @RequestMapping(value = "/getshopbyid", method = RequestMethod.GET)
        @ResponseBody
        private Map<String, Object> getShopById(HttpServletRequest request){
            Map<String, Object> modelMap = new HashMap<>();
    
            Shop currentShop = (Shop) request.getSession().getAttribute("currentShop");
            Long id = currentShop.getShopId();
            System.out.println(id);
    
            long shopId = HttpServletRequestUtils.getLong(request, "shopId");
            if (shopId > -1){
               try {
                   Shop shop = shopService.getByShopId(shopId);
                   List<Area> list = areaService.getAreaList();
    
                   modelMap.put("shop", shop);
                   modelMap.put("areaList", list);
                   modelMap.put("success", true);
                   return modelMap;
               }catch (Exception e){
                   modelMap.put("success", false);
                   modelMap.put("errMsg", e.getMessage());
                   return modelMap;
               }
    
    
    
            }else {
                modelMap.put("success",false);
                modelMap.put("errMsg","店铺信息查询错误");
                return modelMap;
            }
        }
    
        /**
         * 更新店铺信息
         * @param request
         * @return
         */
        @RequestMapping(value = "/modifyshop", method = RequestMethod.POST)
        @ResponseBody
        private Map<String, Object> modifyShop(HttpServletRequest request){
            Map<String, Object> modelMap = new HashMap<>();
            // 校验码判断
            if (CodeUtils.checkVerifyCode(request)){
                modelMap.put("success", false);
                modelMap.put("errMsg", "请输入正确的验证码");
                return modelMap;
            }
            // 格式化shop对象
            ObjectMapper mapper = new ObjectMapper();
            // 获取基于Ajax请求传递过来的店铺信息参数
            String shopStr = HttpServletRequestUtils.getString(request, "shopStr");
            Shop shop = null;
            try {
                shop = mapper.readValue(shopStr, Shop.class);
            } catch (IOException e) {
                modelMap.put("success", false);
                modelMap.put("errMsg", e.getMessage());
                return modelMap;
            }
            //判断是否具有图片上传信息流
            HttpServletRequest httpServletRequest;
            CommonsMultipartResolver commonsMultipartResolver = new
                    CommonsMultipartResolver(request.getSession().getServletContext());
            CommonsMultipartFile shopImg = null;
            if (commonsMultipartResolver.isMultipart(request)){
                MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
                 shopImg = (CommonsMultipartFile)multipartHttpServletRequest.getFile("shopImg");
            }else {
                modelMap.put("success", false);
                modelMap.put("errMsg", "图片信息解析错误");
                return modelMap;
            }
    
            ShopExecution shopExecution = null;
            // 更新信息
            if (shop != null && shop.getShopId() != null){
                if (shopImg != null){
                    InputStream shopImgInputStream = null;
                    try {
                        shopImgInputStream = shopImg.getInputStream();
                        String fileName = shopImg.getOriginalFilename();
                        ImageHolder imageHolder = new ImageHolder();
                        imageHolder.setImageName(fileName);
                        imageHolder.setImage(shopImgInputStream);
                        shopExecution = shopService.modifyShop(shop, imageHolder);
    
                    } catch (IOException e) {
                        modelMap.put("success", false);
                        modelMap.put("errMsg", e.getMessage());
                        return modelMap;
                    }
                }else {
                    // 上传图片信息为空 选择只更新其余信息
                   try {
                       shopExecution = shopService.modifyShop(shop, null) ;
                   }catch (Exception e){
                       modelMap.put("success", false);
                       modelMap.put("errMsg", e.getMessage());
                       return modelMap;
                   }
                }
            }
            // 判读店铺是否更新成功
            if (shopExecution != null){
                int state = shopExecution.getState();
                String stateInfo = shopExecution.getStateInfo();
                if (state == ShopStateEnum.SUCCESS.getState()){
                    modelMap.put("success", true);
                    return modelMap;
                }else {
                    modelMap.put("success", false);
                    modelMap.put("errMsg","状态码返回异常");
                    return modelMap;
                }
            }else {
                modelMap.put("success", false);
                modelMap.put("errMsg","店铺更新异常");
                return modelMap;
            }
        }
    
        /***
         * 店铺信息分页查询模块功能开发
         * controller
         * @param request
         * @return
         */
        @RequestMapping(value = "/getshoplist", method = RequestMethod.GET)
        @ResponseBody
        public Map<String, Object> getShopList(HttpServletRequest request){
            Map<String, Object> modelMap = new HashMap<>();
    
            // TODO...这里有bug userLogin和personInfo的Id必须一致
            // session中获取登陆信息
            UserLogin userLogin = (UserLogin) request.getSession().getAttribute("userLogin");
            int uid = userLogin.getUid();
            PersonInfo user = new PersonInfo();
            user.setUserId(new Long(uid));
            request.getSession().setAttribute("user", user);
            user = (PersonInfo) request.getSession().getAttribute("user");
            Long userId = user.getUserId();
    
            List<Shop> shopList = new ArrayList<>();
    
            ShopExecution se = null;
            try {
                Shop shopCondition = new Shop();
                shopCondition.setOwner(user);
                se = shopService.getShopList(shopCondition, 0, 100);
                modelMap.put("success", true);
                modelMap.put("shopList", se.getShopList());
                // 将shopList保存到session中
                request.getSession().setAttribute("shopList",se.getShopList());
                modelMap.put("user",user);
                return modelMap;
            }catch (Exception e){
                modelMap.put("success", false);
                modelMap.put("errMsg", e.getMessage());
                return modelMap;
            }
        }
    
        /***
         * 获取店铺管理相关信息
         * @param request
         * @return
         */
        @RequestMapping(value = "getshopmanagementinfo", method = RequestMethod.GET)
        @ResponseBody
        private Map<String, Object> getShopManagementInfo(HttpServletRequest request){
            Map<String, Object> modelMap = new HashMap<>();
            long shopId = HttpServletRequestUtils.getLong(request, "shopId");
            if (shopId <= 0){
                // 尝试从session中获取店铺Id信息
                Object currenShopObj = request.getSession().getAttribute("currentShop");
                if (currenShopObj == null){
                    // 重定向回店铺页面
                    modelMap.put("redirect", true);
                    // 访问Html页面
                    modelMap.put("url", "/emporium/shopadmin/shoplist");
                }else {
                    Shop currenShop = (Shop) currenShopObj;
                    modelMap.put("redirect", false);
                    modelMap.put("shopId", currenShop.getShopId());
                }
            }else {
                Shop current = new Shop();
                current.setShopId(shopId);
                request.getSession().setAttribute("currentShop", current);
                modelMap.put("redirect", false);
            }
            return modelMap;
        }
    }
    
    @Controller
    @RequestMapping(value = "shopadmin", method = RequestMethod.GET)
    public class ShopAdminController {
    
        @RequestMapping(value = "/shopoperation")
        public String shopOperation(){
            return "shop/shopoperation";
        }
    
        @RequestMapping(value = "/shoplist")
        public String shopList(){
            return "shop/shoplist";
        }
    
        @RequestMapping(value = "/shopmanagement")
        public String shopManagement(){
            return "shop/shopmanagement";
        }
        
    }
    

    // 前端主要使用Html+Css渲染页面,为快速开发,缩短研发周期,本项目使用 Sui Mobile进行开发设计,借助原始的模板引擎获取数据

    // 对于前端所展示需要的数据,主要在页面加载时调用相应的javas文件获取后台数据

    //对于get请求,我使用$.getJSON方法通过访问特定的URL获取数据,对于post请求选择使用Ajax请求获取对应的数据

    // 获取初始信息填充到前端界面
    // 当点击提交时通过Ajax将请求转发到后台
    
    $(function (){
        // 解析get请求的url上的shopId
        var shopId = getQueryString('shopId');
        // 如果shopId为空则证明是注册店铺否则代表修改店铺信息
        var isEdit = shopId ? true : false;
    
        // 完成信息初始化 localhost:8888 + URL
        var initUrl = '/emporium/shopadmin/getshopinitinfo';
        // 注册信息
        var registerShopUrl = '/emporium/shopadmin/registershop';
    
        // 根据店铺Id获取店铺信息
        var shopInfoUrl = '/emporium/shopadmin/getshopbyid?shopId=' + shopId;
    
        // 更新店铺信息
        var editShopUrl = '/emporium/shopadmin/modifyshop';
    
        if (!isEdit){
            getShopInitInfo();
        }else {
            getShopInfo(shopId);
        }
    
        function getShopInfo(shopId){
            $.getJSON(shopInfoUrl,function (data){
                if (data.success){
                    var shop = data.shop;
                    // 根据查询到的值给html页面内控件赋值
                    $('#shop-name').val(shop.shopName);
                    $('#shop-addr').val(shop.shopAddr);
                    $('#shop-phone').val(shop.phone);
                    $('#shop-desc').val(shop.shopDesc);
                    // 将shopCategory的内容以option形式进行保存
                    var shopCategory = '<option data-id="'
                        + shop.shopCategory.shopCategoryId + '"selected>'
                        + shop.shopCategory.shopCategoryName + '</option>';
                    // 获取下拉列表
                    var tempAreahtml = '';
                    data.areaList.map(function (item, index){
                        tempAreahtml += '<option data-id="' + item.areaId
                            + '">' + item.areaName + '</option>';
                    });
                    $('#shop-category').html(shopCategory);//控件绑定属性
                    // 设置店铺信息无法进行修改
                    $('#shop-category').attr('disabled','disabled');
                    $('#area').html(tempAreahtml);
                    // 默认选择
                    $('#area option[data-id="' + shop.area.areaId + "']").attr('selected',"selected");
                }
            });
        }
    
        function getShopInitInfo(){
            $.getJSON(initUrl, function(data){
                if (data.success){
                    var tempHtml = '';
                    var tempAreaHtml = '';
                    data.shopCategoryList.map(function (item,index){
                        tempHtml += '<option data-id="' + item.shopCategoryId + '">'
                            +item.shopCategoryName + '</option>>';
                    });
                    data.areaList.map(function (item,index){
                        tempAreaHtml += '<option data-id="' + item.areaId + '">'
                        +item.areaName + '</option>';
                    });
                    // 将信息发送到html文件
                    $('#shop-category').html(tempHtml);
                    $('#area').html(tempAreaHtml);
                }
            });
        }
    
        // 点击提交时 进行响应
        $('#submit').click(function (){
            var shop = {};
            if (isEdit){
                shop.shopId = shopId;
            }
            shop.shopName = $('#shop-name').val();
            shop.shopAddr = $('#shop-addr').val();
            shop.phone = $('#shop-phone').val();
            shop.shopDesc = $('#shop-desc').val();
    
            // 从列表中获取信息
            shop.shopCategory = {
                shopCategoryId:$('#shop-category').find('option').not(function (){
                    return !this.selected;
                }).data('id')
            };
    
            shop.area = {
                areaId:$('#area').find('option').not(function (){
                    return !this.selected;
                }).data('id')
            };
    
            var shopImg = $('#shop-img')[0].files[0];
    
            var formData = new FormData();
            formData.append('shopImg', shopImg);
            formData.append('shopStr', JSON.stringify(shop));
    
            // 验证码
            var  verifyCodeActual = $('#j_captcha').val();
            if (!verifyCodeActual){
                $.toast('请输入验证码!');
                return ;
            }
            formData.append('verifyCodeActual', verifyCodeActual);
            $.ajax({
                url:isEdit?editShopUrl:registerShopUrl,
                type:'POST',
                data:formData,
                contentType:false,
                processData:false,
                cache:false,
                success:function (data){
                    if (data.success){
                        alert('success!');
                        $.toast('提交成功 !');
                    }else {
                        // alert('error!');
                        $.toast('提交失败' + data.errMsg);
                    }
                    // 每次执行ok后更换验证码
                    $('#captcha_img').click();
                }
            })
        })
    })
    

     

  • 相关阅读:
    彻底清除Linux centos minerd木马 实战  跟redis的设置有关
    linux 弹出光驱失败
    teamviewer "TeamViewer Daemon is not running
    linux 如何查找io的进程
    网站开启https后加密协议始终是TLS1.0如何配置成TLS1.2?
    查看openssl的版本
    https单向认证和双向认证
    pem转换成der
    locate: can not open `/var/lib/mlocate/mlocate.db': No such file or directory
    mysql 有报错  ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists
  • 原文地址:https://www.cnblogs.com/walxt/p/14322910.html
Copyright © 2020-2023  润新知