Parcourir la source

添加图片后缀;新增删除方法

v-qinpengfei il y a 5 ans
Parent
commit
6268a7802f

+ 24 - 0
src/main/java/com/poteviohealth/cgp/serve/config/FacadeConfig.java

@@ -0,0 +1,24 @@
+package com.poteviohealth.cgp.serve.config;
+
+import com.poteviohealth.cgp.common.facade.image.ImageService;
+import com.poteviohealth.cgp.common.facade.image.impl.LocalImageService;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+/**
+ * 登陆过滤器
+ * @author Qin
+ */
+@Configuration
+@Import(com.poteviohealth.cgp.common.facade.lock.impl.RedissonClientConfig.class)
+public class FacadeConfig {
+    /**
+     * ImageService
+     * @return ImageService
+     */
+    @Bean
+    public ImageService registerImageService() {
+        return new LocalImageService();
+    }
+}

+ 83 - 0
src/main/java/com/poteviohealth/cgp/serve/controller/web/ServeTagWebController.java

@@ -0,0 +1,83 @@
+package com.poteviohealth.cgp.serve.controller.web;
+
+
+import com.poteviohealth.cgp.common.controller.BaseWebController;
+import com.poteviohealth.cgp.common.facade.log.OperateType;
+import com.poteviohealth.cgp.common.facade.log.OperationLog;
+import com.poteviohealth.cgp.common.integrated.LongParams;
+import com.poteviohealth.cgp.common.model.PageQuery;
+import com.poteviohealth.cgp.common.model.VaultsResponse;
+import com.poteviohealth.cgp.serve.model.invo.web.ServeTagSaveDTO;
+import com.poteviohealth.cgp.serve.service.IServeTagService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 服务标签 前端控制器
+ * @author Qin
+ */
+@Controller
+@RequestMapping("/serve/web/serve-tag")
+@Api(tags={"WEB端-服务标签相关接口"})
+public class ServeTagWebController extends BaseWebController {
+
+    @Autowired
+    private IServeTagService serveTagService;
+
+    @ApiOperation(value="列表查询")
+    @RequestMapping(value = "/list", method = RequestMethod.POST)
+    @ResponseBody
+    public VaultsResponse list(TagPageDTO tagPageDTO){
+        return serveTagService.webList(tagPageDTO);
+    }
+
+    @PostMapping("saveTag")
+    @ApiOperation(httpMethod = "POST", value = "新增服务标签")
+    @OperationLog(type= OperateType.ADD,description = "新增服务标签",printParams = false)
+    @ResponseBody
+    public VaultsResponse addTag(ServeTagSaveDTO saveDTO, MultipartFile file) {
+        return serveTagService.saveServeTag(saveDTO,file);
+    }
+
+    @RequestMapping(value = "/updateTag", method = RequestMethod.POST)
+    @ApiOperation(value = "编辑服务标签")
+    @OperationLog(type = OperateType.UPDATE, description ="编辑服务标签")
+    @ResponseBody
+    public VaultsResponse updateTag(ServeTagSaveDTO saveDTO, MultipartFile file) {
+        return serveTagService.updateServeTag(saveDTO,file);
+    }
+
+    @RequestMapping(value = "/deleteTag", method = RequestMethod.POST)
+    @ApiOperation(value = "删除标签")
+    @ResponseBody
+    @OperationLog(type = OperateType.DELETE, description ="删除标签")
+    public VaultsResponse deleteTag(@RequestBody LongParams longParams) {
+        return serveTagService.deleteServeTag(longParams.getId());
+    }
+
+    @RequestMapping(value = "/getTag", method = RequestMethod.POST)
+    @ApiOperation(value = "获取服务标签")
+    @ResponseBody
+    public VaultsResponse getTag(@RequestBody LongParams longParams) {
+        return serveTagService.getServeTag(longParams.getId());
+    }
+
+    @RequestMapping(value = "/changeTag", method = RequestMethod.POST)
+    @ApiOperation(value = "服务标签状态")
+    @ResponseBody
+    public VaultsResponse changeTag(@RequestBody ServeTagSaveDTO saveDTO) {
+        return serveTagService.changeServeTag(saveDTO);
+    }
+
+    @RequestMapping(value = "/checkName", method = RequestMethod.POST)
+    @ApiOperation(value = "服务标签名称唯一检查")
+    @ResponseBody
+    public VaultsResponse checkName(@RequestBody ServeTagSaveDTO saveDTO) {
+        return VaultsResponse.success(serveTagService.checkName(saveDTO));
+    }
+
+}

