現在的年輕人是真的會玩,越來越新的東西出來,越來越好玩的東西流行,
就像最近很火的地攤盲盒,
講真的,這之前我都不知道盲盒是啥,
前面有個粉絲讓我開發盲盒小程式,為此我還去地攤上找攤位買了幾個盲盒玩玩!
很好玩,很有意思,
然后我我去網上看了下,很多的公司都在推盲盒的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:

如果也想學習小程式的開發,我錄制了一個詳細的教程,下面領取,回復:小程式實戰
👇🏻 教程可通過搜索下方 公眾號 獲取👇🏻
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/312180.html
標籤:其他
上一篇:【歷史上的今天】10 月 13 日:網景瀏覽器誕生;ENIAC 首席設計師出生;“龍芯”問世
下一篇:python小數舍入問題
