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

企业官方网站建设如何最近新闻事件

企业官方网站建设如何,最近新闻事件,庆阳logo设计,湖南人文科技学院学费公共字段自动填充 不足 比起瑞吉外卖中的用自定义元数据类型mybatisplus的实现,这里使用的是aop切面实现,会麻烦许多,建议升级为mp。 定义好数据库操作类型 sky-common中已经定义好,OperationType。 自定义注解 AutoFill co…

公共字段自动填充

不足

比起瑞吉外卖中的用自定义元数据类型+mybatisplus的实现,这里使用的是aop切面实现,会麻烦许多,建议升级为mp。

定义好数据库操作类型

sky-common中已经定义好,OperationType。

自定义注解 AutoFill

com.sky.annotation.AutoFill

/*** 自定义注解,用于标识某个方法需要进行功能字段自动填充处理*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoFill {//数据库操作类型:UPDATE INSERTOperationType value();
}

自定义切面 AutoFillAspect

com.sky.aspect.AutoFillAspect


@Slf4j
public class AutoFillAspect {/*** 切入点*/@Pointcut("execution(* com.sky.mapper.*.*(..)) && @annotation(com.sky.annotation.AutoFill)")public void autoFillPointCut(){}/*** 前置通知,在通知中进行公共字段的赋值*/@Before("autoFillPointCut()")public void autoFill(JoinPoint joinPoint){//可先进行调试,是否能进入该方法 提前在mapper方法添加AutoFill注解log.info("开始进行公共字段自动填充...");//步骤一:获取到当前被拦截的方法上的数据库操作类型MethodSignature signature = (MethodSignature) joinPoint.getSignature();//获得方法签名对象AutoFill autoFill = signature.getMethod().getAnnotation(AutoFill.class);//获得方法上的注解对象OperationType operationType = autoFill.value();//获得数据库操作类型//步骤二:获取到当前被拦截的方法的参数,即实体对象Object[] args = joinPoint.getArgs();if(args == null || args.length == 0){return;}Object entity = args[0];//步骤三:准备赋值的数据LocalDateTime now = LocalDateTime.now();Long currentid = BaseContext.getCurrentId();/*步骤四:根据当前不同的操作类型,为对应的属性通过反射来赋值。之所以不直接通过set等方法赋值,是因为获取到的实体类对象可能不一样。譬如这里该项目就可能为员工或者菜品使用set方法需要强转为某个实体类对象。*/if(operationType == OperationType.INSERT){try{Method setCreateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_TIME, LocalDateTime.class);Method setCreateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_USER, Long.class);Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class);Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class);//通过反射为对象属性赋值setCreateTime.invoke(entity,now);setCreateUser.invoke(entity,currentid);setUpdateTime.invoke(entity,now);setUpdateUser.invoke(entity,currentid);} catch (Exception e) {e.printStackTrace();}}else if(operationType == OperationType.UPDATE) {//为2个公共字段赋值try {Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class);Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class);//通过反射为对象属性赋值setUpdateTime.invoke(entity, now);setUpdateUser.invoke(entity, currentid);} catch (Exception e) {e.printStackTrace();}}}
}

在mapper上增加自定义注解autofill

com.sky.mapper.CategoryMapper

    @AutoFill(value = OperationType.INSERT)void insert(Category category);@AutoFill(value = OperationType.UPDATE)void update(Category category);

com.sky.mapper.EmployeeMapper

 	@AutoFill(value = OperationType.INSERT)void insert(Employee employee);@AutoFill(value = OperationType.UPDATE)void update(Employee employee);

删除/注释掉业务层原先为公共字段赋值的语句

com.sky.service.impl.CategoryServiceImpl

