当前位置:网站首页>小孟5w接了個盲盒小程序,三周開發完畢!

小孟5w接了個盲盒小程序,三周開發完畢!

2021-10-14 06:39:52 我是springmeng

現在的年輕人是真的會玩,越來越新的東西出來,越來越好玩的東西流行。

就像最近很火的地攤盲盒。

講真的,這之前我都不知道盲盒是啥。

前面有個粉絲讓我開發盲盒小程序,為此我還去地攤上找攤比特買了幾個盲盒玩玩!

很好玩,很有意思。
 

然後我我去網上看了下,很多的公司都在推盲盒的app或者小程序。

例如網易的盲盒小程序,我一直在csdn更新文章,經常收到他們的盲盒小程序的通知。

 下面是我開發的:

圖片

 

 

 

 

 

下面和大家簡單的介紹下開發的這個小程序。有很多核心的地方,可能沒辦法公開。

目錄

一,技術實現:

二,核心代碼

三,核心數據庫

四,市場定比特:

五,小孟建議:


一,技術實現:

因為客戶沒有技術方面的要求,那就按照我習慣用的技術開發的,無所謂什麼最新不最新技術了。 

後臺框架:SpringBoot,

數據庫采用的Mysql,

後端的頁面采用的Vue進行開發,

緩存用的Redis,

搜索引擎采用的是elasticsearch,

ORM層框架:MyBatis,

連接池:Druid,

分庫分錶:MyCat,

權限:SpringSecurity,

代碼質量檢查:sonar。

二,核心代碼

@Controller
@RequestMapping("/addressInfo")
public class AddressInfoController extends BaseController {

    @Resource
    private AddressInfoService addressInfoService;

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @SetMenuAnnotation
    @RequestMapping("listPage")
    public ModelAndView listPage(ModelAndView modelAndView) {
        modelAndView.setViewName("addressInfo/list");
        return modelAndView;
    }

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @RequestMapping("addPage")
    public String addPage() {
        return "addressInfo/add";
    }

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @RequestMapping("editPage")
    public ModelAndView editPage(ModelAndView modelAndView, Long id) {
        modelAndView.addObject("id", id);
        modelAndView.setViewName("addressInfo/edit");
        return modelAndView;
    }

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @RequestMapping("/getList")
    @ResponseBody
    public ReturnDataForLayui getList(AddressInfo addressInfo) {
        addressInfo.setIsDeleted(PageBean.isDeletedNo);
        return addressInfoService.getList(addressInfo);
    }

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @RequestMapping("/add")
    @ResponseBody
    public ReturnData add(AddressInfo addressInfo) {
        return addressInfoService.add(addressInfo);
    }

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @RequestMapping("/update")
    @ResponseBody
    public ReturnData update(AddressInfo addressInfo) {
        return addressInfoService.update(addressInfo);
    }

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @RequestMapping("/updateDelete")
    @ResponseBody
    public ReturnData updateDelete(AddressInfo addressInfo) {
        addressInfo.setIsDeleted(PageBean.isDeletedYes);
        return addressInfoService.updateDelete(addressInfo);
    }

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @RequestMapping("/updateDeleteBatch")
    @ResponseBody
    public ReturnData updateDeleteBatch(String ids) {
        List<Long> idList = JSON.parseArray(ids, Long.class);
        return addressInfoService.updateDeleteBatch(idList);
    }
package com.cnewdream.controller;

import com.cnewdream.utils.ReturnData;
import com.cnewdream.utils.RedisUtils;

import javax.annotation.Resource;
import javax.servlet.ServletContext;
public class BaseController {

	@Resource
	protected ServletContext servletContext;
	@Resource
	protected RedisUtils redisUtils;

}
@RequestMapping("/blindBoxInfo")
public class BlindBoxInfoController extends BaseController {

