Java开源生鲜电商平台-销售管理设计与架构(源码可下载)

Java开源生鲜电商平台-销售管理设计与架构(源码可下载)

说明:在Java开源生鲜电商平台中,销售人员我们称为跟餐饮店老板沟通与下载APP的一类地推人员。(所谓地推指的就是一个一个上门拜访。)

由于销售人员有以下几类特性:

1. 时间随意性,他们并不类似技术或者性质人员,需要天天呆在办公室,他们是需要去外面,时间上具有随意性。

2. 行动随意性 ,他们的行动过于随意,每天也不用来打卡,每天就是按照计划去拜访客户,然后推销生鲜电商APP,让客户来进行下单,那么行为很随意,站在公司的角度

我们是没办法控制这种行为,但是我们也很想知道目前销售人员进度 在哪里来了,遇到了什么问题,一般如何解决。

3.  内容随意性,每天早上开会,晚上复盘,很多的时候我们会问今天你们拜访了那些客户,遇到了那些问题,如何解决的,经验进行分享,但是很多时候我们其实不知道内容是真还是假的,因为销售的嘴皮太能说了。

那么如此多的问题,作为技术上,我们应该如何帮助公司呢?对此需要一个管理的销售APP。

1. 技术上设计,会设计到以下几点;

2. 销售人员本身的管理。