+ 24 - 0
src/main/java/com/poteviohealth/cgp/serve/controller/web/TagPageDTO.java

@@ -0,0 +1,24 @@
+package com.poteviohealth.cgp.serve.controller.web;
+
+import com.poteviohealth.cgp.common.model.PageQuery;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @PackageName:com.poteviohealth.cgp.serve.controller.web
+ * @className:TagPageDTO
+ * @Description:
+ * @author: QIN
+ * @date: 2021/1/11 14:03
+ */
+@ApiModel("标签分页查询条件")
+@Data
+public class TagPageDTO extends PageQuery {
+
+    @ApiModelProperty(value = "名称", name = "name")
+    private String name;
+
+    @ApiModelProperty(value="1.启用 0.停用",name = "enable")
+    private Integer enable;
+}

+ 8 - 1
src/main/java/com/poteviohealth/cgp/serve/database/DataSourceConfig.java

@@ -48,7 +48,14 @@ public class DataSourceConfig {
         dataSourceMap.put(DatabaseConfig.DATABASE_NAME, databaseConfig.createDataSource());
         dataSourceMap.put(DatabaseConfig.DATABASE_NAME, databaseConfig.createDataSource());
 
 
         Collection<TableRuleConfiguration> tableRuleConfigs = new LinkedList();
         Collection<TableRuleConfiguration> tableRuleConfigs = new LinkedList();
-        tableRuleConfigs.add(new TableRuleConfiguration("i_integral_detail"));
+        tableRuleConfigs.add(new TableRuleConfiguration("s_serve_tag"));
+        tableRuleConfigs.add(new TableRuleConfiguration("s_serve_type"));
+        tableRuleConfigs.add(new TableRuleConfiguration("s_serve_sku"));
+        tableRuleConfigs.add(new TableRuleConfiguration("s_serve_detail"));
+        tableRuleConfigs.add(new TableRuleConfiguration("s_serve_evaluate"));
+        tableRuleConfigs.add(new TableRuleConfiguration("s_serve_order"));
+        tableRuleConfigs.add(new TableRuleConfiguration("s_serve_order_detail"));
+        tableRuleConfigs.add(new TableRuleConfiguration("s_serve_order_operate"));
 
 
         ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
         ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
         shardingRuleConfig.setTableRuleConfigs(tableRuleConfigs);
         shardingRuleConfig.setTableRuleConfigs(tableRuleConfigs);

+ 13 - 0
src/main/java/com/poteviohealth/cgp/serve/mapper/ServeTagMapper.java

@@ -0,0 +1,13 @@
+package com.poteviohealth.cgp.serve.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.poteviohealth.cgp.serve.model.ServeTag;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 服务标签 Mapper 接口
+ * @author Qin
+ */
+@Mapper
+public interface ServeTagMapper extends BaseMapper<ServeTag> {
+}

+ 36 - 0
src/main/java/com/poteviohealth/cgp/serve/mapstruct/ServeTagConverter.java

@@ -0,0 +1,36 @@
+package com.poteviohealth.cgp.serve.mapstruct;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.poteviohealth.cgp.common.model.CommonPage;
+import com.poteviohealth.cgp.serve.model.ServeTag;
+import com.poteviohealth.cgp.serve.model.invo.web.ServeTagSaveDTO;
+import com.poteviohealth.cgp.serve.model.outvo.web.ServeTagWebOutDTO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 服务标签 转换类
+ * @author Qin
+ */
+@Mapper
+public interface ServeTagConverter {
+    ServeTagConverter INSTANCE = Mappers.getMapper(ServeTagConverter.class);
+
+    /**
+     * 映射
+     * @param afterSale
+     * @return
+     */
+    ServeTagWebOutDTO model2WebDTO(ServeTag afterSale);
+
+    ServeTag dto2model(ServeTagSaveDTO saveDTO);
+
+    /**
+     * 映射
+     * @param afterSale
+     * @return
+     */
+    CommonPage<ServeTagWebOutDTO> model2WebDTO(IPage<ServeTag> afterSale);
+
+
+}

+ 61 - 0
src/main/java/com/poteviohealth/cgp/serve/model/ServeTag.java

@@ -0,0 +1,61 @@
+package com.poteviohealth.cgp.serve.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.poteviohealth.cgp.common.model.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import org.apache.ibatis.type.Alias;
+
+import java.util.Date;
+
+/**
+ * 服务标签
+ * @author Qin
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@TableName("s_serve_tag")
+@Alias("s_serve_tag")
+public class ServeTag extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 逻辑主键
+     */
+    private Long serveTagId;
+
+    /**
+     * 运营商id
+     */
+    private Integer operatorId;
+
+    /**
+     * 供应商id
+     */
+    private Integer supplierId;
+
+    /**
+     * 名称
+     */
+    private String name;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 1.启用 0.停用
+     */
+    private Integer enable;
+
+    private String pic;
+
+}