    @Resource
    private BlindBoxInfoService blindBoxInfoService;

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @SetMenuAnnotation
    @RequestMapping("listPage")
    public ModelAndView listPage(ModelAndView modelAndView) {
        modelAndView.setViewName("blindBoxInfo/list");
        return modelAndView;
    }

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @RequestMapping("addPage")
    public String addPage() {
        return "blindBoxInfo/add";
    }

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @RequestMapping("editPage")
    public ModelAndView editPage(ModelAndView modelAndView, Long id) {
        modelAndView.addObject("id", id);
        modelAndView.setViewName("blindBoxInfo/edit");
        return modelAndView;
    }

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @RequestMapping("goodsLevelEditPage")
    public ModelAndView goodsLevelEditPage(ModelAndView modelAndView, Long id) {
        BlindBoxInfo blindBoxInfo = new BlindBoxInfo();
        blindBoxInfo.setId(id);
        ReturnDataForLayui list = blindBoxInfoService.getList(blindBoxInfo);
        ArrayList<BlindBoxInfo> blindBoxInfos = (ArrayList<BlindBoxInfo>) list.getData();
        BlindBoxInfo blindBoxInfoDb = blindBoxInfos.get(0);
        String goodsLevel = blindBoxInfoDb.getGoodsLevel();
        GoodsLevelInfo goodsLevelInfo = JSONUtils.json2pojo(goodsLevel, GoodsLevelInfo.class);
        if (goodsLevelInfo == null) {
            goodsLevelInfo = new GoodsLevelInfo();
        }
        goodsLevelInfo.setId(id);
        modelAndView.addObject("goodsLevelInfo", goodsLevelInfo);
        modelAndView.setViewName("blindBoxInfo/goodsLevelEdit");
        return modelAndView;
    }

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @RequestMapping("/getList")
    @ResponseBody
    public ReturnDataForLayui getList(BlindBoxInfo blindBoxInfo) {
        blindBoxInfo.setIsDeleted(PageBean.isDeletedNo);
        return blindBoxInfoService.getList(blindBoxInfo);
    }

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @RequestMapping("/add")
    @ResponseBody
    public ReturnData add(BlindBoxInfo blindBoxInfo) {
        return blindBoxInfoService.add(blindBoxInfo);
    }
@Controller
@RequestMapping("/goodsInfo")
public class GoodsInfoController extends BaseController {

    @Resource
    private GoodsInfoService goodsInfoService;

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @SetMenuAnnotation
    @RequestMapping("listPage")
    public ModelAndView listPage(ModelAndView modelAndView, Long blindId) {
        modelAndView.setViewName("goodsInfo/list");
        modelAndView.addObject("blindId", blindId);
        return modelAndView;
    }

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @RequestMapping("addPage")
    public ModelAndView addPage(ModelAndView modelAndView, Long blindId) {
        modelAndView.addObject("blindId", blindId);
        modelAndView.setViewName("goodsInfo/add");
        return modelAndView;
    }

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @RequestMapping("editPage")
    public ModelAndView editPage(ModelAndView modelAndView, Long id) {
        modelAndView.addObject("id", id);
        modelAndView.setViewName("goodsInfo/edit");
        return modelAndView;
    }

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @RequestMapping("/getList")
    @ResponseBody
    public ReturnDataForLayui getList(GoodsInfo goodsInfo) {
        goodsInfo.setIsDeleted(PageBean.isDeletedNo);
        return goodsInfoService.getList(goodsInfo);
    }

