乌云网是个什么网站东莞市手机网站建设

当前位置: 首页 > news >正文

乌云网是个什么网站,东莞市手机网站建设,顺义做网站,西安哪里找做网站公司套餐模块功能开发 1. 新增套餐1.1 需求分析和设计1.1.1产品原型#xff1a;1.1.2接口设计#xff1a;1.1.3数据库设计#xff1a; 1.2 代码开发1.2.1 DishController层1.2.2 DishService接口类1.2.3 DishServiceImpl接口实现类1.2.4 DishMapper层1.2.5 DishMapper.xml1.2.6 … 套餐模块功能开发 1. 新增套餐1.1 需求分析和设计1.1.1产品原型1.1.2接口设计1.1.3数据库设计 1.2 代码开发1.2.1 DishController层1.2.2 DishService接口类1.2.3 DishServiceImpl接口实现类1.2.4 DishMapper层1.2.5 DishMapper.xml1.2.6 SetmealController层1.2.7 SetmealService接口类1.2.8 SetmealServiceImpl接口实现类1.2.9 SetmealMapper层1.2.10 SetmealMapper.xml1.2.11 SetmealDishMapper层1.2.12 SetmealDishMapper.xml 2. 套餐分页查询2.1 需求分析和设计2.1.1产品原型2.1.2接口设计 2.2 代码开发2.2.1 SetmealController层2.2.2 SetmealService接口类2.2.3 SetmealServiceImpl接口实现类2.2.4 SetmealMapper层2.2.5 SetmealMapper.xml 3. 删除套餐3.1 需求分析和设计3.1.1产品原型3.1.2接口设计 3.2 代码实现3.2.1 SetmealController层3.2.2 SetmealService接口类3.2.3 SetmealServiceImpl接口实现类3.2.4 SetmealMapper层3.2.5 SetmealDishMapper 4. 修改套餐4.1 需求分析和设计4.1.1产品原型4.1.2接口设计共涉及到5个接口 4.2 代码实现4.2.1 SetmealController层4.2.2 SetmealService接口类4.2.3 SetmealServiceImpl接口实现类4.2.4 SetmealDishMapper层 5. 起售停售套餐5.1 需求分析和设计5.1.1产品原型5.1.2接口设计 5.2 代码实现5.2.1 SetmealController层5.2.2 SetmealService接口类5.2.3 SetmealServiceImpl接口实现类5.2.4 DishMapper层 1. 新增套餐 1.1 需求分析和设计 1.1.1产品原型 业务规则 套餐名称唯一套餐必须属于某个分类套餐必须包含菜品名称、分类、价格、图片为必填项添加菜品窗口需要根据分类类型来展示菜品新增的套餐默认为停售状态 接口设计共涉及到4个接口 根据类型查询分类已完成根据分类id查询菜品图片上传已完成新增套餐 1.1.2接口设计 1.1.3数据库设计 setmeal表为套餐表用于存储套餐的信息。具体表结构如下 字段名数据类型说明备注idbigint主键自增namevarchar(32)套餐名称唯一category_idbigint分类id逻辑外键pricedecimal(10,2)套餐价格imagevarchar(255)图片路径descriptionvarchar(255)套餐描述statusint售卖状态1起售 0停售create_timedatetime创建时间update_timedatetime最后修改时间create_userbigint创建人idupdate_userbigint最后修改人id setmeal_dish表为套餐菜品关系表用于存储套餐和菜品的关联关系。具体表结构如下 字段名数据类型说明备注idbigint主键自增setmeal_idbigint套餐id逻辑外键dish_idbigint菜品id逻辑外键namevarchar(32)菜品名称冗余字段pricedecimal(10,2)菜品单价冗余字段copiesint菜品份数 1.2 代码开发 1.2.1 DishController层 /*** 根据分类id查询菜品* param categoryId* return / GetMapping(/list) ApiOperation(根据分类id查询菜品) public ResultListDish list(Long categoryId){ListDish list dishService.list(categoryId);return Result.success(list); }1.2.2 DishService接口类 /** 根据分类id查询菜品* param categoryId* return / ListDish list(Long categoryId);1.2.3 DishServiceImpl接口实现类 /** 根据分类id查询菜品* param categoryId* return / public ListDish list(Long categoryId) {Dish dish Dish.builder().categoryId(categoryId).status(StatusConstant.ENABLE).build();return dishMapper.list(dish); }1.2.4 DishMapper层 /** 动态条件查询菜品* param dish* return */ ListDish list(Dish dish);1.2.5 DishMapper.xml select idlist resultTypeDish parameterTypeDishselect * from dishwhereif testname ! nulland name like concat(%,#{name},%)/ifif testcategoryId ! nulland category_id #{categoryId}/ifif teststatus ! nulland status #{status}/if/whereorder by create_time desc /select1.2.6 SetmealController层 /*** 套餐管理/ RestController RequestMapping(/admin/setmeal) Api(tags 套餐相关接口) Slf4j public class SetmealController {Autowiredprivate SetmealService setmealService;/** 新增套餐* param setmealDTO* return/PostMappingApiOperation(新增套餐)public Result save(RequestBody SetmealDTO setmealDTO) {setmealService.saveWithDish(setmealDTO);return Result.success();} }1.2.7 SetmealService接口类 public interface SetmealService {/** 新增套餐同时需要保存套餐和菜品的关联关系* param setmealDTO/void saveWithDish(SetmealDTO setmealDTO); }1.2.8 SetmealServiceImpl接口实现类 /** 套餐业务实现/ Service Slf4j public class SetmealServiceImpl implements SetmealService {Autowiredprivate SetmealMapper setmealMapper;Autowiredprivate SetmealDishMapper setmealDishMapper;Autowiredprivate DishMapper dishMapper;/** 新增套餐同时需要保存套餐和菜品的关联关系* param setmealDTO/Transactionalpublic void saveWithDish(SetmealDTO setmealDTO) {Setmeal setmeal new Setmeal();BeanUtils.copyProperties(setmealDTO, setmeal);//向套餐表插入数据setmealMapper.insert(setmeal);//获取生成的套餐idLong setmealId setmeal.getId();ListSetmealDish setmealDishes setmealDTO.getSetmealDishes();setmealDishes.forEach(setmealDish - {setmealDish.setSetmealId(setmealId);});//保存套餐和菜品的关联关系setmealDishMapper.insertBatch(setmealDishes);} }1.2.9 SetmealMapper层 /** 新增套餐* param setmeal / AutoFill(OperationType.INSERT) void insert(Setmeal setmeal);1.2.10 SetmealMapper.xml insert idinsert parameterTypeSetmeal useGeneratedKeystrue keyPropertyidinsert into setmeal(category_id, name, price, status, description, image, create_time, update_time, create_user, update_user)values (#{categoryId}, #{name}, #{price}, #{status}, #{description}, #{image}, #{createTime}, #{updateTime},#{createUser}, #{updateUser}) /insert1.2.11 SetmealDishMapper层 /** 批量保存套餐和菜品的关联关系* param setmealDishes / void insertBatch(ListSetmealDish setmealDishes);1.2.12 SetmealDishMapper.xml insert idinsertBatch parameterTypelistinsert into setmeal_dish(setmeal_id,dish_id,name,price,copies)valuesforeach collectionsetmealDishes itemsd separator,(#{sd.setmealId},#{sd.dishId},#{sd.name},#{sd.price},#{sd.copies})/foreach /insert2. 套餐分页查询 2.1 需求分析和设计 2.1.1产品原型 业务规则 根据页码进行分页展示每页展示10条数据可以根据需要按照套餐名称、分类、售卖状态进行查询 2.1.2接口设计 2.2 代码开发 2.2.1 SetmealController层 /** 分页查询* param setmealPageQueryDTO* return / GetMapping(/page) ApiOperation(分页查询) public ResultPageResult page(SetmealPageQueryDTO setmealPageQueryDTO) {PageResult pageResult setmealService.pageQuery(setmealPageQueryDTO);return Result.success(pageResult); }2.2.2 SetmealService接口类 /** 分页查询* param setmealPageQueryDTO* return / PageResult pageQuery(SetmealPageQueryDTO setmealPageQueryDTO);2.2.3 SetmealServiceImpl接口实现类 /** 分页查询* param setmealPageQueryDTO* return / public PageResult pageQuery(SetmealPageQueryDTO setmealPageQueryDTO) {int pageNum setmealPageQueryDTO.getPage();int pageSize setmealPageQueryDTO.getPageSize();PageHelper.startPage(pageNum, pageSize);PageSetmealVO page setmealMapper.pageQuery(setmealPageQueryDTO);return new PageResult(page.getTotal(), page.getResult()); }2.2.4 SetmealMapper层 /** 分页查询* param setmealPageQueryDTO* return / PageSetmealVO pageQuery(SetmealPageQueryDTO setmealPageQueryDTO);2.2.5 SetmealMapper.xml select idpageQuery resultTypecom.sky.vo.SetmealVOselects.,c.name categoryNamefromsetmeal sleft joincategory cons.category_id c.idwhereif testname ! nulland s.name like concat(%,#{name},%)/ifif teststatus ! nulland s.status #{status}/ifif testcategoryId ! nulland s.category_id #{categoryId}/if/whereorder by s.create_time desc /select3. 删除套餐 3.1 需求分析和设计 3.1.1产品原型 业务规则 可以一次删除一个套餐也可以批量删除套餐起售中的套餐不能删除 3.1.2接口设计 3.2 代码实现 3.2.1 SetmealController层 /*** 批量删除套餐* param ids* return / DeleteMapping ApiOperation(批量删除套餐) public Result delete(RequestParam ListLong ids){setmealService.deleteBatch(ids);return Result.success(); }3.2.2 SetmealService接口类 /** 批量删除套餐* param ids / void deleteBatch(ListLong ids);3.2.3 SetmealServiceImpl接口实现类 /** 批量删除套餐* param ids / Transactional public void deleteBatch(ListLong ids) {ids.forEach(id - {Setmeal setmeal setmealMapper.getById(id);if(StatusConstant.ENABLE setmeal.getStatus()){//起售中的套餐不能删除throw new DeletionNotAllowedException(MessageConstant.SETMEAL_ON_SALE);}});ids.forEach(setmealId - {//删除套餐表中的数据setmealMapper.deleteById(setmealId);//删除套餐菜品关系表中的数据setmealDishMapper.deleteBySetmealId(setmealId);}); }3.2.4 SetmealMapper层 /** 根据id查询套餐* param id* return */ Select(select * from setmeal where id #{id}) Setmeal getById(Long id);/*** 根据id删除套餐* param setmealId / Delete(delete from setmeal where id #{id}) void deleteById(Long setmealId);3.2.5 SetmealDishMapper /** 根据套餐id删除套餐和菜品的关联关系* param setmealId / Delete(delete from setmeal_dish where setmeal_id #{setmealId}) void deleteBySetmealId(Long setmealId);4. 修改套餐 4.1 需求分析和设计 4.1.1产品原型 4.1.2接口设计共涉及到5个接口 根据id查询套餐根据类型查询分类已完成根据分类id查询菜品已完成图片上传已完成修改套餐 4.2 代码实现 4.2.1 SetmealController层 /** 根据id查询套餐用于修改页面回显数据** param id* return / GetMapping(/{id}) ApiOperation(根据id查询套餐) public ResultSetmealVO getById(PathVariable Long id) {SetmealVO setmealVO setmealService.getByIdWithDish(id);return Result.success(setmealVO); }/** 修改套餐** param setmealDTO* return / PutMapping ApiOperation(修改套餐) public Result update(RequestBody SetmealDTO setmealDTO) {setmealService.update(setmealDTO);return Result.success(); }4.2.2 SetmealService接口类 /** 根据id查询套餐和关联的菜品数据* param id* return / SetmealVO getByIdWithDish(Long id);/** 修改套餐* param setmealDTO / void update(SetmealDTO setmealDTO);4.2.3 SetmealServiceImpl接口实现类 /** 根据id查询套餐和套餐菜品关系** param id* return / public SetmealVO getByIdWithDish(Long id) {Setmeal setmeal setmealMapper.getById(id);ListSetmealDish setmealDishes setmealDishMapper.getBySetmealId(id);SetmealVO setmealVO new SetmealVO();BeanUtils.copyProperties(setmeal, setmealVO);setmealVO.setSetmealDishes(setmealDishes);return setmealVO; }/** 修改套餐** param setmealDTO / Transactional public void update(SetmealDTO setmealDTO) {Setmeal setmeal new Setmeal();BeanUtils.copyProperties(setmealDTO, setmeal);//1、修改套餐表执行updatesetmealMapper.update(setmeal);//套餐idLong setmealId setmealDTO.getId();//2、删除套餐和菜品的关联关系操作setmeal_dish表执行deletesetmealDishMapper.deleteBySetmealId(setmealId);ListSetmealDish setmealDishes setmealDTO.getSetmealDishes();setmealDishes.forEach(setmealDish - {setmealDish.setSetmealId(setmealId);});//3、重新插入套餐和菜品的关联关系操作setmeal_dish表执行insertsetmealDishMapper.insertBatch(setmealDishes); }4.2.4 SetmealDishMapper层 /** 根据套餐id查询套餐和菜品的关联关系* param setmealId* return*/Select(select * from setmeal_dish where setmeal_id #{setmealId})ListSetmealDish getBySetmealId(Long setmealId);5. 起售停售套餐 5.1 需求分析和设计 5.1.1产品原型 业务规则 可以对状态为起售的套餐进行停售操作可以对状态为停售的套餐进行起售操作起售的套餐可以展示在用户端停售的套餐不能展示在用户端起售套餐时如果套餐内包含停售的菜品则不能起售 5.1.2接口设计 5.2 代码实现 5.2.1 SetmealController层 /*** 套餐起售停售* param status* param id* return / PostMapping(/status/{status}) ApiOperation(套餐起售停售) public Result startOrStop(PathVariable Integer status, Long id) {setmealService.startOrStop(status, id);return Result.success(); }5.2.2 SetmealService接口类 /** 套餐起售、停售* param status* param id / void startOrStop(Integer status, Long id);5.2.3 SetmealServiceImpl接口实现类 /** 套餐起售、停售* param status* param id / public void startOrStop(Integer status, Long id) {//起售套餐时判断套餐内是否有停售菜品有停售菜品提示套餐内包含未启售菜品无法启售if(status StatusConstant.ENABLE){//select a. from dish a left join setmeal_dish b on a.id b.dish_id where b.setmeal_id ?ListDish dishList dishMapper.getBySetmealId(id);if(dishList ! null dishList.size() 0){dishList.forEach(dish - {if(StatusConstant.DISABLE dish.getStatus()){throw new SetmealEnableFailedException(MessageConstant.SETMEAL_ENABLE_FAILED);}});}}Setmeal setmeal Setmeal.builder().id(id).status(status).build();setmealMapper.update(setmeal); }5.2.4 DishMapper层 /*** 根据套餐id查询菜品* param setmealId* return / Select(select a. from dish a left join setmeal_dish b on a.id b.dish_id where b.setmeal_id #{setmealId}) ListDish getBySetmealId(Long setmealId);后记 美好的一天到此结束下次继续努力欲知后续请看下回分解写作不易感谢大家的支持