+ 29 - 0
src/main/java/com/poteviohealth/cgp/serve/model/invo/web/ServeTagSaveDTO.java

@@ -0,0 +1,29 @@
+package com.poteviohealth.cgp.serve.model.invo.web;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 服务标签
+ * @author Qin
+ */
+@Data
+@ApiModel(value="服务标签保存入参")
+public class ServeTagSaveDTO {
+    @ApiModelProperty(value="服务标签逻辑主键",example = "修改时,必填")
+    private Long serveTagId;
+    @NotNull
+    @ApiModelProperty(value="名称",example = "标签名称,必填", required = true)
+    private String name;
+
+    @ApiModelProperty(value="描述",example = "描述内容")
+    private String description;
+
+    @ApiModelProperty(value="启用/停用",example = "1.启用 0.停用;启用停用时必填")
+    private Integer enable;
+}

+ 30 - 0
src/main/java/com/poteviohealth/cgp/serve/model/outvo/web/ServeTagWebOutDTO.java

@@ -0,0 +1,30 @@
+package com.poteviohealth.cgp.serve.model.outvo.web;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 服务标签 DTO
+ * @author Qin
+ */
+
+@Data
+@ApiModel(value="服务标签列表查询出参")
+public class ServeTagWebOutDTO {
+
+    @ApiModelProperty(value="服务标签id",example = "3")
+    private Long serveTagId;
+
+    @ApiModelProperty(value="名称",example = "标签名称")
+    private String name;
+
+    @ApiModelProperty(value="秒杀",example = "描述内容")
+    private String description;
+
+    @ApiModelProperty(value="启用状态",example = "1.启用 0.停用")
+    private Integer enable;
+
+}

+ 76 - 0
src/main/java/com/poteviohealth/cgp/serve/service/IServeTagService.java