    @MustSetForOrderNoAnnotation
    @AuthenticationAnnotation
    @RequestMapping("/add")
    @ResponseBody
    public ReturnData add(GoodsInfo goodsInfo) {
        return goodsInfoService.add(goodsInfo);
    }

三,核心數據庫

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for address_info
-- ----------------------------
DROP TABLE IF EXISTS `address_info`;
CREATE TABLE `address_info`  (
  `id` bigint(19) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主鍵id',
  `person_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `phone` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '電話',
  `gender` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '性別',
  `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '地址',
  `user_id` bigint(19) NOT NULL COMMENT '用戶',
  `is_deleted` char(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '是否删除',
  `gmt_create` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '創建時間',
  `gmt_update` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新時間',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '收貨地址信息' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of address_info
-- ----------------------------
INSERT INTO `address_info` VALUES (1, 'zhy', '18034272031', '2', '河北省 衡水市', 1, '0', '2021-09-08 14:39:49', '2021-09-08 15:37:20');
INSERT INTO `address_info` VALUES (2, '張紅雨', '18034272031', '2', '北京市 海澱區 中央電視臺大樓對面 富爾大厦 3008', 1, '0', '2021-09-08 15:21:00', '2021-09-08 15:37:00');

-- ----------------------------
-- Table structure for blind_box_info
-- ----------------------------
DROP TABLE IF EXISTS `blind_box_info`;
CREATE TABLE `blind_box_info`  (
  `id` bigint(19) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主鍵id',
  `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '標題',
  `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述',
  `price` bigint(19) NOT NULL COMMENT '單價',
  `sort` int(9) NOT NULL COMMENT '排序',
  `is_on_sale` char(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '是否上架',
  `goods_level` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '概率',
  `is_deleted` char(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '是否删除',
  `gmt_create` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '創建時間',
  `gmt_update` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新時間',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '盲盒信息' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of blind_box_info
-- ----------------------------
INSERT INTO `blind_box_info` VALUES (1, '擎天柱重裝上陣', '變形金剛變身“哢哢哢哢哢哢”', 1, 0, '1', '{\"id\":1,\"level1\":25,\"level2\":25,\"level3\":25,\"level4\":25}', '0', '2021-09-02 17:21:15', '2021-09-19 13:30:47');
INSERT INTO `blind_box_info` VALUES (2, '蘋果iPhone純享', '蘋果手機筆記本平板主機耳機', 1, 0, '1', '{\"id\":2,\"level1\":0.01,\"level2\":0.01,\"level3\":0.01,\"level4\":99.97}', '0', '2021-09-02 17:35:39', '2021-09-19 13:30:48');
INSERT INTO `blind_box_info` VALUES (3, '燃燒生命吧!你的可能性是無限可能,無所不能', '概率所得限量真骨雕新品!', 11, 1, '1', '{\"id\":3,\"level1\":0.01,\"level2\":0.02,\"level3\":0.03,\"level4\":99.94}', '0', '2021-09-02 17:53:36', '2021-09-12 21:44:13');
INSERT INTO `blind_box_info` VALUES (4, '111', '111', 1100, 1, '1', '{\"id\":null,\"level1\":25,\"level2\":25,\"level3\":25,\"level4\":25}', '0', '2021-09-19 13:32:10', '2021-09-19 13:32:27');

-- ----------------------------
-- Table structure for file_upload_info
-- ----------------------------
DROP TABLE IF EXISTS `file_upload_info`;
CREATE TABLE `file_upload_info`  (
  `id` bigint(19) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主鍵id',
  `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '路徑',
  `file_size` bigint(19) NULL DEFAULT NULL COMMENT '大小',
  `data_from` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '來源',
  `is_deleted` char(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '是否删除',
  `gmt_create` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '創建時間',
  `gmt_update` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新時間',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 102 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '文件上傳信息' ROW_FORMAT = Dynamic;

-- ----------------------------

四,市場定比特:

要說什麼市場最大?

老人要健康,女人要美麗,男人要賺錢!

客戶目標客戶就是女人,產品是化妝產品,而且是高端化妝產品。

 

我老婆經常用的化妝品,特意去某東上搜索了下,一小瓶化妝水就是一雙球鞋的錢,我好心疼,nnd,我一雙球鞋,已經穿7年了。看到銷量我裂開了。

一個月過億。

客戶的這次選擇的市場絕對是沒有問題的,而且遊戲很好玩。我原來玩過CF的抽獎遊戲,不知道玩了多少輪。

所以客戶給我說,他們第一輪要融資2000w,如果搞起來真的有戲。

化妝品的市場太大了。

對了,如果您要找我開發,我要聲明以下:

我們對市場一點不感冒,我們只是開發!所以你找我開發,我不加入你的合夥,我只是開發,也不用給我畫餅。給我開發的費用即可。

說白了,就想讓我免費開發,隔三差五的總有人給我畫餅,對不起,我胃最近不好,消化不了大餅。

圖片

不過創業的風險很大。我前面接了了很多開發的活,在眾多創業的產品中,只有一個人成功了。

給一個留學生做的一個中文交友的網站。

天時、地利、人和,就突然火了,一年利潤達到了500w。

其他的99%開發的產品,大部分都gg了。

有的產品的idea很好,市場也很好,但是推廣需要極大的費用。一般人是玩不起的。

最慘的一個老板,我們給他開發了一個勞務市場的APP,市場巨大。老板滿懷希望的砸了300w推廣費,開發費用給我們砸了20w。

不幸的是,最後錢全打水漂了。

最後調查了很久的原因,讓老板很鬱悶:

農民工兄弟,一般不喜歡用app。如果使用的流程複雜,更不會用。而且推廣需要不斷的砸錢。

老板直接噴血……

五,小孟建議:

有好的idea,我們可以開發,但是,但是……

成功的產品需要運氣,更需要資本的注入,需要快速占領。

阿裏也過做社交軟件,騰訊也做過電子商城,抖音很火,騰訊從微視到視頻號………

成功的產品需要天時、地利、人和,缺一不可。

總的來說,產品够不够硬,只有投放到市場,讓用戶體驗才是王道。至於其他的什麼idea有時候就是扯淡。

我是小孟,分享各種項目經驗和面試資料。

一起加油進步。

求個三連,點贊,收藏,更多幹貨的更新ing: 

 

如果也想學習小程序的開發,我錄制了一個詳細的教程,下面領取。回複:小程序實戰

 教程可通過搜索下方 公眾號 獲取

 

版权声明
本文为[我是springmeng]所创,转载请带上原文链接,感谢
https://chowdera.com/2021/10/20211014063824066M.html

随机推荐