CREATE TABLE `sales` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘自动增加ID‘,
  `phone` varchar(32) DEFAULT NULL COMMENT ‘手机号码‘,
  `password` varchar(32) DEFAULT NULL COMMENT ‘md5加密‘,
  `true_name` varchar(16) DEFAULT NULL,
  `status` int(11) DEFAULT NULL COMMENT ‘1为在职,-1为离职‘,
  `create_time` datetime DEFAULT NULL COMMENT ‘创建时间‘,
  `last_update_time` datetime DEFAULT NULL COMMENT ‘更新时间‘,
  `level` int(11) DEFAULT NULL COMMENT ‘类型1总监 2主管 3职员‘,
  `experience` decimal(12,2) DEFAULT NULL,
  `parent_id` bigint(20) DEFAULT NULL COMMENT ‘直属上级‘,
  PRIMARY KEY (`id`),
  KEY `unique_phone` (`phone`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 COMMENT=‘销售人员基本信息‘;

补充说明;任何人员的管理都会存在一个管理人员的权限问题,最高领导者应该具有查看所有的内容的权限。

 3. 销售每天需要写日报,因此销售日报

CREATE TABLE `sales_daily` (
  `sd_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主键ID‘,
  `sale_id` bigint(20) DEFAULT NULL COMMENT ‘销售人员ID‘,
  `sd_date` date DEFAULT NULL COMMENT ‘工作日期‘,
  `task1` decimal(12,2) DEFAULT NULL COMMENT ‘销售任务‘,
  `task2` int(11) DEFAULT NULL COMMENT ‘日拜访量‘,
  `sd_street` varchar(256) DEFAULT NULL COMMENT ‘拜访街道‘,
  `sd_summary` varchar(512) DEFAULT NULL COMMENT ‘工作总结‘,
  `sd_time` datetime DEFAULT NULL COMMENT ‘提交时间‘,
  `look_status` int(11) DEFAULT NULL COMMENT ‘查阅状态(0未读 1已读)‘,
  `look_sale_id` bigint(20) DEFAULT NULL COMMENT ‘查阅人‘,
  `look_time` datetime DEFAULT NULL COMMENT ‘查阅时间‘,
  `look_reply` varchar(512) DEFAULT NULL COMMENT ‘主管回复‘,
  PRIMARY KEY (`sd_id`)
) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=utf8 COMMENT=‘销售日报‘;

说明:主管以及以上的人员都需要进行日报是审批与处理,根据日报反应出来的问题,进行及时的处理。

4. 每天要做什么,怎么做,你需要有一个计划进行。

CREATE TABLE `sales_plan` (
  `sp_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘自增ID‘,
  `sp_type` tinyint(4) DEFAULT NULL COMMENT ‘类型(1区域 2销售)‘,
  `sp_fmon` varchar(10) DEFAULT NULL COMMENT ‘月份‘,
  `sale_id` bigint(20) DEFAULT NULL COMMENT ‘销售人员ID‘,
  `area_id` bigint(20) DEFAULT NULL COMMENT ‘区域ID‘,
  `goal_amt` decimal(12,2) DEFAULT NULL COMMENT ‘销售总目标‘,
  `online_amt` decimal(12,2) DEFAULT NULL COMMENT ‘线上目标‘,
  `green_amt` decimal(12,2) DEFAULT NULL COMMENT ‘蔬菜销售‘,
  `register_num` int(11) DEFAULT NULL COMMENT ‘注册量‘,
  `create_user_id` bigint(20) DEFAULT NULL COMMENT ‘创建人‘,
  `create_time` datetime DEFAULT NULL COMMENT ‘创建时间‘,
  PRIMARY KEY (`sp_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT=‘销售计划‘;

5. 销售过程中,肯定会出现一些其他的特殊情况,这种情况需要销售报备.

CREATE TABLE `sales_reported` (
  `sr_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主键ID‘,
  `sale_id` bigint(20) DEFAULT NULL COMMENT ‘销售ID‘,
  `sr_type` tinyint(4) DEFAULT NULL COMMENT ‘报备类型(1缺填日报 2其他)‘,
  `sr_desc` varchar(512) DEFAULT NULL COMMENT ‘报备原因‘,
  `sr_time` datetime DEFAULT NULL COMMENT ‘报备时间‘,
  `look_sale_id` bigint(20) DEFAULT NULL COMMENT ‘查阅人ID‘,
  `look_status` tinyint(4) DEFAULT NULL COMMENT ‘查阅状态‘,
  `look_time` datetime DEFAULT NULL COMMENT ‘查阅时间‘,
  `look_reply` varchar(512) DEFAULT NULL COMMENT ‘查阅回复‘,
  PRIMARY KEY (`sr_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘销售报备‘;

6. 对于一个销售人员而言,你每天需要做的事情很多都是陌生拜访,那么拜访,你总应该有个记录吧,无论是否拜访成功

    这里是有一个成功率的问题的。不是每个都成功的。

   

CREATE TABLE `sales_visit` (
  `sv_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主键ID‘,
  `buyer_id` bigint(20) DEFAULT NULL COMMENT ‘商家ID‘,
  `sale_id` bigint(20) DEFAULT NULL COMMENT ‘销售人员ID‘,
  `sv_way` tinyint(4) DEFAULT NULL COMMENT ‘拜访方式(1预约 2其他)‘,
  `sv_type` tinyint(4) DEFAULT NULL COMMENT ‘拜访类型(1上门 2电话)‘,
  `sv_logo` varchar(128) DEFAULT NULL COMMENT ‘门头照‘,
  `sv_address` varchar(256) DEFAULT NULL COMMENT ‘拜访地址‘,
  `sv_status` tinyint(4) DEFAULT NULL COMMENT ‘拜访状态(0未 1已)‘,
  `sv_date` date DEFAULT NULL COMMENT ‘预约日期‘,
  `sv_time` datetime DEFAULT NULL COMMENT ‘拜访时间‘,
  `sv_remark` varchar(512) DEFAULT NULL COMMENT ‘拜访感想‘,
  PRIMARY KEY (`sv_id`)
) ENGINE=InnoDB AUTO_INCREMENT=508 DEFAULT CHARSET=utf8 COMMENT=‘销售拜访‘;

7,销售不管有日报还有周报,总结与分析这周的所有问题,成功的也好,失败的也好,需要分享与记录。

CREATE TABLE `sales_weekly` (
  `sw_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主键‘,
  `sale_id` bigint(20) DEFAULT NULL COMMENT ‘销售ID‘,
  `sw_fmon` varchar(10) DEFAULT NULL COMMENT ‘月份‘,
  `sw_range` varchar(128) DEFAULT NULL COMMENT ‘时间范围‘,
  `sw_summary` varchar(1024) DEFAULT NULL COMMENT ‘本周总结‘,
  `sw_plan` varchar(1024) DEFAULT NULL COMMENT ‘下周计划‘,
  `need_help` varchar(1024) DEFAULT NULL COMMENT ‘需求帮助‘,
  `sw_time` datetime DEFAULT NULL COMMENT ‘填写时间‘,
  `look_status` tinyint(4) DEFAULT NULL COMMENT ‘查看状态‘,
  `look_sale_id` bigint(20) DEFAULT NULL COMMENT ‘查看人‘,
  `look_time` datetime DEFAULT NULL COMMENT ‘查看时间‘,
  `look_reply` varchar(1024) DEFAULT NULL COMMENT ‘查看回复‘,
  PRIMARY KEY (`sw_id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COMMENT=‘销售周报‘;

8,最终根据业务的形态构建了系统架构,同时也设计的数据库,最终业务核心代码如下:

日报的核心代码:

/**
 */
@RestController
@RequestMapping("/sales")
public class DaliyController extends BaseController {

    private static final Logger logger = LoggerFactory.getLogger(DaliyController.class);

    @Autowired
    private DaliyService daliyService;

    /**
     * 销售人员日报列表
     */
    @RequestMapping(value = "/getSalesDaliyList", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult getSalesDaliyList(HttpServletRequest request, HttpServletResponse response,Long saleId) {
        try {
            List<DaliyListVo> biList = daliyService.getSalesDaliyList(saleId);
            return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", biList);
        } catch (Exception ex) {
            logger.error("[DaliyController][getSalesDaliyList] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

    /**
     * 销售人员日报详情
     */
    @RequestMapping(value = "/getSalesDaliyInfo", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult getSalesDaliyInfo(HttpServletRequest request, HttpServletResponse response,Long saleId,String sdDate) {
        try {
            DaliyVo daliyVo = daliyService.getSalesDaliyInfo(saleId, sdDate);
            return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", daliyVo);
        } catch (Exception ex) {
            logger.error("[DaliyController][getSalesDaliyInfo] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

    /**
     * 添加工作计划
     */
    @RequestMapping(value = "/insertSalesDaliy", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult insertSalesDaliy(HttpServletRequest request, HttpServletResponse response,@RequestBody SalesDaliy salesDaliy) {
        try {
            if(salesDaliy == null){
                return new JsonResult(JsonResultCode.FAILURE, "参数有误!", "");
            }
            int result = daliyService.insertSalesDaliy(salesDaliy);
            if(result > 0){
                return new JsonResult(JsonResultCode.SUCCESS, "添加信息成功", "");
            }else{
                return new JsonResult(JsonResultCode.FAILURE, "添加信息失败", "");
            }
        } catch (Exception ex) {
            logger.error("[DaliyController][insertSalesDaliy] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

    /**
     * 修改工作计划
     */
    @RequestMapping(value = "/updateSalesDaliy", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult updateSalesDaliy(HttpServletRequest request, HttpServletResponse response,@RequestBody SalesDaliy salesDaliy) {
        try {
            if(salesDaliy == null){
                return new JsonResult(JsonResultCode.FAILURE, "参数有误!", "");
            }
            if(salesDaliy.getSdId() == null){
                return new JsonResult(JsonResultCode.FAILURE, "参数有误!", "");
            }
            int result = daliyService.updateSalesDaliy(salesDaliy);
            if(result > 0){
                return new JsonResult(JsonResultCode.SUCCESS, "更新信息成功", "");
            }else{
                return new JsonResult(JsonResultCode.FAILURE, "更新信息失败", "");
            }
        } catch (Exception ex) {
            logger.error("[DaliyController][updateSalesDaliy] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

    /**
     * 今日工作总结
     */
    @RequestMapping(value = "/updateSalesDaliySummary", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult updateSalesDaliySummary(HttpServletRequest request, HttpServletResponse response,Long saleId,String sdDate,String summary) {
        try {
            int result = daliyService.updateSalesDaliySummary(saleId, sdDate, summary);
            if(result > 0){
                return new JsonResult(JsonResultCode.SUCCESS, "修改信息成功", "");
            }else{
                return new JsonResult(JsonResultCode.FAILURE, "修改信息失败", "");
            }
        } catch (Exception ex) {
            logger.error("[DaliyController][updateSalesDaliySummary] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

    /**
     * 添加客户拜访
     */
    @RequestMapping(value = "/insertSalesVisit", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult insertSalesVisit(HttpServletRequest request, HttpServletResponse response,@RequestBody MultipartFile[] svLogoFile
            ,Long saleId,Long buyerId,String svAddress,Short svType,String svRemark) {
        try {
            if(saleId == null || saleId == 0){
                return new JsonResult(JsonResultCode.FAILURE, "参数saleId异常", "");
            }
            if(buyerId == null || buyerId == 0){
                return new JsonResult(JsonResultCode.FAILURE, "参数buyerId异常", "");
            }
            List<String> logoList = MultipartFileUtils.getImgPath(request, response, svLogoFile);
            SalesVisit salesVisit = new SalesVisit();
            salesVisit.setSaleId(saleId);
            salesVisit.setBuyerId(buyerId);
            if(logoList!=null && logoList.size()>0){
                salesVisit.setSvLogo(logoList.get(0));
            }
            salesVisit.setSvAddress(svAddress);
            salesVisit.setSvType(svType);
            salesVisit.setSvRemark(svRemark);

            VisitVo vv = daliyService.getVisitInfoById(saleId, buyerId);
            if(vv == null){
                //直接拜访
                salesVisit.setSvWay((short)2);
                salesVisit.setSvStatus((short)1);
                salesVisit.setSvTime("1");
                int result = daliyService.insertSalesVisit(salesVisit);
                if(result > 0){
                    return new JsonResult(JsonResultCode.SUCCESS, "添加信息成功", "");
                }else{
                    return new JsonResult(JsonResultCode.FAILURE, "添加信息失败", "");
                }
            }else{
                //预约拜访
                if(vv.getSvStatus()==0){
                    salesVisit.setSvId(vv.getSvId());
                    daliyService.updateSalesVisit(salesVisit);
                    return new JsonResult(JsonResultCode.SUCCESS, "更新信息成功", "");
                }else{
                    return new JsonResult(JsonResultCode.FAILURE, "该商家您今天已经拜访过了!", "");
                }
            }
        } catch (Exception ex) {
            logger.error("[DaliyController][insertSalesVisit] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

    /**
     * 销售人员拜访记录列表
     */
    @RequestMapping(value = "/getSalesVisitList", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult getSalesVisitList(HttpServletRequest request, HttpServletResponse response,Long saleId,Short svType) {
        try {
            List<VisitVo> biList = daliyService.getSalesVisitList(saleId,svType);
            return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", biList);
        } catch (Exception ex) {
            logger.error("[DaliyController][getSalesVisitList] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

    /**
     * 销售人员拜访记录详情
     */
    @RequestMapping(value = "/getSalesVisitInfo", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult getSalesVisitInfo(HttpServletRequest request, HttpServletResponse response,Long svId) {
        try {
            VisitVo visitVo = daliyService.getSalesVisitInfo(svId);
            return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", visitVo);
        } catch (Exception ex) {
            logger.error("[DaliyController][getSalesDaliyInfo] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

    /**
     * 主管查看
     */
    @RequestMapping(value = "/updateLookStatus", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult updateDaliyLookStatus(HttpServletRequest request, HttpServletResponse response,Long saleId,Long sdId,String reply) {
        try {
            int result = daliyService.updateDaliyLookStatus(saleId, sdId,reply);
            if(result > 0){
                return new JsonResult(JsonResultCode.SUCCESS, "修改信息成功", "");
            }else{
                return new JsonResult(JsonResultCode.FAILURE, "修改信息失败", "");
            }
        } catch (Exception ex) {
            logger.error("[DaliyController][updateLookStatus] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

    /**
     * 添加工作报备
     */
    @RequestMapping(value = "/insertSalesReported", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult insertSalesReported(HttpServletRequest request, HttpServletResponse response,@RequestBody SalesReported salesReported) {
        try {
            int result = daliyService.insertSalesReported(salesReported);
            if(result > 0){
                return new JsonResult(JsonResultCode.SUCCESS, "添加信息成功", "");
            }else{
                return new JsonResult(JsonResultCode.FAILURE, "添加信息失败", "");
            }
        } catch (Exception ex) {
            logger.error("[DaliyController][insertSalesReported] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

    /**
     * 报备主管查看
     */
    @RequestMapping(value = "/updateReportedLookStatus", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult updateReportedLookStatus(HttpServletRequest request, HttpServletResponse response,Long saleId,Long srId,String reply) {
        try {
            int result = daliyService.updateReportedLookStatus(saleId, srId, reply);
            if(result > 0){
                return new JsonResult(JsonResultCode.SUCCESS, "修改信息成功", "");
            }else{
                return new JsonResult(JsonResultCode.FAILURE, "修改信息失败", "");
            }
        } catch (Exception ex) {
            logger.error("[DaliyController][updateReportedLookStatus] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

    /**
     * 销售人员报备记录列表
     */
    @RequestMapping(value = "/getSalesReportedList", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult getSalesReportedList(HttpServletRequest request, HttpServletResponse response,Long saleId) {
        try {
            List<ReportedVo> biList = daliyService.getSalesReportedList(saleId);
            return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", biList);
        } catch (Exception ex) {
            logger.error("[DaliyController][getSalesReportedList] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

    /**
     * 管理人员查看销售人员报备记录列表
     */
    @RequestMapping(value = "/getMargeReportedList", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult getMargeReportedList(HttpServletRequest request, HttpServletResponse response,Long saleId) {
        try {
            List<ReportedListVo> biList = daliyService.getMargeReportedList(saleId);
            return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", biList);
        } catch (Exception ex) {
            logger.error("[DaliyController][getMargeReportedList] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }
}

周报的核心代码:

/**
 * 销售周报信息
 */
@RestController
@RequestMapping("/sales")
public class WeeklyController extends BaseController {

    private static final Logger logger = LoggerFactory.getLogger(WeeklyController.class);

    @Autowired
    private SalesWeeklyService salesWeeklyService;

    /**
     * 销售人员周报列表
     */
    @RequestMapping(value = "/getWeeklyList", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult getWeeklyList(HttpServletRequest request, HttpServletResponse response,Long saleId) {
        try {
            List<WeeklyVo> biList = salesWeeklyService.getWeeklyList(saleId);
            return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", biList);
        } catch (Exception ex) {
            logger.error("[WeeklyController][getWeeklyList] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

    /**
     * 管理员查看周报列表
     */
    @RequestMapping(value = "/getMargerWeeklyList", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult getMargerWeeklyList(HttpServletRequest request, HttpServletResponse response,Long saleId) {
        try {
            List<WeeklyListVo> biList = salesWeeklyService.getMargerWeeklyList(saleId);
            return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", biList);
        } catch (Exception ex) {
            logger.error("[WeeklyController][getMargerWeeklyList] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

    /**
     * 销售人员周报详情
     */
    @RequestMapping(value = "/getWeeklyVo", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult getWeeklyVo(HttpServletRequest request, HttpServletResponse response,Long swId) {
        try {
            WeeklyVo weeklyVo = salesWeeklyService.getWeeklyVo(swId);
            return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", weeklyVo);
        } catch (Exception ex) {
            logger.error("[WeeklyController][getWeeklyVo] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

    /**
     * 销售人员填写周报时调用
     */
    @RequestMapping(value = "/findWeeklyVo", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult findWeeklyVo(HttpServletRequest request, HttpServletResponse response,Long saleId) {
        try {
            WeeklyVo weeklyVo = salesWeeklyService.findWeeklyVo(saleId);
            return new JsonResult(JsonResultCode.SUCCESS, "查询信息成功", weeklyVo);
        } catch (Exception ex) {
            logger.error("[WeeklyController][findWeeklyVo] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

    /**
     * 添加销售周报
     */
    @RequestMapping(value = "/insertSalesWeekly", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult insertSalesWeekly(HttpServletRequest request, HttpServletResponse response,@RequestBody SalesWeekly salesWeekly) {
        try {
            if(salesWeekly == null){
                return new JsonResult(JsonResultCode.FAILURE, "参数有误!", "");
            }
            int result = salesWeeklyService.insertSalesWeekly(salesWeekly);
            if(result > 0){
                return new JsonResult(JsonResultCode.SUCCESS, "添加信息成功", "");
            }else{
                return new JsonResult(JsonResultCode.FAILURE, "添加信息失败", "");
            }
        } catch (Exception ex) {
            logger.error("[WeeklyController][insertSalesWeekly] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

    /**
     * 管理员评价
     */
    @RequestMapping(value = "/updateWeeklyLookStatus", method = { RequestMethod.GET, RequestMethod.POST })
    public JsonResult updateWeeklyLookStatus(HttpServletRequest request, HttpServletResponse response,Long saleId,String reply,Long swId) {
        try {
            int result = salesWeeklyService.updateWeeklyLookStatus(saleId, reply, swId);
            if(result > 0){
                return new JsonResult(JsonResultCode.SUCCESS, "更新信息成功", "");
            }else{
                return new JsonResult(JsonResultCode.FAILURE, "跟新信息失败", "");
            }
        } catch (Exception ex) {
            logger.error("[WeeklyController][updateWeeklyLookStatus] exception :", ex);
            return new JsonResult(JsonResultCode.FAILURE, "系统错误,请稍后重试", "");
        }
    }

}

Java开源生鲜电商平台-销售管理设计与架构(源码可下载),如果需要下载的话,可以在我的github下面进行下载。

https://github.com/137071249/

群号:168096884

原文地址:https://www.cnblogs.com/jurendage/p/9131557.html

时间: 2024-08-01 03:35:28

Java开源生鲜电商平台-销售管理设计与架构(源码可下载)的相关文章

Java开源生鲜电商平台-Java后端生成Token架构与设计详解(源码可下载)

Java开源生鲜电商平台-Java后端生成Token架构与设计详解(源码可下载) 目的:Java开源生鲜电商平台-Java后端生成Token目的是为了用于校验客户端,防止重复提交. 技术选型:用开源的JWT架构. 1.概述:在web项目中,服务端和前端经常需要交互数据,有的时候由于网络相应慢,客户端在提交某些敏感数据(比如按照正常的业务逻辑,此份数据只能保存一份)时,如果前端多次点击提交按钮会导致提交多份数据,这种情况我们是要防止发生的. 2.解决方法: ①前端处理:在提交之后通过js立即将按钮

Java开源生鲜电商平台-OMS订单系统中并发问题和锁机制的探讨与解决方案(源码可下载)

Java开源生鲜电商平台-OMS订单系统中并发问题和锁机制的探讨与解决方案(源码可下载) 说明:Java开源生鲜电商中OMS订单系统中并发问题和锁机制的探讨与解决方案: 问题由来     假设在一个订单系统中(以火车票订单系统为例),用户A,用户B都要预定从成都到北京的火车票,A.B在不同的售票窗口均同时查询到了某车厢卧铺中.下铺位有空位.用户A正在犹豫订中铺还是下铺,这时用户B果断订购了下铺.当用户A决定订下铺时,系统提示下铺已经被预订,请重新选择铺位.在这个系统场景中,我们来探讨一下,火车票

Java开源生鲜电商平台-用户表的设计(源码可下载)

Java开源生鲜电商平台-用户表的设计(源码可下载) 说明:由于该系统属于B2B平台,不设计到B2C的架构. 角色分析:买家与卖家. 由于买家与卖家所填写的资料都不一样,需要建立两站表进行维护,比如:buyer,seller. 这样进行数据库的解耦,任何一方的变动都互不影响,但是我想集中式管理,以及一些业务个性化要求,我就增加了一个users表.表结构如下: 账号唯一键,所以做了唯一键索引, 账号的准确性采用手机短信验证. 根据类型区分买家与卖家,登陆的时候,采用的就是users这种表进行维护

Java开源生鲜电商平台-监控模块的设计与架构(源码可下载)

Java开源生鲜电商平台-监控模块的设计与架构(源码可下载) 说明:Java开源生鲜电商平台-监控模块的设计与架构,我们谈到监控,一般设计到两个方面的内容: 1. 服务器本身的监控.(比如:linux服务器的CPU,内存,磁盘IO等监控) 2. 业务系统的监控.  (比如:业务系统性能的监控,SQL语句的监控,请求超时的监控,用户输入的监控,整个请求过程时间的监控,优化等等) 1. 服务器本身的监控 说明:由于Java开源生鲜电商平台采用的是阿里云的linux CentOS服务器,由于阿里云本身

Java开源生鲜电商平台-通知模块设计与架构(源码可下载)

Java开源生鲜电商平台-通知模块设计与架构(源码可下载) 说明:对于一个生鲜的B2B平台而言,通知对于我们实际的运营而言来讲分为三种方式:           1. 消息推送:(采用极光推送)           2. 主页弹窗通知.(比如:现在有什么新的活动,有什么新的优惠等等)           3. 短信通知.(对于短信通知,这个大家很熟悉,我们就说下我们如何从代码层面对短信进行分层的分析与架构) 1. 消息推送 说明:目前市场上的推送很多,什么极光推送,环信,网易云等等,都可以实现秒

Java开源生鲜电商平台-RBAC系统权限的设计与架构(源码可下载)

Java开源生鲜电商平台-RBAC系统权限的设计与架构(源码可下载) 说明:根据上面的需求描述以及对需求的分析,我们得知通常的一个中小型系统对于权限系统所需实现的功能以及非功能性的需求,在下面我们将根据需求从技术角度上分析实现的策略以及基于目前两种比较流行的权限设计思想来讨论关于权限系统的实现. 1.1.       技术策略 l         身份认证 在B/S的系统中,为识别用户身份,通常使用的技术策略为将用户的身份记录在Session中,也就是当用户登录时即获取用户的身份信息,并将其记录

Java开源生鲜电商平台-物流动态费率、免运费和固定运费设计与架构(源码可下载)

Java开源生鲜电商平台-物流动态费率.免运费和固定运费设计与架构(源码可下载) 说明:物流配送环节常见的有包邮,免运费,或者偏远地区动态费率,还存在一些特殊的情况,固定费率,那么如何进行物流的架构与设计呢? 运费之困惑 在淘宝买过东西的亲们,应该都有过这样的体会--每次购物,都要在运费上和商家讨价还价,商议好运费后,还得下达订单等待卖家修改了才能付款,每次都如此,实在很不方便.而且当碰到运费很贵时(跨省的),那往往就会导致这次买卖告吹.无论在淘宝,还是在其它网站,当购买大件商品时,如果按照实际

Java开源生鲜电商平台-技术方案与文档下载(源码可下载)

说明:任何一个好的项目,都应该有好的文档与设计方案,包括需求文档,概要设计,详细设计,测试用例,验收报告等等,类似下面这个图: 有以下几个管理域: 1. 开发域. 2. 管理域 3. 基线域 4. 产品域 1.  开发域包括以下几个维度: 例如:需求开发中,应该包括以下几个文档: 2,系统设计中又包括: 3. 基线域 其中需求基线又包括: 化状态:A--增加,M--修改,D--删除 目录 1       项目简介..........................................

Java开源生鲜电商平台-系统架构与技术选型(源码可下载)

Java开源生鲜电商平台-系统架构与技术选型(源码可下载) 1.  硬件环境 公司服务器 2.   软件环境 2.1  操作系统 Linux CentOS 6.8系列 2.2 反向代理/web服务器 Nginx 2.3 应用服务器 Jdk7+ Tomcat 7 2.4 数据库 Mysql 5.6.x 2.5 消息队列(可选) Rabbitmq/rocketmq 2.6 缓存(可选) Redis 3.x 3.工程构建和管理工具 1.Maven 开发人员已经很熟悉了.此处略 2.Jenkins Je