@@ -0,0 +1,76 @@
+package com.poteviohealth.cgp.serve.service;
+
+import com.poteviohealth.cgp.common.model.CommonPage;
+import com.poteviohealth.cgp.common.model.PageQuery;
+import com.poteviohealth.cgp.common.model.VaultsResponse;
+import com.poteviohealth.cgp.common.service.IBaseService;
+import com.poteviohealth.cgp.serve.controller.web.TagPageDTO;
+import com.poteviohealth.cgp.serve.model.ServeTag;
+import com.poteviohealth.cgp.serve.model.invo.web.ServeTagSaveDTO;
+import com.poteviohealth.cgp.serve.model.outvo.web.ServeTagWebOutDTO;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 服务标签 服务类
+ * @author Qin
+ */
+public interface IServeTagService extends IBaseService<ServeTag> {
+
+    /**
+     * 服务标签列表
+     *
+     * @param tagPageDTO
+     * @return
+     */
+    VaultsResponse<CommonPage<ServeTagWebOutDTO>> webList(TagPageDTO tagPageDTO);
+
+    /**
+     * 保存
+     *
+     * @param saveDTO
+     * @return
+     */
+     VaultsResponse<String> saveServeTag(ServeTagSaveDTO saveDTO, MultipartFile file);
+
+
+    /**
+     * 修改
+     *
+     * @param saveDTO
+     * @return
+     */
+    VaultsResponse updateServeTag(ServeTagSaveDTO saveDTO,MultipartFile file);
+
+    /**
+     * 获取对象
+     *
+     * @param id
+     * @return
+     */
+    VaultsResponse getServeTag(Long id);
+
+    /**
+     * 删除
+     *
+     * @param id
+     * @return
+     */
+    VaultsResponse deleteServeTag(Long id);
+
+    /**
+     * 状态变更
+     *
+     * @param saveDTO
+     * @return
+     */
+    VaultsResponse changeServeTag(ServeTagSaveDTO saveDTO);
+
+    /**
+     * 名称唯一性检查
+     *
+     * @param saveDTO
+     * @return
+     */
+    boolean checkName(ServeTagSaveDTO saveDTO);
+
+}

+ 180 - 0
src/main/java/com/poteviohealth/cgp/serve/service/impl/ServeTagServiceImpl.java