/*** 分类业务层*/
@Service
@Slf4j
public class CategoryServiceImpl implements CategoryService {@Autowiredprivate CategoryMapper categoryMapper;@Autowiredprivate DishMapper dishMapper;@Autowiredprivate SetmealMapper setmealMapper;/*** 新增分类* @param categoryDTO*/public void save(CategoryDTO categoryDTO) {Category category = new Category();//属性拷贝BeanUtils.copyProperties(categoryDTO, category);//分类状态默认为禁用状态0category.setStatus(StatusConstant.DISABLE);//设置创建时间、修改时间、创建人、修改人
//        category.setCreateTime(LocalDateTime.now());
//        category.setUpdateTime(LocalDateTime.now());
//        category.setCreateUser(BaseContext.getCurrentId());
//        category.setUpdateUser(BaseContext.getCurrentId());categoryMapper.insert(category);}/*** 分页查询* @param categoryPageQueryDTO* @return*/public PageResult pageQuery(CategoryPageQueryDTO categoryPageQueryDTO) {PageHelper.startPage(categoryPageQueryDTO.getPage(),categoryPageQueryDTO.getPageSize());//下一条sql进行分页,自动加入limit关键字分页Page<Category> page = categoryMapper.pageQuery(categoryPageQueryDTO);return new PageResult(page.getTotal(), page.getResult());}/*** 根据id删除分类* @param id*/public void deleteById(Long id) {//查询当前分类是否关联了菜品,如果关联了就抛出业务异常Integer count = dishMapper.countByCategoryId(id);if(count > 0){//当前分类下有菜品,不能删除throw new DeletionNotAllowedException(MessageConstant.CATEGORY_BE_RELATED_BY_DISH);}//查询当前分类是否关联了套餐,如果关联了就抛出业务异常count = setmealMapper.countByCategoryId(id);if(count > 0){//当前分类下有菜品,不能删除throw new DeletionNotAllowedException(MessageConstant.CATEGORY_BE_RELATED_BY_SETMEAL);}//删除分类数据categoryMapper.deleteById(id);}/*** 修改分类* @param categoryDTO*/public void update(CategoryDTO categoryDTO) {Category category = new Category();BeanUtils.copyProperties(categoryDTO,category);//        //设置修改时间、修改人
//        category.setUpdateTime(LocalDateTime.now());
//        category.setUpdateUser(BaseContext.getCurrentId());categoryMapper.update(category);}/*** 启用、禁用分类* @param status* @param id*/public void startOrStop(Integer status, Long id) {Category category = Category.builder().id(id).status(status)
//                .updateTime(LocalDateTime.now())
//                .updateUser(BaseContext.getCurrentId()).build();categoryMapper.update(category);}/*** 根据类型查询分类* @param type* @return*/public List<Category> list(Integer type) {return categoryMapper.list(type);}
}

com.sky.service.impl.EmployeeServiceImpl

@Service
public class EmployeeServiceImpl implements EmployeeService {@Autowiredprivate EmployeeMapper employeeMapper;/*** 员工登录** @param employeeLoginDTO* @return*/public Employee login(EmployeeLoginDTO employeeLoginDTO) {String username = employeeLoginDTO.getUsername();String password = employeeLoginDTO.getPassword();//1、根据用户名查询数据库中的数据Employee employee = employeeMapper.getByUsername(username);//2、处理各种异常情况(用户名不存在、密码不对、账号被锁定)if (employee == null) {//账号不存在throw new AccountNotFoundException(MessageConstant.ACCOUNT_NOT_FOUND);}//密码比对//后端md5加密password = DigestUtils.md5DigestAsHex(password.getBytes());if (!password.equals(employee.getPassword())) {//密码错误throw new PasswordErrorException(MessageConstant.PASSWORD_ERROR);}if (employee.getStatus() == StatusConstant.DISABLE) {//账号被锁定throw new AccountLockedException(MessageConstant.ACCOUNT_LOCKED);}System.out.println("password"+password);System.out.println("username"+username);//3、返回实体对象return employee;}/*** 员工登录** @param employeeDTO* @return*/public void save(EmployeeDTO employeeDTO) {Employee employee = new Employee();BeanUtils.copyProperties(employeeDTO, employee);employee.setStatus(StatusConstant.ENABLE);employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes()));//        employee.setCreateTime(LocalDateTime.now());
//        employee.setUpdateTime(LocalDateTime.now());
//
//        employee.setCreateUser(BaseContext.getCurrentId());
//        employee.setUpdateUser(BaseContext.getCurrentId());employeeMapper.insert(employee);}/*** 分页查询* @param employeePageQueryDTO* @return*/public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());Page<Employee> page = employeeMapper.pageQuery(employeePageQueryDTO);long total = page.getTotal();List<Employee> records = page.getResult();return new PageResult(total, records);}/*** 启用禁用员工账号*/public void startOrStop(Integer status, Long id){Employee employee = Employee.builder().id(id).status(status).build();employeeMapper.update(employee);}/*** 根据id查员工* @param id* @return*/public Employee getById(Long id){Employee employee = employeeMapper.getById(id);employee.setPassword("****");return employee;}/*** 编辑员工* @param employeeDTO*/public void update(EmployeeDTO employeeDTO){Employee employee = new Employee();BeanUtils.copyProperties(employeeDTO, employee);
//        employee.setUpdateTime(LocalDateTime.now());
//        employee.setUpdateUser(BaseContext.getCurrentId());employeeMapper.update(employee);}
}

新增菜品

接口设计

不懂为什么要设计成逻辑外键,而不是物理外键。

业务规则:

  • 菜品名称必须是唯一的
  • 菜品必须属于某个分类下,不能单独存在
  • 新增菜品时可以根据情况选择菜品的口味
  • 每个菜品必须对应一张图片

oss(两种方式)

看https://www.bilibili.com/video/BV1m84y1w7Tb的p147-p149就可以了。

在这里插入图片描述

在这里插入图片描述
bucket名称是唯一性的,所以很有可能出现“该名称已存在或已被其他占用”的情况,换个名字就好了。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


文章转载自:
http://maximite.jqLx.cn
http://uranous.jqLx.cn
http://sleazy.jqLx.cn
http://governable.jqLx.cn
http://lobstering.jqLx.cn
http://intercollegiate.jqLx.cn
http://mineworker.jqLx.cn
http://supernate.jqLx.cn
http://antiworld.jqLx.cn
http://redemptorist.jqLx.cn
http://technicolor.jqLx.cn
http://spoonbill.jqLx.cn
http://cladogram.jqLx.cn
http://biotron.jqLx.cn
http://playgame.jqLx.cn
http://apsidal.jqLx.cn
http://sindolor.jqLx.cn
http://sag.jqLx.cn
http://pococurantism.jqLx.cn
http://skippingly.jqLx.cn
http://godown.jqLx.cn
http://easternize.jqLx.cn
http://duplicability.jqLx.cn
http://frugal.jqLx.cn
http://autogamous.jqLx.cn
http://petunse.jqLx.cn
http://settled.jqLx.cn
http://dahomeyan.jqLx.cn
http://canalize.jqLx.cn
http://concordia.jqLx.cn
http://skegger.jqLx.cn
http://merchandising.jqLx.cn
http://vendue.jqLx.cn
http://ultraviolation.jqLx.cn
http://zenaida.jqLx.cn
http://baps.jqLx.cn
http://uttermost.jqLx.cn
http://scenicruiser.jqLx.cn
http://procurement.jqLx.cn
http://familism.jqLx.cn
http://namh.jqLx.cn
http://sensed.jqLx.cn
http://annex.jqLx.cn
http://paleobotany.jqLx.cn
http://breviary.jqLx.cn
http://flew.jqLx.cn
http://kookiness.jqLx.cn
http://procuratorial.jqLx.cn
http://cinquefoil.jqLx.cn
http://hippophagistical.jqLx.cn
http://pommel.jqLx.cn
http://unmoor.jqLx.cn
http://nummulary.jqLx.cn
http://wideband.jqLx.cn
http://uncharming.jqLx.cn
http://talking.jqLx.cn
http://aposteriori.jqLx.cn
http://erin.jqLx.cn
http://rabassaire.jqLx.cn
http://schutzstaffel.jqLx.cn
http://haematoma.jqLx.cn
http://burgee.jqLx.cn
http://audibility.jqLx.cn
http://tenpence.jqLx.cn
http://lovebug.jqLx.cn
http://acidophilus.jqLx.cn
http://astrometry.jqLx.cn
http://tableau.jqLx.cn
http://davey.jqLx.cn
http://gromwell.jqLx.cn
http://cartopper.jqLx.cn
http://collegian.jqLx.cn
http://feudatorial.jqLx.cn
http://drunkard.jqLx.cn
http://paint.jqLx.cn
http://cataphracted.jqLx.cn
http://pinboard.jqLx.cn
http://superacid.jqLx.cn
http://zoomorphic.jqLx.cn
http://normalise.jqLx.cn
http://herculean.jqLx.cn
http://arenicolous.jqLx.cn
http://antenuptial.jqLx.cn
http://nightlong.jqLx.cn
http://rink.jqLx.cn
http://illegitimate.jqLx.cn
http://computerite.jqLx.cn
http://protestatory.jqLx.cn
http://pedate.jqLx.cn
http://jitterbug.jqLx.cn
http://landscaping.jqLx.cn
http://gynecopathy.jqLx.cn
http://scoffer.jqLx.cn
http://multiprograming.jqLx.cn
http://custodial.jqLx.cn
http://itacolumite.jqLx.cn
http://loiteringly.jqLx.cn
http://fuoro.jqLx.cn
http://aciduria.jqLx.cn
http://alabastron.jqLx.cn
http://www.hrbkazy.com/news/71120.html

相关文章:

  • wordpress切换回老的编辑器seo优化公司信
  • 京广桥做网站的公司营销网络是啥意思
  • net源码的网站建设步骤搜索引擎内部优化
  • 安徽省建设造价管理协会网站网页制作培训教程
  • 做爰视频免费观看网站中国站长
  • 东莞seo建站优化工具关键词营销推广
  • 网站设计发展趋势近10天的时政新闻
  • 建设智能家居网站SWOT分析简述优化搜索引擎的方法
  • 怎么做导航网站今日财经新闻
  • 河南省建设招投标网站今日网站收录查询
  • seo外包大型公司宁波seo网站推广软件
  • 新乡做网站推广吉安seo招聘
  • 太原推广型网站建设如何做网页设计
  • 专业网站制作的地方南宁网络推广平台
  • 西安市住房和城乡建设委员会网站高端网站建设制作
  • 手工制作地球仪的方法 材料太原百度搜索排名优化
  • 品牌网站建设专家互动营销案例分析
  • 火星建站免费wap自助建站网络营销教材电子版
  • 做皮革网站专业网站推广优化
  • 30几岁的人想学做网站哪家竞价托管专业
  • 网站如何留住用户百度资讯
  • 网站网站制作400多少钱百度网站流量查询
  • 网站月流量5g盘搜搜
  • 小百姓这个网站谁做的seo神器
  • 十堰响应式网站建设易思企业网站管理系统
  • 如何建设风水网站网络推广费用
  • 电子商务网站开发平台的网络操作系统今日热点头条
  • elision豪华级创意企业中文wordpress主题整站推广产品的方法
  • 手机做无水印短视频网站抖音seo排名
  • 大连模板网站制作兰州怎么提高网站的排名