@@ -0,0 +1,180 @@
+package com.poteviohealth.cgp.serve.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.poteviohealth.cgp.common.facade.image.ImageResponse;
+import com.poteviohealth.cgp.common.facade.image.ImageService;
+import com.poteviohealth.cgp.common.filter.TokenContext;
+import com.poteviohealth.cgp.common.model.CommonPage;
+import com.poteviohealth.cgp.common.model.VaultsResponse;
+import com.poteviohealth.cgp.common.service.impl.BaseServiceImpl;
+import com.poteviohealth.cgp.common.utils.CgpTool;
+import com.poteviohealth.cgp.serve.controller.web.TagPageDTO;
+import com.poteviohealth.cgp.serve.mapper.ServeTagMapper;
+import com.poteviohealth.cgp.serve.mapstruct.ServeTagConverter;
+import com.poteviohealth.cgp.serve.model.ServeTag;
+import com.poteviohealth.cgp.serve.model.invo.web.ServeTagSaveDTO;
+import com.poteviohealth.cgp.serve.model.outvo.web.ServeTagWebOutDTO;
+import com.poteviohealth.cgp.serve.service.IServeTagService;
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * 服务标签 服务实现类
+ * @author Qin
+ */
+@Service
+@Log4j2
+public class ServeTagServiceImpl extends BaseServiceImpl<ServeTagMapper, ServeTag> implements IServeTagService {
+
+    @Resource
+    private ImageService imageService;
+
+    @Override
+    public VaultsResponse<CommonPage<ServeTagWebOutDTO>> webList(TagPageDTO tagPageDTO) {
+        Page<ServeTag> page = new Page<>(tagPageDTO.getPageNum(), tagPageDTO.getPageSize());
+        QueryWrapper<ServeTag> queryWrapper = new QueryWrapper<>();
+        Integer supplierId = TokenContext.curSupplierId();
+        if(supplierId != null ){
+            queryWrapper.eq("supplier_id",supplierId);
+        }
+        if(StringUtils.isNotBlank(tagPageDTO.getName())){
+            queryWrapper.like("name",tagPageDTO.getName());
+        }
+        if(null != tagPageDTO.getEnable()){
+            queryWrapper.eq("enable",tagPageDTO.getEnable());
+        }
+        queryWrapper.orderByAsc("created_date");
+        return VaultsResponse.success(ServeTagConverter.INSTANCE.model2WebDTO(super.page(page, queryWrapper)));
+    }
+
+    @Override
+    public VaultsResponse<String> saveServeTag(ServeTagSaveDTO serveTagSaveDTO,MultipartFile file) {
+        ServeTag tag = ServeTagConverter.INSTANCE.dto2model(serveTagSaveDTO);
+        if(checkName(serveTagSaveDTO)){
+            return VaultsResponse.failed("标签名称已存在");
+        }
+        tag.setServeTagId(CgpTool.generateKey());
+        tag.setSupplierId(TokenContext.curSupplierId());
+        tag.setEnable(1);
+        String pic = uploadImg(file);
+        if(StringUtils.isNotBlank(pic)){
+            tag.setPic(pic);
+        }else{
+            return VaultsResponse.failed("图片上传失败");
+        }
+        try {
+            save(tag);
+            return VaultsResponse.success();
+        } catch (Exception e) {
+            log.error("saveServeTag error", e);
+            return VaultsResponse.failed(e.getMessage());
+        }
+    }
+
+    @Override
+    public VaultsResponse updateServeTag(ServeTagSaveDTO saveDTO,MultipartFile file) {
+        ServeTag tag = ServeTagConverter.INSTANCE.dto2model(saveDTO);
+        if (tag.getServeTagId() == null) {
+            return VaultsResponse.failed("标签ID不能为空");
+        }else if(checkName(saveDTO)){
+            return VaultsResponse.failed("标签名称已存在");
+        }else if(tag.getEnable() == null){
+            tag.setEnable(1);
+        }else if(StringUtils.isNotBlank(file.getOriginalFilename())){
+            String pic = uploadImg(file);
+            tag.setPic(pic);
+        }
+        try {
+            super.updateEntityByEqBeanId(tag, "serve_tag_id", tag.getServeTagId());
+            return VaultsResponse.success();
+        } catch (Exception e) {
+            log.error("updateServeTag error", e);
+            return VaultsResponse.failed(e.getMessage());
+        }
+    }
+
+    @Override
+    public VaultsResponse getServeTag(Long id) {
+        try {
+            ServeTag tag = super.getEntityByBeanId("serve_tag_id", id);
+            if(tag == null){
+                return VaultsResponse.failed("未获取到对象信息");
+            }
+            return VaultsResponse.success(ServeTagConverter.INSTANCE.model2WebDTO(tag));
+        } catch (Exception e) {
+            log.error("getServeTag error", e);
+            return VaultsResponse.failed(e.getMessage());
+        }
+    }
+
+    @Override
+    public VaultsResponse deleteServeTag(Long id) {
+        try {
+            ServeTag tag = super.getEntityByBeanId("serve_tag_id", id);
+            if(tag == null){
+                return VaultsResponse.failed("未获取到对象信息");
+            }else if(tag.getEnable().equals(1L)){
+                return VaultsResponse.failed("启用状态下不可删除");
+            }
+            super.removeEntityByEqBeanId("serve_tag_id", id);
+            return VaultsResponse.success();
+        } catch (Exception e) {
+            log.error("getServeTag error", e);
+            return VaultsResponse.failed(e.getMessage());
+        }
+    }
+
+    @Override
+    public VaultsResponse changeServeTag(ServeTagSaveDTO saveDTO) {
+        try {
+            if (saveDTO.getServeTagId() == null) {
+                return VaultsResponse.failed("标签ID不能为空");
+            }else if(saveDTO.getEnable() == null){
+                return VaultsResponse.failed("标签状态不能为空");
+            }else if(saveDTO.getEnable() == 0){
+                //TODO 停用:已关联服务自动取消该标签
+            }
+            ServeTag tag = new ServeTag();
+            tag.setEnable(saveDTO.getEnable());
+            super.updateEntityByEqBeanId(tag,"serve_tag_id", saveDTO.getServeTagId());
+            return VaultsResponse.success();
+        } catch (Exception e) {
+            log.error("getServeTag error", e);
+            return VaultsResponse.failed(e.getMessage());
+        }
+    }
+
+    @Override
+    public boolean checkName(ServeTagSaveDTO saveDTO) {
+        QueryWrapper<ServeTag> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("name",saveDTO.getName());
+        if (saveDTO.getServeTagId()!=null) {
+            queryWrapper.ne("serve_tag_id", saveDTO.getServeTagId());
+        }
+        List<ServeTag> list = super.list(queryWrapper);
+        return !list.isEmpty();
+    }
+
+
+    private String uploadImg(MultipartFile file){
+
+        ImageResponse response;
+        try {
+            response = imageService.uploadFile(file.getBytes());
+            if (ImageResponse.ID_SUCCESS.equals(response.getId())) {
+                return response.getMsg();
+            } else {
+                return null;
+            }
+        } catch (IOException e) {
+            return null;
+        }
+    }
+}

+ 4 - 4
src/main/resources/develop/application.yml

@@ -24,9 +24,9 @@ spring:
     type: com.alibaba.druid.pool.DruidDataSource
     type: com.alibaba.druid.pool.DruidDataSource
     druid:
     druid:
       database:
       database:
-        jdbc-url: jdbc:mysql://101.201.117.73:3306/cgp_serve?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
-        username: cgp
-        password: jd0709
+        jdbc-url: jdbc:mysql://101.201.117.83:3306/cgp_serve?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
+        username: jkyl
+        password: jkyl2014
         filter: stat
         filter: stat
         max-active: 100
         max-active: 100
         initial-size: 5
         initial-size: 5
@@ -69,7 +69,7 @@ logging:
   config: classpath:logback-spring.xml
   config: classpath:logback-spring.xml
 common:
 common:
   localImage:
   localImage:
-    dir: e:/temp/image/
+    dir: d:/temp/image/
     uri: http://localhost:8080/image/
     uri: http://localhost:8080/image/
 #wechat:
 #wechat:
 #  api:
 #  api:

+ 4 - 0
src/main/resources/mapper/serve/ServeTagMapper.xml

@@ -0,0 +1,4 @@
+<?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.poteviohealth.cgp.serve.mapper.ServeTagMapper">
+</mapper>

+ 3 - 4
src/main/resources/serve-sql.yml

@@ -8,7 +8,8 @@ s_serve_tag_1 : "CREATE TABLE `s_serve_tag_$` (
                          `supplier_id` int(11) DEFAULT NULL COMMENT '供应商id',
                          `supplier_id` int(11) DEFAULT NULL COMMENT '供应商id',
                          `enable` int(1) NOT NULL DEFAULT '0' COMMENT '1.启用 0.停用',
                          `enable` int(1) NOT NULL DEFAULT '0' COMMENT '1.启用 0.停用',
                          `name` varchar(100) NOT NULL COMMENT '名称',
                          `name` varchar(100) NOT NULL COMMENT '名称',
-                         `description` varchar(200) NOT NULL COMMENT '描述',
+                         `description` varchar(200) NULL DEFAULT NULL  COMMENT '描述',
+                         `pic` varchar(255)  DEFAULT NULL COMMENT '图片',
                          PRIMARY KEY (`id`),
                          PRIMARY KEY (`id`),
                          KEY `idx_serve_tag_id` (`serve_tag_id`) USING BTREE,
                          KEY `idx_serve_tag_id` (`serve_tag_id`) USING BTREE,
                          KEY `idx_operator_id` (`operator_id`) USING BTREE,
                          KEY `idx_operator_id` (`operator_id`) USING BTREE,
@@ -228,8 +229,6 @@ s_serve_order_operate_1: "CREATE TABLE `s_serve_order_operate_$`  (
             PRIMARY KEY (`id`) USING BTREE,
             PRIMARY KEY (`id`) USING BTREE,
             INDEX `idx_serve_order_operate_operate_id`(`serve_order_operate_id`) USING BTREE,
             INDEX `idx_serve_order_operate_operate_id`(`serve_order_operate_id`) USING BTREE,
             INDEX `idx_serve_order_operate_id`(`operator_id`) USING BTREE,
             INDEX `idx_serve_order_operate_id`(`operator_id`) USING BTREE,
-            INDEX `idx_serve_order_operate_user_id`(`user_id`) USING BTREE,
-            INDEX `idx_serve_order_operate_serve_order_id`(`serve_order_id`) USING BTREE,
-            INDEX `idx_serve_order_operate_role_id`(`role_id`) USING BTREE
+            INDEX `idx_serve_order_operate_serve_order_id`(`serve_order_id`) USING BTREE
         ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '服务工单操作表' ROW_FORMAT = Compact"
         ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '服务工单操作表' ROW_FORMAT = Compact"