diff --git a/111.sql b/111.sql new file mode 100644 index 0000000..2e03a9a --- /dev/null +++ b/111.sql @@ -0,0 +1,606 @@ +/*用户基本信息*/ +DROP TABLE IF EXISTS `bubble_user`; +CREATE TABLE `bubble_user` +( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `nick_name` varchar(20) NOT NULL COMMENT '昵称', + `head_url` varchar(256) NOT NULL COMMENT '头像地址', + `phone_number` varchar(11) NOT NULL COMMENT '手机账号', + `open_id` varchar(128) NOT NULL COMMENT '微信登陆id', + `status` tinyint(2) NOT NULL COMMENT '账号状态[1-正常|2-禁用|3-官方]', + `password` varchar(20) NOT NULL COMMENT '密码', + `balance` int(10) NOT NULL COMMENT '泡泡币', + `bubble_currency` int(10) NOT NULL COMMENT '退货金额[分]', + `income_currency` int(10) NOT NULL COMMENT '活动金额[分]', + `invitation_people` int(10) NOT NULL COMMENT '邀请人数', + `invitation_money` int(10) NOT NULL COMMENT '邀请奖励金额[分]', + `forbidden_status` tinyint(2) NOT NULL COMMENT '是否禁言[1否/2是]', + `forbidden_time` datetime DEFAULT NULL COMMENT '禁言结束时间', + `remark` varchar(256) NOT NULL COMMENT '个人说明', + `created_at` datetime DEFAULT NULL COMMENT '创建日期', + `updated_at` datetime DEFAULT NULL COMMENT '修改日期', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 10003 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='泡泡用户表'; +CREATE INDEX ix_bubble_user_phone ON `bubble_user` (phone_number); +CREATE INDEX ix_bubble_user_open ON `bubble_user` (open_id); + +/*广告*/ +DROP TABLE IF EXISTS `bubble_advertisement`; +CREATE TABLE `bubble_advertisement` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '广告id', + `ad_type` varchar(11) NOT NULL COMMENT '广告类型', + `img_url` varchar(512) NOT NULL COMMENT '图片地址', + `jump_url` varchar(64) NOT NULL COMMENT '跳转地址', + `status` char(1) DEFAULT '1' COMMENT '广告状态(1正/2停)', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 30002 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='广告表'; +CREATE INDEX ix_bubble_ad_img ON `bubble_advertisement` (ad_type); + +/*系列标签*/ +DROP TABLE IF EXISTS `bubble_tag_config`; +CREATE TABLE `bubble_tag_config` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '标签id', + `tag_type` tinyint(4) NOT NULL COMMENT '标签类型[1商品/2话题/3圈子/4盲盒]', + `tag_name` varchar(64) NOT NULL COMMENT '标签名称', + `tag_img` varchar(128) NOT NULL COMMENT '标签图标', + `blind_box_cover_img` text NOT NULL COMMENT '盲盒封面图', + `tag_status` char(1) DEFAULT '1' COMMENT '标签状态[1正常/2删除]', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 30007 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='标签配置'; + + +/*商品列表 */ +DROP TABLE IF EXISTS `bubble_commodity_list`; +CREATE TABLE `bubble_commodity_list` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品id', + `series_id` bigint(20) NOT NULL COMMENT '所属系列id', + `price` int(10) NOT NULL COMMENT '商品价格[分]', + `commodity_status` tinyint(2) NOT NULL COMMENT '商品状态(1正常/2停售)', + `is_recommend` tinyint(2) NOT NULL COMMENT '推荐状态[1-是/2-否]', + `commodity_img` varchar(512) NOT NULL COMMENT '商品图片[img1|img2]', + `commodity_name` varchar(128) NOT NULL COMMENT '商品名称', + `commodity_details` varchar(512) NOT NULL COMMENT '商品详情图片', + `commodity_explain` varchar(1024) NOT NULL COMMENT '商品详情文字', + `discount_status` tinyint(2) NOT NULL COMMENT '折扣状态[1-开启/2-关闭]', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + `preSale_at` datetime DEFAULT NULL COMMENT '预售时间', + `freight` bigint(10) NOT NULL COMMENT '运费', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 50002 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='商品列表'; +CREATE INDEX ix_bubble_commodity_name ON `bubble_commodity_list` (commodity_name); +CREATE INDEX ix_bubble_series_id_1 ON `bubble_commodity_list` (series_id); + +/*商品尺寸*/ +DROP TABLE IF EXISTS `bubble_commodity_size`; +CREATE TABLE `bubble_commodity_size` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '尺寸id', + `commodity_id` int(10) NOT NULL COMMENT '商品id', + `commodity_size` varchar(128) NOT NULL COMMENT '商品规格', + `commodity_num` int(10) NOT NULL COMMENT '商品数量', + `commodity_old_price` int(10) NOT NULL COMMENT '商品原价[分]', + `commodity_new_price` int(10) NOT NULL COMMENT '商品则扣价[分]', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 80002 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='商品尺寸'; +CREATE INDEX ix_bubble_commodity_id ON `bubble_commodity_size` (commodity_id); + +/*盲盒商品*/ +DROP TABLE IF EXISTS `bubble_blind_box_list`; +CREATE TABLE `bubble_blind_box_list` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品id', + `series_id` bigint(20) NOT NULL COMMENT '所属系列id', + `price` int(10) NOT NULL COMMENT '商品价格[分]', + `commodity_new_price` int(10) NOT NULL COMMENT '商品则扣价[分]', + `commodity_number` int(10) NOT NULL COMMENT '库存数量', + `commodity_weight` int(10) DEFAULT '1' COMMENT '抽取权重', + `commodity_status` tinyint(2) NOT NULL COMMENT '商品状态(1正常/2停售/3预售)', + `is_recommend` tinyint(2) NOT NULL COMMENT '推荐状态[1-是/2-否]', + `commodity_img` varchar(512) NOT NULL COMMENT '商品图片[img1|img2]', + `commodity_name` varchar(128) NOT NULL COMMENT '商品名称', + `commodity_details` varchar(512) NOT NULL COMMENT '商品详情图片', + `commodity_explain` varchar(512) NOT NULL COMMENT '商品详情文字', + `discount_status` tinyint(2) NOT NULL COMMENT '折扣状态[1-开启/2-关闭]', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + `style` tinyint(2) NOT NULL COMMENT '是否为隐藏款', + `freight` bigint(10) NOT NULL COMMENT '运费', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 50003 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='盲盒商品列表'; +CREATE INDEX index_bubble_1_name ON `bubble_blind_box_list` (commodity_name); +CREATE INDEX index_bubble_series_id ON `bubble_blind_box_list` (series_id); + +/*购物车*/ +DROP TABLE IF EXISTS `bubble_shop_cart`; +CREATE TABLE `bubble_shop_cart` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `series_id` bigint(20) NOT NULL COMMENT '所属系列id', + `commodity_id` bigint(20) NOT NULL COMMENT '商品id', + `commodity_size` bigint(10) NOT NULL COMMENT '商品规格id', + `commodity_num` int(10) NOT NULL COMMENT '囤积商品数量', + `commodity_type` tinyint(2) NOT NULL COMMENT '商品类型[1盲盒/2商城]', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 10001 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='购物车'; +CREATE INDEX ix_cart_user_id ON `bubble_shop_cart` (user_id); +CREATE INDEX ix_cart_comm_id ON `bubble_shop_cart` (commodity_id); +CREATE INDEX ix_cart_series_id ON `bubble_shop_cart` (series_id); + +/*收货地址*/ +DROP TABLE IF EXISTS `bubble_receiving_address`; +CREATE TABLE `bubble_receiving_address` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `receiving_name` varchar(16) NOT NULL COMMENT '收货人名称', + `receiving_phone` varchar(11) NOT NULL COMMENT '收货人电话', + `receiving_address` varchar(128) NOT NULL COMMENT '收货人地址', + `is_default` tinyint(1) DEFAULT '0' COMMENT '是否位默认收获地址', + `tag` tinyint(2) NOT NULL COMMENT '标签[1家/2公司/3学校]', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 10003 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='用户收货地址'; +CREATE INDEX ix_receiving_user_id ON `bubble_receiving_address` (user_id); +CREATE INDEX ix_receiving_phone ON `bubble_receiving_address` (receiving_phone); + +/*个人奖励记录*/ +DROP TABLE IF EXISTS `bubble_invitation_friend`; +CREATE TABLE `bubble_invitation_friend` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `user_id` bigint(20) NOT NULL COMMENT '参与人id', + `friend_id` bigint(20) NOT NULL COMMENT '受邀人id', + `reward_money` int(10) NOT NULL COMMENT '奖励金额[分]', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 60001 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='邀请记录'; +CREATE INDEX ix_invitation_user_id ON `bubble_invitation_friend` (user_id); + +/*道具卡配置*/ +DROP TABLE IF EXISTS `bubble_prop_card_config`; +CREATE TABLE `bubble_prop_card_config` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `card_name` varchar(32) NOT NULL COMMENT '道具卡名称', + `explain` varchar(64) NOT NULL COMMENT '功能说明', + `price` int(10) NOT NULL COMMENT '单价[分]', + `card_type` tinyint(2) NOT NULL COMMENT '类型[1盲盒/2商城]', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + `card_class` tinyint(2) NOT NULL COMMENT '类型1排除/2透视', + `card_money` int(10) NOT NULL COMMENT '折扣价[分]', + `card_status` tinyint(2) NOT NULL COMMENT '折扣状态[1开启/2关闭]', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 80002 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='道具卡'; + +/*用户道具卡*/ +DROP TABLE IF EXISTS `bubble_user_prop_card`; +CREATE TABLE `bubble_user_prop_card` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `card_id` bigint(20) NOT NULL COMMENT '道具卡id', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `use_status` tinyint(1) NOT NULL COMMENT '1未使用/2-使用', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + `commodity_id` bigint(10) NOT NULL COMMENT '透视/排除id', + `card_type` tinyint(2) NOT NULL COMMENT '卡类型1透视/2排除', + `series_id` bigint(10) NOT NULL COMMENT '系列id', + `pay_status` tinyint(2) NOT NULL COMMENT '支付状态[1未支付/2已支付]', + `pay_money` int(10) DEFAULT NULL COMMENT '支付金额', + `order_id` varchar(64) NOT NULL COMMENT '订单id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 80021 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='用户道具卡'; +CREATE INDEX ix_user_prop_card_id ON `bubble_user_prop_card` (card_id); +CREATE INDEX ix_user_prop_user_id ON `bubble_user_prop_card` (user_id); + +/*活动配置*/ +DROP TABLE IF EXISTS `bubble_activity_config`; +CREATE TABLE `bubble_activity_config` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `activity_name` varchar(64) NOT NULL COMMENT '活动名称', + `activity_img` varchar(128) NOT NULL COMMENT '活动图标', + `activity_type` varchar(16) NOT NULL COMMENT '活动类型', + `activity_status` tinyint(1) NOT NULL COMMENT '活动状态[1开启/2关闭/3删除]', + `start_at` datetime DEFAULT NULL COMMENT '活动开始时间', + `end_at` datetime DEFAULT NULL COMMENT '活动结束时间', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 30011 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='活动配置'; +CREATE INDEX ix_activity_config ON `bubble_activity_config` (start_at, end_at); + + +/*优惠券活动*/ +DROP TABLE IF EXISTS `bubble_activity_coupon_config`; +CREATE TABLE `bubble_activity_coupon_config` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '优惠券id', + `parent_id` bigint(20) NOT NULL COMMENT '活动父id', + `coupon_name` varchar(24) NOT NULL COMMENT '优惠券名字', + `support_type` tinyint(2) NOT NULL COMMENT '优惠券类型[1盲盒/2商城]', + `activity_type` tinyint(2) NOT NULL COMMENT '活动类型[1-无门槛/2-满减/3-待定]', + `min_money` int(10) NOT NULL COMMENT '最小消费金额[分]', + `reduce_money` int(10) NOT NULL COMMENT '活动减少金额[分]', + `coupon_time` int(10) NOT NULL COMMENT '券领取后有效时间[天]', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + `end_at` datetime DEFAULT NULL COMMENT '截止时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 65004 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='优惠券配置'; +CREATE INDEX ix_coupon_cfg ON `bubble_activity_coupon_config` (parent_id); + +/*分销活动配置*/ +DROP TABLE IF EXISTS `bubble_activity_desiri_config`; +CREATE TABLE `bubble_activity_desiri_config` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `parent_id` bigint(20) NOT NULL COMMENT '活动父id', + `distribution_money` int(10) NOT NULL COMMENT '分销奖励金额[分]', + `distribution_explain` varchar(256) NOT NULL COMMENT '活动说明', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 6201 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='分销活动配置'; +CREATE INDEX ix_coupon_cfg ON `bubble_activity_desiri_config` (parent_id); + + +/*用户获取的优惠券*/ +DROP TABLE IF EXISTS `bubble_coupon_user`; +CREATE TABLE `bubble_coupon_user` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `activity_id` bigint(20) NOT NULL COMMENT '活动id', + `coupon_id` bigint(20) NOT NULL COMMENT '券id', + `use_type` tinyint(2) NOT NULL COMMENT '使用状态[1-未使用/2-已经使用/3-已过期/4-删除]', + `get_at` datetime DEFAULT NULL COMMENT '获取时间', + `invalid_at` datetime DEFAULT NULL COMMENT '失效时间', + `over_at` datetime DEFAULT NULL COMMENT '结束时间', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 75001 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='用户优惠券'; +CREATE INDEX ix_coupon_user_id ON `bubble_coupon_user` (user_id); +CREATE INDEX ix_coupon_id ON `bubble_coupon_user` (coupon_id); + +/*用户动态*/ +DROP TABLE IF EXISTS `bubble_user_dynamic`; +CREATE TABLE `bubble_user_dynamic` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '动态id', + `dynamic_type` tinyint(2) NOT NULL COMMENT '动态类型[1官方/2用户]', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `dynamic_text` varchar(512) NOT NULL COMMENT '动态内容', + `dynamic_img` varchar(512) NOT NULL COMMENT '动态图片', + `commodity_id` bigint(20) NOT NULL COMMENT '产品id(官方账号)', + `dynamic_like` int(10) NOT NULL COMMENT '动态点赞数', + `dynamic_comment` int(10) NOT NULL COMMENT '动态评论数', + `dynamic_circle` bigint(20) NOT NULL COMMENT '圈子', + `dynamic_topic` varchar(32) NOT NULL COMMENT '话题[]', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 12506 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='用户动态'; +CREATE INDEX ix_user_dynamic_id ON `bubble_user_dynamic` (user_id); +CREATE INDEX index_user_dynamic_circle ON `bubble_user_dynamic` (dynamic_circle); +CREATE INDEX index_user_dynamic_topic ON `bubble_user_dynamic` (dynamic_topic); +CREATE INDEX index_user_dynamic_created ON `bubble_user_dynamic` (created_at); + +/*动态点赞*/ +DROP TABLE IF EXISTS `bubble_dynamic_like`; +CREATE TABLE `bubble_dynamic_like` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `dynamic_id` bigint(20) NOT NULL COMMENT '动态id', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 5006 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='点赞记录'; +CREATE INDEX ix_like_record_user ON `bubble_dynamic_like` (user_id); +CREATE INDEX ix_like_record_dynamic ON `bubble_dynamic_like` (dynamic_id); + +/*动态评论*/ +DROP TABLE IF EXISTS `bubble_dynamic_comment`; +CREATE TABLE `bubble_dynamic_comment` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `user_id` bigint(20) NOT NULL COMMENT '发布人id', + `user_name` varchar(16) NOT NULL COMMENT '发布人名称', + `dynamic_id` bigint(20) NOT NULL COMMENT '动态id', + `parent_comment_id` bigint(20) NOT NULL COMMENT '父评论id', + `parent_comment_user` bigint(20) NOT NULL COMMENT '父评论用户id', + `parent_comment_userName` varchar(32) NOT NULL COMMENT '父评论用户名', + `reply_comment_id` bigint(20) NOT NULL COMMENT '子评论id', + `reply_comment_user` bigint(20) NOT NULL COMMENT '子评论用户id', + `reply_comment_user_name` varchar(32) NOT NULL COMMENT '子评论用户名', + `comment_level` tinyint(2) NOT NULL COMMENT '评论等级[1父/2子]', + `content` varchar(256) NOT NULL COMMENT '评论内容', + `status` tinyint(2) NOT NULL COMMENT '评论状态[1正常/2删除]', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + `parent_head` varchar(256) NOT NULL COMMENT '父评论头像', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 84011 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='评论表'; +CREATE INDEX ix_comment_user_id ON `bubble_dynamic_comment` (user_id); + +/*预约记录 */ +DROP TABLE IF EXISTS `bubble_make_an_appoint`; +CREATE TABLE `bubble_make_an_appoint` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '预约记录id', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `appoint_type` tinyint(2) NOT NULL COMMENT '预约类型[1盲盒/2商品]', + `blind_box_id` bigint(20) NOT NULL COMMENT '预约产品id', + `start_buy_at` datetime DEFAULT NULL COMMENT '发售时间', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 10000 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='预约记录'; +CREATE INDEX index_appoint ON `bubble_make_an_appoint` (user_id); +CREATE INDEX index_appoint_comm_id ON `bubble_make_an_appoint` (blind_box_id); + +/*购买记录*/ +DROP TABLE IF EXISTS `bubble_pay_record`; +CREATE TABLE `bubble_pay_record` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `order_id` varchar(64) DEFAULT NULL COMMENT '系统订单id', + `commodity_type` tinyint(2) NOT NULL COMMENT '商品类型[1盲盒/2商城]', + `commodity_id` bigint(20) NOT NULL COMMENT '商品id', + `size_id` bigint(10) NOT NULL COMMENT '尺寸id', + `commodity_num` bigint(10) NOT NULL COMMENT '购买商品数量', + `change_status` tinyint(2) NOT NULL COMMENT '交易状态[1-待支付,2-支付失败,3-支付成功,4-待发货,5-运输中,6-已经到达]', + `total_money` int(10) NOT NULL COMMENT '总金额', + `activity_Id` bigint(20) NOT NULL COMMENT '活动id', + `activity_realization_id` bigint(20) NOT NULL COMMENT '活动实现id', + `activity_money` int(10) NOT NULL COMMENT '活动减少金额[分]', + `other_money` int(10) NOT NULL COMMENT '其他金额[运费]', + `pay_money` int(10) NOT NULL COMMENT '支付金额[分]', + `address_id` bigint(10) NOT NULL COMMENT '收获地址id', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 25516 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='购买记录'; +CREATE INDEX ix_user_pay ON `bubble_pay_record` (user_id, commodity_id, size_id); +CREATE INDEX ix_pay_order ON `bubble_pay_record` (order_id); +CREATE INDEX ix_pay__create ON `bubble_pay_record` (created_at); + +/*售出记录*/ +DROP TABLE IF EXISTS `bubble_sold_record`; +CREATE TABLE `bubble_sold_record` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '业务id', + `order_id` varchar(64) DEFAULT NULL COMMENT '系统订单id', + `commodity_id` bigint(20) NOT NULL COMMENT '商品id', + `commodity_type` tinyint(2) NOT NULL COMMENT '商品类型[1盲盒/2商城]', + `size_id` bigint(20) NOT NULL COMMENT '商品尺寸id', + `old_price` int(10) NOT NULL COMMENT '原价', + `pay_money` int(10) NOT NULL COMMENT '实际出售金额', + `pay_number` int(10) NOT NULL COMMENT '出售数量', + `activity_id` bigint(20) NOT NULL COMMENT '参与活动id', + `activity_realization_id` bigint(20) NOT NULL COMMENT '活动实现id', + `discount_money` int(10) NOT NULL COMMENT '优惠金额', + `commodity_status` tinyint(2) NOT NULL COMMENT '商品状态[1-未支付,2-支付,3-出库,4-发货,....]', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 10016 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='售出记录'; +CREATE INDEX ix_sold_record ON `bubble_sold_record` (commodity_id); +CREATE INDEX ix_order_id_1 ON `bubble_sold_record` (order_id); + +/*支付流水*/ +DROP TABLE IF EXISTS `bubble_pay_flow`; +CREATE TABLE `bubble_pay_flow` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '业务id', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `commodity_type` tinyint(2) NOT NULL COMMENT '商品类型[1盲盒/2商城]', + `order_id` varchar(256) DEFAULT NULL COMMENT '系统订单id', + `transaction_id` varchar(256) DEFAULT NULL COMMENT '微信订单id', + `total` bigint(10) DEFAULT NULL COMMENT '订单总金额(分)', + `payer_total` bigint(11) DEFAULT NULL COMMENT '用户支付金额(分)', + `pay_method` tinyint(2) NOT NULL COMMENT '支付方式[1-微信/2-支付宝/3-银行卡/4-其他]', + `success_time` varchar(256) DEFAULT NULL COMMENT '支付完成时间', + `trade_state` varchar(256) DEFAULT NULL COMMENT '交易状态', + `callback_status` tinyint(2) NOT NULL COMMENT '回调状态[1-成功/2-失败/3-未回调]', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 10016 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='支付流水'; +CREATE INDEX IX_flow_user_id ON `bubble_pay_flow` (user_id); + +/*动态记录*/ +CREATE TABLE `bubble_dynamic_comment_record` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `dynamic_id` bigint(20) NOT NULL COMMENT '动态id', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `ix_comment_record_dynamic` (`dynamic_id`), + KEY `ix_comment_record_user` (`user_id`) +) ENGINE = InnoDB + AUTO_INCREMENT = 5001 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='评论记录'; +CREATE INDEX IX_dynamic_user_id ON `bubble_pay_flow` (user_id); + + +/*发货管理*/ +DROP TABLE IF EXISTS `bubble_send_goods`; +CREATE TABLE `bubble_send_goods` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '消息id', + `order_id` varchar(64) NOT NULL COMMENT '订单id', + `express_id` varchar(64) NOT NULL COMMENT '快递编号', + `goods_type` tinyint(2) NOT NULL COMMENT '类型[1盲盒/2商品]', + `express_name` varchar(64) NOT NULL COMMENT '快递公司', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 6500 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='发货管理'; +CREATE INDEX IX_send_goods ON `bubble_send_goods` (order_id); + + +/*退货记录*/ +DROP TABLE IF EXISTS `bubble_return_goods`; +CREATE TABLE `bubble_return_goods` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '消息id', + `order_id` varchar(64) NOT NULL COMMENT '订单id', + `return_to` tinyint(2) NOT NULL COMMENT '退款方向[1系统/2微信余额]', + `return_reason` varchar(256) NOT NULL COMMENT '退款原因', + `return_money` bigint(10) NOT NULL COMMENT '退款金额', + `return_type` tinyint(2) NOT NULL COMMENT '退货商品类型[1盲盒/2商品]', + `admin_id` bigint(20) NOT NULL COMMENT '管理员id', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `return_trade_no` varchar(64) NOT NULL COMMENT '管理员退款流水号', + `return_remark` varchar(256) NOT NULL COMMENT '管理员退款备注', + `img` varchar(512) NOT NULL COMMENT '用户图片', + `return_time` datetime DEFAULT NULL COMMENT '管理员退款时间', + `return_not_remark` varchar(256) NOT NULL COMMENT '管理员拒绝退款原因', + `return_status` tinyint(2) NOT NULL COMMENT '退款状态[1未处理/2处理同意退款/3不同意退款]', + `back_score` int(10) NOT NULL COMMENT '待返回积分', + `created_at` datetime DEFAULT NULL COMMENT '申请退款时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 75800 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='退货记录'; +CREATE INDEX IX_return_goods ON `bubble_send_goods` (order_id); + +/*微信提现成功*/ +DROP TABLE IF EXISTS `bubble_wechat_transfers`; +CREATE TABLE `bubble_wechat_transfers` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '消息id', + `order_id` varchar(64) NOT NULL COMMENT '订单id', + `return_money` bigint(10) NOT NULL COMMENT '提现金额', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `admin_id` bigint(20) NOT NULL COMMENT '管理id', + `transfer_status` bigint(20) NOT NULL COMMENT '审核状态[1未审核/2通过/3未通过]', + `transfer_remake` bigint(20) NOT NULL COMMENT '备注', + `mch_app_id` varchar(64) NOT NULL COMMENT 'appId', + `mch_id` varchar(64) NOT NULL COMMENT '商户id', + `nonce_str` varchar(64) NOT NULL COMMENT '随机字符串 ', + `partner_trade_no` varchar(64) NOT NULL COMMENT '商户订单号', + `payment_no` varchar(64) NOT NULL COMMENT '微信付款单号', + `payment_time` varchar(64) NOT NULL COMMENT '付款成功时间 ', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + `created_at` datetime DEFAULT NULL COMMENT '申请退款时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 75800 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='退货记录'; +CREATE INDEX IX_wechat_goods ON `bubble_wechat_transfers` (order_id); +CREATE INDEX IX_wechat_u_goods ON `bubble_wechat_transfers` (user_id); + +/*分享配置*/ + +/*发货管理*/ +DROP TABLE IF EXISTS `bubble_share_config`; +CREATE TABLE `bubble_share_config` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '消息id', + `share_img` varchar(256) NOT NULL COMMENT '分享图片', + `share_explain` varchar(64) NOT NULL COMMENT '分享说明', + `created_at` datetime DEFAULT NULL COMMENT '创建时间', + `updated_at` datetime DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 35200 + DEFAULT CHARSET = utf8mb4 + ROW_FORMAT = COMPACT COMMENT ='分享配置'; + + + diff --git a/controllers/app/print_temp.go b/controllers/app/print_temp.go new file mode 100644 index 0000000..34ce233 --- /dev/null +++ b/controllers/app/print_temp.go @@ -0,0 +1,120 @@ +package app + +import ( + "git.rosy.net.cn/jx-print/controllers/controller" + "git.rosy.net.cn/jx-print/model" + tempModel "git.rosy.net.cn/jx-print/model/app_model" + printServer "git.rosy.net.cn/jx-print/services/print_server/app_server" + "github.com/gin-gonic/gin" +) + +// AddOrUpdateTemp 模板添加 POST +// @Title 模板添加 +// @Description 模板添加 +// @Param token cookie string true "用户登录token" +// @Param data body app_model.AddTemp true "请求参数" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /addOrUpdateTemp [post] +func (p *Print) AddOrUpdateTemp(c *gin.Context) { + var ( + err error + tokenInfo *model.TokenInfo + param = tempModel.AddTemp{} + tempServer = printServer.TempServer{} + ) + if err = c.ShouldBind(¶m); err != nil { + controller.BuildErrJson(c, err) + return + } + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { + return + } + param.UserId = tokenInfo.User.UserID + + controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { + err = tempServer.AddOrUpdateTemp(¶m) + return retVal, "", err + }) +} + +// DeleteTemp 删除用户自定义模板 +// @Title 删除用户自定义模板 +// @Description 删除用户自定义模板 +// @Param token cookie string true "用户登录token" +// @Param data body app_model.DeleteTemp true "请求参数" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /deleteTemp [delete] +func (p *Print) DeleteTemp(c *gin.Context) { + var ( + err error + tokenInfo *model.TokenInfo + param = tempModel.DeleteTemp{} + tempServer = printServer.TempServer{} + ) + if err = c.ShouldBind(¶m); err != nil { + controller.BuildErrJson(c, err) + return + } + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { + return + } + controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { + err = tempServer.DeleteTemp(param.ID, tokenInfo.User.UserID) + return "", "", err + }) +} + +// GetUserTempList 获取用户模板,模板不足时填充系统模板 +// @Title 获取用户模板 +// @Description 获取用户模板 +// @Param token cookie string true "用户登录token" +// @Param data body app_model.DeleteTemp true "请求参数" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /getUserTempList [get] +func (p *Print) GetUserTempList(c *gin.Context) { + var ( + err error + tokenInfo *model.TokenInfo + param = tempModel.DeleteTemp{} + tempServer = printServer.TempServer{} + ) + if err = c.ShouldBind(¶m); err != nil { + controller.BuildErrJson(c, err) + return + } + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { + return + } + controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { + retVal, err = tempServer.QueryTempList(tokenInfo.User.UserID) + return retVal, "", err + }) +} + +// SwitchTemp 切换模板打印模板 +// @Title 切换模板 +// @Description 切换模板 +// @Param token cookie string true "用户登录token" +// @Param data body app_model.DeleteTemp true "请求参数" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /switchTemp [get] +func (p *Print) SwitchTemp(c *gin.Context) { + var ( + err error + tokenInfo *model.TokenInfo + param = tempModel.DeleteTemp{} + tempServer = printServer.TempServer{} + ) + if err = c.ShouldBind(¶m); err != nil { + controller.BuildErrJson(c, err) + return + } + controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { + err = tempServer.SwitchTemp(tokenInfo.User.UserID, param.ID) + return "", "", err + }) +} diff --git a/controllers/app/wx_login.go b/controllers/app/wx_login.go new file mode 100644 index 0000000..d11ab2d --- /dev/null +++ b/controllers/app/wx_login.go @@ -0,0 +1,85 @@ +package app + +import ( + "git.rosy.net.cn/jx-print/controllers/controller" + "git.rosy.net.cn/jx-print/model" + "git.rosy.net.cn/jx-print/model/app_model" + "git.rosy.net.cn/jx-print/services/print_server/app_server" + "github.com/gin-gonic/gin" + "net/http" +) + +type Auth2Controller struct{} + +var Auth2ControllerController = new(Auth2Controller) + +// Login 登录接口 +// @Title 登录接口 +// @Description 登录接口(微信与公众号登录不能直接调用此接口) +// @Param data body app_model.WxLoginReq true "请求参数" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /Login [post] +func (a *Auth2Controller) Login(c *gin.Context) { + // 参数绑定 + var ( + err error + params *app_model.WxLoginReq + service = app_server.UserLogin{} + ) + + if err = c.ShouldBind(¶ms); err != nil { + c.JSON(http.StatusOK, &model.CallBack{ + Code: model.ErrCodeNormal, + Desc: err.Error(), + }) + return + } + + controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { + user, err := service.WxLogin(c, params.Code, params.Phone) + if err != nil { + return nil, "", err + } + // 获取token + token, err := controller.SetToken(user) + if err != nil { + return nil, "", err + } + + return map[string]interface{}{"token": token, "user": user}, "", nil + }) +} + +// GetUserPhoneByWeChat 获取用户电话号码 +// @Title 获取用户电话号码 +// @Description 获取用户电话号码 +// @Param data body app_model.WeChatPhoneNumberParam true "请求参数" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /GetUserPhone [post] +func (a *Auth2Controller) GetUserPhoneByWeChat(c *gin.Context) { + // 参数绑定 + var ( + err error + params *app_model.WeChatPhoneNumberParam + service = app_server.UserLogin{} + ) + + if err = c.ShouldBind(¶ms); err != nil { + c.JSON(http.StatusOK, &model.CallBack{ + Code: model.ErrCodeNormal, + Desc: err.Error(), + }) + return + } + + controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { + phone, err := service.GetUserPhoneNum(params) + if err != nil { + return nil, "", err + } + + return map[string]interface{}{"phone": phone}, "", nil + }) +} diff --git a/controllers/app/wx_print.go b/controllers/app/wx_print.go new file mode 100644 index 0000000..ca2f0c2 --- /dev/null +++ b/controllers/app/wx_print.go @@ -0,0 +1,208 @@ +package app + +import ( + "git.rosy.net.cn/jx-print/controllers/controller" + "git.rosy.net.cn/jx-print/model" + print "git.rosy.net.cn/jx-print/model/app_model" + "git.rosy.net.cn/jx-print/putils" + printServer "git.rosy.net.cn/jx-print/services/print_server/app_server" + "github.com/gin-gonic/gin" +) + +type Print struct{} + +var PrintController = new(Print) + +// AddPrinters 添加打印机 POST +// @Title 添加打印机 +// @Description 添加打印机 +// @Param token cookie string true "用户登录token" +// @Param data body app_model.AddPrintReq true "请求参数" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /addPrinters [post] +func (p *Print) AddPrinters(c *gin.Context) { + var ( + err error + tokenInfo *model.TokenInfo + param = print.AddPrintReq{} + printInfo []*model.PrintInfo + ) + + if err = c.ShouldBind(¶m); err != nil { + controller.BuildErrJson(c, err) + return + } + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { + return + } + if err = putils.UnmarshalUseNumber([]byte(param.Prints), &printInfo); err != nil { + controller.BuildErrJson(c, err) + return + } + + controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { + err = printServer.AddPrinters(tokenInfo, param.AppID, printInfo) + return retVal, "", err + }) + +} + +// GetPrinters 查询打印机 GET +// @Title 查询打印机 +// @Description 查询打印机 +// @Param token cookie string true "用户登录token" +// @Param data body app_model.QueryPrintReq true "请求参数" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /getPrinters [get] +func (p *Print) GetPrinters(c *gin.Context) { + var ( + err error + tokenInfo *model.TokenInfo + param = print.QueryPrintReq{} + ) + if err = c.ShouldBind(¶m); err != nil { + controller.BuildErrJson(c, err) + return + } + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { + return + } + + controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { + retVal, err = printServer.GetPrinters(param.AppID, param.PrintNo, param.Name, param.Status, param.IsOnline, param.Offset, param.PageSize, tokenInfo.User.UserID) + return retVal, "", err + }) +} + +// DelPrinters 删除打印机 POST +// @Title 删除打印机 +// @Description 删除打印机 +// @Param token cookie string true "用户登录token" +// @Param data body app_model.QueryPrintReq true "请求参数" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /delPrinters [post] +func (p *Print) DelPrinters(c *gin.Context) { + var ( + err error + tokenInfo *model.TokenInfo + param = print.DeletePrintReq{} + printNos []string + ) + if err = c.ShouldBind(¶m); err != nil { + controller.BuildErrJson(c, err) + return + } + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { + return + } + if err = putils.UnmarshalUseNumber([]byte(param.PrintNos), &printNos); err != nil { + controller.BuildErrJson(c, err) + return + } + controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { + err = printServer.DelPrinters(param.AppID, tokenInfo, printNos) + return retVal, "", err + }) +} + +// UpdatePrinter 更新打印机 POST +// @Title 查询打印机 +// @Description 查询打印机 +// @Param token cookie string true "用户登录token" +// @Param data body app_model.UpdatePrintReq true "请求参数" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /updatePrinter [post] +func (p *Print) UpdatePrinter(c *gin.Context) { + var ( + err error + tokenInfo *model.TokenInfo + param = print.UpdatePrintReq{} + ) + if err = c.ShouldBind(¶m); err != nil { + controller.BuildErrJson(c, err) + return + } + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { + return + } + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { + err = printServer.UpdatePrinter(param.AppID, tokenInfo, param.PrintNo, param.Name, param.Sound, param.Volume) + return retVal, "", err + }) { + return + } + return +} + +// TestPrint 更新打印机 POST +// @Title 查询打印机 +// @Description 查询打印机 +// @Param token cookie string true "用户登录token" +// @Param data body app_model.UpdatePrintReq true "请求参数" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /testPrinter [post] +func (p *Print) TestPrint(c *gin.Context) { + var ( + err error + tokenInfo *model.TokenInfo + param = print.TestPrintReq{} + ) + if err = c.ShouldBind(¶m); err != nil { + controller.BuildErrJson(c, err) + return + } + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { + return + } + controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { + retVal, err = printServer.TestPrint(param.AppID, tokenInfo, param.PrintNo, param.OrderNo, param.Content) + return retVal, "", err + }) +} + +// GetPrintMessages 获取打印机消息 POST +// @Title 获取打印机消息 +// @Description 获取打印机消息 +// @Param token cookie string true "用户登录token" +// @Param data body app_model.UpdatePrintReq true "请求参数" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /getPrintMessages [get] +func (p *Print) GetPrintMessages(c *gin.Context) { + var ( + err error + tokenInfo *model.TokenInfo + param = print.GetPrintMsg{} + ) + if err = c.ShouldBind(¶m); err != nil { + controller.BuildErrJson(c, err) + return + } + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { + return + } + + controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { + retVal, err = printServer.GetPrintMessages(param.AppID, tokenInfo, param.PrintNo, param.MsgID, param.BeginAt, param.EndAt, param.Offset, param.PageSize) + return retVal, "", err + }) +} + +// StatPrinterReport 查询打印统计(首页) GET +func (p *Print) StatPrinterReport(c *gin.Context) { + var ( + tokenInfo *model.TokenInfo + ) + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { + return + } + controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { + retVal, err = printServer.GetPrinterReport(tokenInfo) + return retVal, "", err + }) +} diff --git a/controllers/app_controller.go b/controllers/app_controller.go index 6ecae4c..ac72116 100644 --- a/controllers/app_controller.go +++ b/controllers/app_controller.go @@ -1,6 +1,7 @@ package controllers import ( + "git.rosy.net.cn/jx-print/controllers/controller" "git.rosy.net.cn/jx-print/globals" "git.rosy.net.cn/jx-print/model" "git.rosy.net.cn/jx-print/services/print_server" @@ -13,10 +14,10 @@ func GetApps(c *gin.Context) { var ( tokenInfo *model.TokenInfo ) - if tokenInfo = checkToken(c); tokenInfo == nil { + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { retVal, err = print_server.GetApps(c, tokenInfo.User.UserID) return retVal, "", err }) { @@ -39,17 +40,17 @@ func AddApp(c *gin.Context) { param = &AddAppParam{} ) if err = c.ShouldBind(¶m); err != nil { - c.JSON(http.StatusOK, &CallBack{ + c.JSON(http.StatusOK, &model.CallBack{ Code: model.ErrCodeNormal, Desc: err.Error(), }) globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err) return } - if tokenInfo = checkToken(c); tokenInfo == nil { + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { err = print_server.AddApp(c, param.Code, param.Name, param.Mobile, tokenInfo.User.UserID) return retVal, "", err }) { @@ -68,17 +69,17 @@ func DelApp(c *gin.Context) { }{} ) if err = c.ShouldBind(¶m); err != nil { - c.JSON(http.StatusOK, &CallBack{ + c.JSON(http.StatusOK, &model.CallBack{ Code: model.ErrCodeNormal, Desc: err.Error(), }) globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err) return } - if tokenInfo = checkToken(c); tokenInfo == nil { + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { err = print_server.DelApp(c, param.AppID, tokenInfo.User.UserID) return retVal, "", err }) { diff --git a/controllers/callback_controller.go b/controllers/callback_controller.go index c4a6bcc..681f2fd 100644 --- a/controllers/callback_controller.go +++ b/controllers/callback_controller.go @@ -4,6 +4,7 @@ import ( "bytes" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-print/globals" + "git.rosy.net.cn/jx-print/model" "git.rosy.net.cn/jx-print/services/api" "git.rosy.net.cn/jx-print/services/print_server" "github.com/gin-gonic/gin" @@ -16,7 +17,7 @@ type CallbackController struct { func (t *CallbackController) Msg(c *gin.Context) { data, _ := ioutil.ReadAll(c.Request.Body) globals.SugarLogger.Debugf("callback msg : %v , user-agent :%s", string(data), c.Request.UserAgent()) - c.JSON(200, &CallBack{}) + c.JSON(200, &model.CallBack{}) } func (t *CallbackController) TlPayCallback(c *gin.Context) { @@ -27,5 +28,5 @@ func (t *CallbackController) TlPayCallback(c *gin.Context) { globals.SugarLogger.Debugf("tonglianapi callback callbackResponse:%s", utils.Format4Output(call, true)) print_server.PayTLCallback(call) } - c.JSON(200, &CallBack{}) + c.JSON(200, &model.CallBack{}) } diff --git a/controllers/controller.go b/controllers/controller/controller.go similarity index 73% rename from controllers/controller.go rename to controllers/controller/controller.go index 7751c3e..70f0616 100644 --- a/controllers/controller.go +++ b/controllers/controller/controller.go @@ -1,29 +1,26 @@ -package controllers +package controller import ( "encoding/json" "fmt" + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-print/globals" "git.rosy.net.cn/jx-print/model" + wxConst "git.rosy.net.cn/jx-print/model/app_model" "git.rosy.net.cn/jx-print/putils" "git.rosy.net.cn/jx-print/services/print_server" "github.com/dchest/captcha" "github.com/gin-gonic/gin" "net/http" "strings" + "time" ) -type CallBack struct { - Data string `json:"data"` - Code string `json:"code"` - Desc string `json:"desc"` -} - func init() { globals.SugarLogger.Debugf("test init ...") } -func checkToken(c *gin.Context) (tokenInfo *model.TokenInfo) { +func CheckToken(c *gin.Context) (tokenInfo *model.TokenInfo) { var ( cookie *http.Cookie err error @@ -33,9 +30,9 @@ func checkToken(c *gin.Context) (tokenInfo *model.TokenInfo) { tokenInfo = &model.TokenInfo{} //验证token //v2下的接口需要验证,v1不需要 - if !strings.Contains(c.Request.URL.String(), "v1") { + if !strings.Contains(c.Request.URL.String(), "v1") || !strings.Contains(c.Request.URL.String(), "app_no") { if cookie, err = c.Request.Cookie("token"); err != nil { - c.JSON(http.StatusOK, &CallBack{ + c.JSON(http.StatusOK, &model.CallBack{ Desc: err.Error(), Code: model.ErrCodeNormal, }) @@ -46,7 +43,7 @@ func checkToken(c *gin.Context) (tokenInfo *model.TokenInfo) { globals.SugarLogger.Debugf("checkToken token: %v", tokenInfo.Token) if tokenMap = putils.GetKey(tokenInfo.Token).(map[string]interface{}); tokenMap == nil { err = fmt.Errorf("token过期或无效,请重新登录!") - c.JSON(http.StatusOK, &CallBack{ + c.JSON(http.StatusOK, &model.CallBack{ Desc: err.Error(), Code: model.ErrCodeToken, }) @@ -57,7 +54,7 @@ func checkToken(c *gin.Context) (tokenInfo *model.TokenInfo) { tokenInfo.User = user } else { err = fmt.Errorf("token错误,请重新登录!") - c.JSON(http.StatusOK, &CallBack{ + c.JSON(http.StatusOK, &model.CallBack{ Desc: err.Error(), Code: model.ErrCodeToken, }) @@ -68,10 +65,10 @@ func checkToken(c *gin.Context) (tokenInfo *model.TokenInfo) { return tokenInfo } -func callFunc(c *gin.Context, worker func() (retVal interface{}, errCode string, err error)) bool { +func CallFunc(c *gin.Context, worker func() (retVal interface{}, errCode string, err error)) bool { var ( err error - callBack = &CallBack{ + callBack = &model.CallBack{ Code: model.ErrCodeNormal, } result interface{} @@ -104,7 +101,7 @@ func callFunc(c *gin.Context, worker func() (retVal interface{}, errCode string, return false } -func captchaVerify(c *gin.Context, code string) bool { +func CaptchaVerify(c *gin.Context, code string) bool { verifyCode := putils.GetKey(c.ClientIP() + model.SessionKey) if verifyCode == nil { return true @@ -116,8 +113,8 @@ func captchaVerify(c *gin.Context, code string) bool { return false } -func buildErrJson(c *gin.Context, err error) { - c.JSON(http.StatusOK, &CallBack{ +func BuildErrJson(c *gin.Context, err error) { + c.JSON(http.StatusOK, &model.CallBack{ Code: model.ErrCodeNormal, Desc: err.Error(), }) @@ -133,13 +130,30 @@ func GetConfig(c *gin.Context) { }{} ) if err = c.ShouldBind(¶m); err != nil { - buildErrJson(c, err) + BuildErrJson(c, err) return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !CallFunc(c, func() (retVal interface{}, errCode string, err error) { retVal, err = print_server.GetConfig(c, param.Type, param.Key) return retVal, "", err }) { return } } + +func SetToken(user *model.User) (token string, err error) { + token = createToken(user) + err = putils.SetKey(token, user, putils.DefTokenDuration) + return token, err +} + +func createToken(user *model.User) (token string) { + return strings.Join([]string{ + wxConst.TokenHeader, + wxConst.TokenVer, + user.UserID, + time.Now().Format("20060102-150405"), + utils.GetUUID(), + user.Name, + }, wxConst.TokenTypeSep) +} diff --git a/controllers/order_controller.go b/controllers/order_controller.go index 603b6ec..4dc5818 100644 --- a/controllers/order_controller.go +++ b/controllers/order_controller.go @@ -1,6 +1,7 @@ package controllers import ( + "git.rosy.net.cn/jx-print/controllers/controller" "git.rosy.net.cn/jx-print/model" "git.rosy.net.cn/jx-print/services/print_server" "github.com/gin-gonic/gin" @@ -18,13 +19,13 @@ func CreateOrder(c *gin.Context) { }{} ) if err = c.ShouldBind(¶m); err != nil { - buildErrJson(c, err) + controller.BuildErrJson(c, err) return } - if tokenInfo = checkToken(c); tokenInfo == nil { + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { retVal, err = print_server.CreateOrder(tokenInfo, param.OrderType, param.Origin, param.ThingID, param.TypeID) return retVal, "", err }) { @@ -43,13 +44,13 @@ func Pay(c *gin.Context) { }{} ) if err = c.ShouldBind(¶m); err != nil { - buildErrJson(c, err) + controller.BuildErrJson(c, err) return } - if tokenInfo = checkToken(c); tokenInfo == nil { + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { retVal, err = print_server.Pay(tokenInfo, param.OrderID, param.PayType, param.VendorPayType) return retVal, "", err }) { diff --git a/controllers/print_controller.go b/controllers/print_controller.go index 46f3bde..a112e2e 100644 --- a/controllers/print_controller.go +++ b/controllers/print_controller.go @@ -1,13 +1,14 @@ package controllers import ( + "git.rosy.net.cn/jx-print/controllers/controller" "git.rosy.net.cn/jx-print/model" "git.rosy.net.cn/jx-print/putils" "git.rosy.net.cn/jx-print/services/print_server" "github.com/gin-gonic/gin" ) -//添加打印机 POST +// AddPrinters 添加打印机 POST func AddPrinters(c *gin.Context) { var ( err error @@ -19,17 +20,17 @@ func AddPrinters(c *gin.Context) { printInfos []*model.PrintInfo ) if err = c.ShouldBind(¶m); err != nil { - buildErrJson(c, err) + controller.BuildErrJson(c, err) return } - if tokenInfo = checkToken(c); tokenInfo == nil { + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { return } if err = putils.UnmarshalUseNumber([]byte(param.Prints), &printInfos); err != nil { - buildErrJson(c, err) + controller.BuildErrJson(c, err) return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { err = print_server.AddPrinters(c, tokenInfo, param.AppID, printInfos) return retVal, "", err }) { @@ -54,13 +55,13 @@ func GetPrinters(c *gin.Context) { }{} ) if err = c.ShouldBind(¶m); err != nil { - buildErrJson(c, err) + controller.BuildErrJson(c, err) return } - if tokenInfo = checkToken(c); tokenInfo == nil { + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { retVal, err = print_server.GetPrinters(c, param.AppID, param.PrintNo, param.Name, param.Status, param.IsOnline, param.Offset, param.PageSize) return retVal, "", err }) { @@ -81,17 +82,17 @@ func DelPrinters(c *gin.Context) { printNos []string ) if err = c.ShouldBind(¶m); err != nil { - buildErrJson(c, err) + controller.BuildErrJson(c, err) return } - if tokenInfo = checkToken(c); tokenInfo == nil { + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { return } if err = putils.UnmarshalUseNumber([]byte(param.PrintNos), &printNos); err != nil { - buildErrJson(c, err) + controller.BuildErrJson(c, err) return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { err = print_server.DelPrinters(c, param.AppID, tokenInfo, printNos) return retVal, "", err }) { @@ -114,13 +115,13 @@ func UpdatePrinter(c *gin.Context) { }{} ) if err = c.ShouldBind(¶m); err != nil { - buildErrJson(c, err) + controller.BuildErrJson(c, err) return } - if tokenInfo = checkToken(c); tokenInfo == nil { + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { err = print_server.UpdatePrinter(c, param.AppID, tokenInfo, param.PrintNo, param.Name, param.Sound, param.Volume) return retVal, "", err }) { @@ -142,13 +143,13 @@ func TestPrint(c *gin.Context) { }{} ) if err = c.ShouldBind(¶m); err != nil { - buildErrJson(c, err) + controller.BuildErrJson(c, err) return } - if tokenInfo = checkToken(c); tokenInfo == nil { + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { retVal, err = print_server.TestPrint(c, param.AppID, tokenInfo, param.PrintNo, param.OrderNo, param.Content) return retVal, "", err }) { @@ -173,13 +174,13 @@ func GetPrintMessages(c *gin.Context) { }{} ) if err = c.ShouldBind(¶m); err != nil { - buildErrJson(c, err) + controller.BuildErrJson(c, err) return } - if tokenInfo = checkToken(c); tokenInfo == nil { + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { retVal, err = print_server.GetPrintMessages(c, param.AppID, tokenInfo, param.PrintNo, param.MsgID, param.BeginAt, param.EndAt, param.Offset, param.PageSize) return retVal, "", err }) { @@ -193,10 +194,10 @@ func GetPrinterReport(c *gin.Context) { var ( tokenInfo *model.TokenInfo ) - if tokenInfo = checkToken(c); tokenInfo == nil { + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { retVal, err = print_server.GetPrinterReport(c, tokenInfo) return retVal, "", err }) { diff --git a/controllers/sim_controller.go b/controllers/sim_controller.go index 040a895..8ae2c5b 100644 --- a/controllers/sim_controller.go +++ b/controllers/sim_controller.go @@ -1,6 +1,7 @@ package controllers import ( + "git.rosy.net.cn/jx-print/controllers/controller" "git.rosy.net.cn/jx-print/model" "git.rosy.net.cn/jx-print/services/print_server" "github.com/gin-gonic/gin" @@ -22,13 +23,13 @@ func GetCardsInfo(c *gin.Context) { }{} ) if err = c.ShouldBind(¶m); err != nil { - buildErrJson(c, err) + controller.BuildErrJson(c, err) return } - if tokenInfo = checkToken(c); tokenInfo == nil { + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { retVal, err = print_server.GetCardsInfo(tokenInfo, param.AppID, param.PrintNo, param.CardStatus, param.IccID, param.BeginDate, param.EndDate, param.Offset, param.PageSize) return retVal, "", err }) { @@ -52,13 +53,13 @@ func GetChargeInfo(c *gin.Context) { }{} ) if err = c.ShouldBind(¶m); err != nil { - buildErrJson(c, err) + controller.BuildErrJson(c, err) return } - if tokenInfo = checkToken(c); tokenInfo == nil { + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { retVal, err = print_server.GetChargeInfo(tokenInfo, param.AppID, param.PrintNo, param.IccID, param.BeginDate, param.EndDate, param.Offset, param.PageSize) return retVal, "", err }) { diff --git a/controllers/user_controller.go b/controllers/user_controller.go index f66e967..76df817 100644 --- a/controllers/user_controller.go +++ b/controllers/user_controller.go @@ -2,6 +2,7 @@ package controllers import ( "encoding/json" + "git.rosy.net.cn/jx-print/controllers/controller" "git.rosy.net.cn/jx-print/globals" "git.rosy.net.cn/jx-print/model" "git.rosy.net.cn/jx-print/putils" @@ -28,22 +29,22 @@ func RegisterUser(c *gin.Context) { user = &UserParam{} ) if err = c.ShouldBind(&user); err != nil { - c.JSON(http.StatusOK, &CallBack{ + c.JSON(http.StatusOK, &model.CallBack{ Code: model.ErrCodeNormal, Desc: err.Error(), }) globals.SugarLogger.Debugf("API :%s error:%v:", c.Request.URL, err) return } - if !captchaVerify(c, user.Code) { - c.JSON(http.StatusOK, &CallBack{ + if !controller.CaptchaVerify(c, user.Code) { + c.JSON(http.StatusOK, &model.CallBack{ Code: model.ErrCodeNormal, Desc: "验证码错误!", }) globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err) return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { err = print_server.RegisterUser(c, user.Name, user.Password) return retVal, "", err }) { @@ -59,22 +60,22 @@ func Login(c *gin.Context) { user = &UserParam{} ) if err = c.ShouldBind(&user); err != nil { - c.JSON(http.StatusOK, &CallBack{ + c.JSON(http.StatusOK, &model.CallBack{ Code: model.ErrCodeNormal, Desc: err.Error(), }) globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err) return } - if !captchaVerify(c, user.Code) { - c.JSON(http.StatusOK, &CallBack{ + if !controller.CaptchaVerify(c, user.Code) { + c.JSON(http.StatusOK, &model.CallBack{ Code: model.ErrCodeNormal, Desc: "验证码错误!", }) globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err) return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { retVal, err = print_server.Login(c, user.Name, user.Password) return retVal, "", err }) { @@ -88,11 +89,11 @@ func GetTokenInfo(c *gin.Context) { var ( tokenInfo *model.TokenInfo ) - if tokenInfo = checkToken(c); tokenInfo == nil { + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { return } data, _ := json.Marshal(tokenInfo) - c.JSON(http.StatusOK, &CallBack{ + c.JSON(http.StatusOK, &model.CallBack{ Code: model.ErrCodeSuccess, Data: string(data), }) @@ -104,10 +105,10 @@ func Logout(c *gin.Context) { var ( tokenInfo *model.TokenInfo ) - if tokenInfo = checkToken(c); tokenInfo == nil { + if tokenInfo = controller.CheckToken(c); tokenInfo == nil { return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { err = print_server.Logout(c, tokenInfo.Token) return retVal, "", err }) { @@ -125,17 +126,17 @@ func UpdateUser(c *gin.Context) { }{} ) if err = c.ShouldBind(&user); err != nil { - c.JSON(http.StatusOK, &CallBack{ + c.JSON(http.StatusOK, &model.CallBack{ Code: model.ErrCodeNormal, Desc: err.Error(), }) globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err) return } - if tokenInfo := checkToken(c); tokenInfo == nil { + if tokenInfo := controller.CheckToken(c); tokenInfo == nil { return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { err = print_server.UpdateUser(c, user.Payload) return retVal, "", err }) { @@ -146,7 +147,7 @@ func UpdateUser(c *gin.Context) { //获取菜单,文档 GET func GetMenus(c *gin.Context) { - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { retVal, err = print_server.GetMenus(c) return retVal, "", err }) { @@ -164,14 +165,14 @@ func GetMenuDetail(c *gin.Context) { }{} ) if err = c.ShouldBind(&user); err != nil { - c.JSON(http.StatusOK, &CallBack{ + c.JSON(http.StatusOK, &model.CallBack{ Code: model.ErrCodeNormal, Desc: err.Error(), }) globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err) return } - if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + if !controller.CallFunc(c, func() (retVal interface{}, errCode string, err error) { retVal, err = print_server.GetMenuDetail(c, user.ID) return retVal, "", err }) { diff --git a/dao/print_dao.go b/dao/print_dao.go index cde24bf..2bfaf85 100644 --- a/dao/print_dao.go +++ b/dao/print_dao.go @@ -40,7 +40,7 @@ func GetPrinters(db *sqlx.DB, appID int, printNo string, status, statusNeq, flow return printers, err } -func GetPrintersPage(db *sqlx.DB, appID int, printNo, name string, status, isOnline, offset, pageSize int) (page *model.PagedInfo, err error) { +func GetPrintersPage(db *sqlx.DB, appID int, printNo, name string, status, isOnline, offset, pageSize int, userId string) (page *model.PagedInfo, err error) { var ( printers []*model.Printer count int @@ -68,6 +68,10 @@ func GetPrintersPage(db *sqlx.DB, appID int, printNo, name string, status, isOnl sqlOhter += " AND name LIKE ?" sqlParams = append(sqlParams, "%"+name+"%") } + if userId != "" { + sqlOhter += " AND user_id = ?" + sqlParams = append(sqlParams, userId) + } if status != model.StatusAll { sqlOhter += " AND status = ?" sqlParams = append(sqlParams, status) diff --git a/dao/temp_dao.go b/dao/temp_dao.go new file mode 100644 index 0000000..806cb54 --- /dev/null +++ b/dao/temp_dao.go @@ -0,0 +1,80 @@ +package dao + +import ( + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-print/globals" + "git.rosy.net.cn/jx-print/model/app_model" +) + +// GetTempByName 根据模板名称获取模板 +func GetTempByName(userID, tempName string) ([]*app_model.SystemTemp, error) { + sql := `SELECT * FROM system_temp WHERE 1=1` + var param []interface{} + if userID != "" { + sql += ` AND user_id = ?` + param = append(param, userID) + } + if tempName != "" { + sql += ` AND temp_name = ?` + param = append(param, tempName) + } + sql += ` AND deleted_at = ?` + param = append(param, utils.DefaultTimeValue) + var result []*app_model.SystemTemp + + if err := globals.GetDB().Select(&result, sql, param...); err != nil { + return nil, err + } + return result, nil +} + +// AddTemp 添加模板数据 +func AddTemp(param *app_model.SystemTemp) error { + return Insert(globals.GetDB(), param) +} + +// UpdateOtherTempStatus 修改其他模板为非默认 +func UpdateOtherTempStatus(userId string) error { + _, err := globals.GetDB().Exec(`UPDATE system_temp SET is_use = ? WHERE user_id = ?`, []interface{}{2, userId}) + return err +} + +// UpdateTemp 删除模板数据 +func UpdateTemp(param *app_model.SystemTemp, fields []string) error { + return Update(globals.GetDB(), param, fields...) +} + +// DeleteTemp 删除模板数据 +func DeleteTemp(id int, userId string) error { + _, err := globals.GetDB().Exec(`DELETE FROM system_temp WHERE id = ? AND user_id = ?`, []interface{}{id, userId}...) + return err +} + +// SelectUserTemp 查询用户模板 +func SelectUserTemp(userId string) ([]*app_model.SystemTemp, error) { + var result []*app_model.SystemTemp + if err := globals.GetDB().Select(&result, `SELECT * FROM system_temp WHERE user_id = ? AND deleted_at = ? ORDER BY created_at desc `, []interface{}{userId}...); err != nil { + return nil, err + } + return result, nil +} + +// QuerySystemTemp 查询系统模板 +func QuerySystemTemp() ([]*app_model.SystemTemp, error) { + var result []*app_model.SystemTemp + if err := globals.GetDB().Select(&result, `SELECT * FROM system_temp WHERE user_id = 'system_user' ORDER BY created_at desc `, ""); err != nil { + return nil, err + } + return result, nil +} + +// SwitchTemp2User 切换模板 +func SwitchTemp2User(tempId int, userId string) error { + if _, err := globals.GetDB().Exec(`UPDATE system_temp SET is_use = 2 WHERE user_id = ?`, []interface{}{userId}...); err != nil { + return err + } + if _, err := globals.GetDB().Exec(`UPDATE system_temp SET is_use = 1 WHERE id = ? AND user_id = ?`, []interface{}{tempId, userId}...); err != nil { + return err + } + return nil +} diff --git a/dao/user_dao.go b/dao/user_dao.go index 1d1d3ff..9074708 100644 --- a/dao/user_dao.go +++ b/dao/user_dao.go @@ -2,11 +2,12 @@ package dao import ( "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-print/globals" "git.rosy.net.cn/jx-print/model" "github.com/jmoiron/sqlx" ) -func GetUsers(db *sqlx.DB, userID, name, mobile string) (users []*model.User, err error) { +func GetUsers(db *sqlx.DB, userID, name, mobile, openId string) (users []*model.User, err error) { sql := ` SELECT * FROM user @@ -25,6 +26,11 @@ func GetUsers(db *sqlx.DB, userID, name, mobile string) (users []*model.User, er sql += " AND mobile = ?" sqlParams = append(sqlParams, mobile) } + if openId != "" { + sql += " AND open_id = ?" + sqlParams = append(sqlParams, openId) + } + if err = db.Select(&users, sql, sqlParams...); err == nil { return users, err } @@ -86,3 +92,16 @@ func GetMenuDetail(db *sqlx.DB, id int) (menu *model.MenuDetail, err error) { } return menus[0], err } + +// CreateUserWx 创建微信用户 +func CreateUserWx(user *model.User) error { + db := globals.GetDB() + return Insert(db, &user) +} + +// UpdateUserWx 更新微信用户 +func UpdateUserWx(user *model.User, filed []string) error { + db := globals.GetDB() + // 用户存在,判断用户 + return Update(db, &user, filed...) +} diff --git a/dao/wx_login.go b/dao/wx_login.go new file mode 100644 index 0000000..07a0cc0 --- /dev/null +++ b/dao/wx_login.go @@ -0,0 +1 @@ +package dao diff --git a/main.go b/main.go index 142183e..1ea04fd 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,7 @@ import ( "git.rosy.net.cn/jx-print/routers" _ "git.rosy.net.cn/jx-print/services/api" "git.rosy.net.cn/jx-print/services/misc" + _ "git.rosy.net.cn/jx-print/services/print_server" "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/cookie" "github.com/gin-gonic/gin" diff --git a/model/app_model/app_print.go b/model/app_model/app_print.go new file mode 100644 index 0000000..429d062 --- /dev/null +++ b/model/app_model/app_print.go @@ -0,0 +1,46 @@ +package app_model + +type AddPrintReq struct { + AppID int `json:"app_id" form:"app_id" binding:"required"` + Prints string `json:"prints" form:"prints" binding:"required"` +} + +type QueryPrintReq struct { + AppID int `json:"app_id" form:"app_id" binding:"required"` // appId + PrintNo string `json:"print_no" form:"print_no"` //打印机编号 + Name string `json:"name" form:"name"` //打印机备注,模糊 + Status int `json:"status" form:"status"` //打印机状态。正常还是缺纸 + IsOnline int `json:"is_online" form:"is_online"` //在线状态。1在线,0离线 + Offset int `json:"offset" form:"offset"` // 跳过 + PageSize int `json:"page_size" form:"page_size" binding:"required"` // 页数 +} + +type DeletePrintReq struct { + AppID int `json:"app_id" form:"app_id" binding:"required"` + PrintNos string `json:"print_nos" form:"print_nos" binding:"required"` //打印机编号s +} + +type UpdatePrintReq struct { + AppID int `json:"app_id" form:"app_id" binding:"required"` // appId + PrintNo string `json:"print_no" form:"print_no" binding:"required"` //打印机编号 + Name string `json:"name" form:"name"` //打印机备注,模糊 + Sound string `json:"sound" form:"sound"` //声音类型 + Volume int `json:"volume" form:"volume"` //音量大小 +} + +type TestPrintReq struct { + AppID int `json:"app_id" form:"app_id" binding:"required"` + PrintNo string `json:"print_no" form:"print_no" binding:"required"` //打印机编号 + OrderNo int `json:"order_no" form:"order_no" binding:"required"` //订单序号 + Content string `json:"content" form:"content"` //打印内容 +} + +type GetPrintMsg struct { + AppID int `json:"app_id" form:"app_id" binding:"required"` + PrintNo string `json:"print_no" form:"print_no" binding:"required"` //打印机编号 + MsgID string `json:"msg_id" form:"msg_id"` //消息ID + BeginAt string `json:"begin_at" form:"begin_at"` //开始时间 默认一周内 + EndAt string `json:"end_at" form:"end_at"` + Offset int `json:"offset" form:"offset"` + PageSize int `json:"page_size" form:"page_size" binding:"required"` +} diff --git a/model/app_model/app_user_login.go b/model/app_model/app_user_login.go new file mode 100644 index 0000000..bc104d1 --- /dev/null +++ b/model/app_model/app_user_login.go @@ -0,0 +1,35 @@ +package app_model + +// 小程序配置 +const ( + WeChatAPPID = "xxx" + WeChatAPPSecret = "xxx" +) + +// LoginTypeWechat 登录配置 +const ( + LoginTypeWechat = "wechatMin" // 微信授权登录 + LoginTypePhone = "wechatPhone" // 电话登录 + LoginPassword = "location" // 账号登录 +) + +const ( + TokenHeader = "TOKEN" + TokenVer = "V2" + TokenTypeSep = "." +) + +// WeChatPhoneNumberParam 微信登陆 +type WeChatPhoneNumberParam struct { + EncryptedData string `json:"encrypted_data" form:"encrypted_data" binding:"required"` // 加密信息 + IV string `json:"iv" form:"iv" binding:"required"` // 加密算法初始量 + NickName string `json:"nick_name" form:"nick_name" binding:"required"` // 昵称 + HeadUrl string `json:"head_url" form:"head_url" binding:"required"` //头像图片地址 + Code string `json:"code" form:"code" binding:"required"` //code +} + +type WxLoginReq struct { + Code string `json:"code" form:"code"` // 微信授权登录使用 + Phone string `json:"phone" form:"phone"` // 微信和电话登录使用 + Password string `json:"password" form:"password"` // 密码登录 +} diff --git a/model/app_model/print_temp.go b/model/app_model/print_temp.go new file mode 100644 index 0000000..8b49b80 --- /dev/null +++ b/model/app_model/print_temp.go @@ -0,0 +1 @@ +package app_model diff --git a/model/app_model/print_test.go b/model/app_model/print_test.go new file mode 100644 index 0000000..73f05be --- /dev/null +++ b/model/app_model/print_test.go @@ -0,0 +1,14 @@ +package app_model + +import ( + "fmt" + "strings" + "testing" +) + +func TestPrintOrder(t *testing.T) { + aa := "1E 00 C1 02 00 FF 50 00 01 1B 40 1B 59 41 55 01 2D 20 2D 20 2D 20 2D\n20 2D 20 2D 20 2D 20 2D 20 2D 20 2D 20 2D 20 2D 20 2D 2D 20 2D 20 2D\n20 0A B2 CB C3 FB 20 20 20 20 20 20 20 20 CA FD C1 BF 20 20 20 20 20\n20 20 20 BD F0 B6 EE 0A B0 D7 C7 D0 BC A6 20 20 20 20 20 20 31 20 20\n20 20 20 20 20 20 20 20 20 31 35 0A 2D 20 2D 20 2D 20 2D 20 2D 20 2D\n20 2D 20 2D 20 2D 20 2D 20 2D 20 2D 20 2D 2D 20 2D 20 2D 20 0A 1b 61\n02 1b 21 30 D7 DC BD F0 B6 EE 3A 31 35 0A 1D 58 02 1b 5a 00 01 06 16\n00 68 74 74 70 73 3a 2f 2f 77 77 77 2e 62 61 69 64 75 2e 63 6f 6d 2f\n1b 61 00 0A 0A 0A 1B 40 FF" + cc := strings.Replace(aa, " ", "", -1) + dd := strings.Replace(cc, "\n", "", -1) + fmt.Println(dd) +} diff --git a/model/app_model/system_temp.go b/model/app_model/system_temp.go new file mode 100644 index 0000000..cb69851 --- /dev/null +++ b/model/app_model/system_temp.go @@ -0,0 +1,53 @@ +package app_model + +import "time" + +const ( + TempTypeMerchantUser = `user_store` // 商户自定义模板-商户看 + TempTypeConsumerUser = `user_consumer` // 商户自定义模板-消费用户看 + TempTypeMerchant = `sys_store` // 系统模板-商户看 + TempTypeConsumer = `sys_consumer` // 系统模板-消费用户看 +) + +const ( + SystemTempSizeBig = "big" + SystemTempSizeSmall = "small" + SystemTempSizeMedium = "medium" +) + +type SystemTemp struct { + ID int `json:"id" db:"id"` + CreatedAt *time.Time `json:"created_at" db:"created_at"` + UpdatedAt *time.Time `json:"updated_at" db:"updated_at"` + LastOperator string `json:"last_operator" db:"last_operator"` + DeletedAt *time.Time `json:"deleted_at" db:"deleted_at"` + TempName string `json:"temp_name" db:"temp_name"` // 模板名称 + TempRank string `json:"temp_rank" db:"temp_rank"` // 模板顺序 + Temp string `json:"temp" db:"temp"` // 模板 + UserId string `json:"user_id" db:"user_id"` // 所属用户 + TempType string `json:"temp_type" db:"temp_type"` // 模板类型 + TempSize string `json:"temp_size" db:"temp_size"` // 模板尺寸 big/medium/small + PrintSn string `json:"print_sn" db:"print_sn"` // 模板所属打印机 + IsUse int `json:"is_use" db:"is_use"` // 默认使用 1-使用/2-不使用 +} + +type AddTemp struct { + ID int `json:"id" form:"id"` // 修改时传入 + TempName string `json:"temp_name" form:"temp_name" binding:"required"` // 模板名称 + Temp string `json:"temp" form:"temp" binding:"required"` // 模板 + UserId string `json:"user_id" form:"user_id"` // 所属用户 + TempType string `json:"temp_type" form:"temp_type" binding:"required"` // 模板类型 + TempSize string `json:"temp_size" form:"temp_size" binding:"required"` // 模板尺寸 big/medium/small + PrintSn string `json:"print_sn" db:"print_sn" binding:"required"` // 模板所属打印机 + IsUse int `json:"is_use" db:"is_use" binding:"required"` // 默认使用 1-使用/2-不使用 +} + +type TempContext struct { + Rank int `json:"rank"` // 排序值 1 + DefinitionName string `json:"definition_name"` // 用户定义字段名称 下单时间 + MatchContext string `json:"match_context"` // 匹配字段 payOrderTime +} + +type DeleteTemp struct { + ID int `json:"id" form:"id"` // 修改时传入 +} diff --git a/model/model.go b/model/model.go index 06e84b3..dc16199 100644 --- a/model/model.go +++ b/model/model.go @@ -79,9 +79,9 @@ type FlowConfig struct { } type PrintInfo struct { - PrintNo string `json:"print_no" form:"print_no" binding:"required"` //打印机编号 - Name string `json:"name" form:"name"` //打印机备注 - //SIM string `json:"sim" form:"sim"` //流量卡号码 + PrintNo string `json:"print_no" form:"print_no" binding:"required"` //打印机编号 + Name string `json:"name" form:"name"` //打印机备注 + PrintKey string `json:"print_key" form:"print_key"` //打印机识别码 } type PagedInfo struct { @@ -98,30 +98,31 @@ type ModelIDCULD struct { } type User struct { - ID int `json:"id" db:"id"` - CreatedAt *time.Time `json:"created_at" db:"created_at"` - UpdatedAt *time.Time `json:"updated_at" db:"updated_at"` - LastOperator string `json:"last_operator" db:"last_operator"` - DeletedAt *time.Time `json:"deleted_at" db:"deleted_at"` - UserID string `json:"user_id" db:"user_id"` // 内部唯一标识 - Password string `json:"password"` //密码 - Name string `json:"name"` // 外部显示标识(当前可以重复) - Mobile string `json:"mobile"` - Email string `json:"email"` - Avatar string `json:"avatar"` // 头像 - Status int8 `json:"status"` - Type int8 `json:"type"` // 用户类型 - Company string `json:"company"` //公司名称 - CityCode int `json:"city_code" db:"city_code"` - DistrictCode int `json:"district_code" db:"district_code"` - Address string `json:"address"` - - IDCardNo string `json:"id_card_no" db:"id_card_no"` // 身份证号 - Remark string `json:"remark"` - + ID int `json:"id" db:"id"` + CreatedAt *time.Time `json:"created_at" db:"created_at"` + UpdatedAt *time.Time `json:"updated_at" db:"updated_at"` + LastOperator string `json:"last_operator" db:"last_operator"` + DeletedAt *time.Time `json:"deleted_at" db:"deleted_at"` + UserID string `json:"user_id" db:"user_id"` // 内部唯一标识 + Password string `json:"password"` //密码 + Name string `json:"name"` // 外部显示标识(当前可以重复) + Mobile string `json:"mobile"` + Email string `json:"email"` + Avatar string `json:"avatar"` // 头像 + Status int8 `json:"status"` // 用户状态 1-正常/2-禁用 + Type int8 `json:"type"` // 用户类型 1-管理用户/2-微信用户/3-管理微信统一账户 + Company string `json:"company"` //公司名称 + CityCode int `json:"city_code" db:"city_code"` + DistrictCode int `json:"district_code" db:"district_code"` + Address string `json:"address"` + IDCardNo string `json:"id_card_no" db:"id_card_no"` // 身份证号 + Remark string `json:"remark"` LastLoginAt *time.Time `json:"last_login_at" db:"last_login_at"` LastLoginIP string `json:"last_login_ip" db:"last_login_ip"` - LastLoginType string `json:"last_login_type" db:"last_login_type"` + LastLoginType string `json:"last_login_type" db:"last_login_type"` // 最后登录类型 + OpenId string `json:"open_id" db:"open_id"` // 微信用户openId + UnionId string `json:"union_id" db:"union_id"` // 微信用户Id + } type Apps struct { @@ -188,6 +189,7 @@ type Printer struct { Volume int `json:"volume"` //音量,1-5 ,对应打印机2-10 FlowFlag int `json:"flow_flag" db:"flow_flag"` //是否超流量了,1表示超了 OfflineCount int `json:"-" db:"offline_count"` //掉线次数 + UserId string `json:"user_id" db:"user_id"` //打印机所属用户 } type PrintMsg struct { @@ -198,7 +200,7 @@ type PrintMsg struct { DeletedAt *time.Time `json:"deleted_at" db:"deleted_at"` MsgID string `json:"msg_id" db:"msg_id"` //消息ID PrintNo string `json:"print_no" db:"print_no"` //打印机编号 - OrderNo int `json:"order_no" db:"order_no"` //订单序号 + OrderNo string `json:"order_no" db:"order_no"` //订单序号 Content string `json:"content"` //订单内容 Status int `json:"status"` //打印状态 Comment string `json:"comment"` //失败原因 @@ -256,3 +258,10 @@ type NewConfig struct { Key string `json:"key"` Value string `json:"value"` } + +// CallBack 公共返回参数 +type CallBack struct { + Data string `json:"data"` + Code string `json:"code"` + Desc string `json:"desc"` +} diff --git a/routers/print_router.go b/routers/print_router.go deleted file mode 100644 index b5e2a9b..0000000 --- a/routers/print_router.go +++ /dev/null @@ -1,17 +0,0 @@ -package routers - -import "github.com/gin-gonic/gin" - -func InitPrintRouter(r *gin.Engine) { - //group := r.Group("/v2") - - // 我的基本信息 - { - //groupMyPrint := group.Group("/storePrint") - //groupMyPrint.GET() - } -} - -func InitOtherRequest(r *gin.Engine) { - -} diff --git a/routers/router.go b/routers/router.go index 3b515b0..b048b02 100644 --- a/routers/router.go +++ b/routers/router.go @@ -7,50 +7,15 @@ import ( ) func Init(r *gin.Engine) { - v2 := r.Group("/v2") - //user - user := v2.Group("/user") - user.GET("/getTokenInfo", controllers.GetTokenInfo) - user.POST("/logout", controllers.Logout) - user.POST("/updateUser", controllers.UpdateUser) + // 需要token-管理系统 + InitV2System(r.Group("/v2")) - //app - app := v2.Group("/app") - app.GET("/getApps", controllers.GetApps) - app.POST("/addApp", controllers.AddApp) - app.POST("/delApp", controllers.DelApp) + //v1是不需要token的-管理系统 + InitV1System(r.Group("v1")) - //print - print := v2.Group("/print") - print.POST("/addPrinters", controllers.AddPrinters) - print.GET("/getPrinters", controllers.GetPrinters) - print.POST("/delPrinters", controllers.DelPrinters) - print.POST("/updatePrinter", controllers.UpdatePrinter) - print.POST("/testPrint", controllers.TestPrint) - print.GET("/getPrintMessages", controllers.GetPrintMessages) - print.GET("/getPrinterReport", controllers.GetPrinterReport) + // app端不需要token - //order - order := v2.Group("/order") - order.POST("/createOrder", controllers.CreateOrder) - order.POST("/pay", controllers.Pay) - //sim - sim := v2.Group("/sim") - sim.GET("/getCardsInfo", controllers.GetCardsInfo) - sim.GET("/getChargeInfo", controllers.GetChargeInfo) - - //v1是不需要token的 - v1 := r.Group("v1") - userw := v1.Group("/user") - userw.POST("/login", controllers.Login) - userw.GET("/refreshCode", controllers.RefreshCode) - userw.POST("/register", controllers.RegisterUser) - userw.GET("/getMenus", controllers.GetMenus) - userw.GET("/getMenuDetail", controllers.GetMenuDetail) - - //config - config := v1.Group("/config") - config.GET("/getConfig", controllers.GetConfig) + // app端需要token //自动路由 r.Any("/callback/*path", router.AutoRoute(&controllers.CallbackController{})) diff --git a/routers/v1_router.go b/routers/v1_router.go new file mode 100644 index 0000000..34e19c1 --- /dev/null +++ b/routers/v1_router.go @@ -0,0 +1,20 @@ +package routers + +import ( + "git.rosy.net.cn/jx-print/controllers" + "git.rosy.net.cn/jx-print/controllers/controller" + "github.com/gin-gonic/gin" +) + +func InitV1System(v1 *gin.RouterGroup) { + userw := v1.Group("/user") + userw.POST("/login", controllers.Login) + userw.GET("/refreshCode", controllers.RefreshCode) + userw.POST("/register", controllers.RegisterUser) + userw.GET("/getMenus", controllers.GetMenus) + userw.GET("/getMenuDetail", controllers.GetMenuDetail) + + //config + config := v1.Group("/config") + config.GET("/getConfig", controller.GetConfig) +} diff --git a/routers/v2_router.go b/routers/v2_router.go new file mode 100644 index 0000000..97f19f4 --- /dev/null +++ b/routers/v2_router.go @@ -0,0 +1,39 @@ +package routers + +import ( + "git.rosy.net.cn/jx-print/controllers" + "github.com/gin-gonic/gin" +) + +func InitV2System(v2 *gin.RouterGroup) { + //user + user := v2.Group("/user") + user.GET("/getTokenInfo", controllers.GetTokenInfo) + user.POST("/logout", controllers.Logout) + user.POST("/updateUser", controllers.UpdateUser) + + //app + app := v2.Group("/app") + app.GET("/getApps", controllers.GetApps) + app.POST("/addApp", controllers.AddApp) + app.POST("/delApp", controllers.DelApp) + + //print + print := v2.Group("/print") + print.POST("/addPrinters", controllers.AddPrinters) + print.GET("/getPrinters", controllers.GetPrinters) + print.POST("/delPrinters", controllers.DelPrinters) + print.POST("/updatePrinter", controllers.UpdatePrinter) + print.POST("/testPrint", controllers.TestPrint) + print.GET("/getPrintMessages", controllers.GetPrintMessages) + print.GET("/getPrinterReport", controllers.GetPrinterReport) + + //order + order := v2.Group("/order") + order.POST("/createOrder", controllers.CreateOrder) + order.POST("/pay", controllers.Pay) + //sim + sim := v2.Group("/sim") + sim.GET("/getCardsInfo", controllers.GetCardsInfo) + sim.GET("/getChargeInfo", controllers.GetChargeInfo) +} diff --git a/routers/v3_app_router.go b/routers/v3_app_router.go new file mode 100644 index 0000000..7ae5bfc --- /dev/null +++ b/routers/v3_app_router.go @@ -0,0 +1,14 @@ +package routers + +import ( + "git.rosy.net.cn/jx-print/controllers/app" + "github.com/gin-gonic/gin" +) + +// InitV3App 小程序端,不需要token +func InitV3App(v2 *gin.RouterGroup) { + appNo := v2.Group("/app_no") + + appNo.POST("/getUserPhone", app.Auth2ControllerController.GetUserPhoneByWeChat) // 获取微信用户电话 + appNo.POST("/login", app.Auth2ControllerController.Login) // 微信登录 +} diff --git a/routers/v4_app_router.go b/routers/v4_app_router.go new file mode 100644 index 0000000..741e94f --- /dev/null +++ b/routers/v4_app_router.go @@ -0,0 +1,28 @@ +package routers + +import ( + "git.rosy.net.cn/jx-print/controllers/app" + "github.com/gin-gonic/gin" +) + +// InitV4App 小程序端,需要token +func InitV4App(v2 *gin.RouterGroup) { + appYes := v2.Group("/app_need") + + // 打印机管理 + appYes.POST("/addPrinters", app.Print{}.AddPrinters) // 添加打印机 + appYes.GET("/getPrinters", app.Print{}.GetPrinters) // 查询打印机 + appYes.POST("/delPrinters", app.Print{}.DelPrinters) // 删除打印机 + appYes.POST("/updatePrinter", app.Print{}.UpdatePrinter) // 修改打印机 + appYes.POST("/testPrinter", app.Print{}.TestPrint) // 测试打印机 + appYes.GET("/getPrintMessages", app.Print{}.GetPrintMessages) // 打印机消息列表 + appYes.GET("/statPrinter", app.Print{}.StatPrinterReport) // 打印消息统计 + + // 模板管理 + temp := v2.Group("/temp") + temp.POST("/addOrUpdateTemp", app.Print{}.AddOrUpdateTemp) // 模板添加/修改 + temp.DELETE("/deleteTemp", app.Print{}.DeleteTemp) // 删除用户自定义模板 + temp.GET("/getUserTempList", app.Print{}.GetUserTempList) // 获取用户模板,模板不足时填充系统模板 + temp.GET("/switchTemp", app.Print{}.SwitchTemp) // 切换模板打印模板 + +} diff --git a/services/api/api.go b/services/api/api.go index e4a78fe..102f074 100644 --- a/services/api/api.go +++ b/services/api/api.go @@ -4,7 +4,9 @@ import ( "git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi/platformapi/tibiotapi" "git.rosy.net.cn/baseapi/platformapi/tonglianpayapi" + "git.rosy.net.cn/baseapi/platformapi/weixinapi" "git.rosy.net.cn/jx-print/globals" + wx "git.rosy.net.cn/jx-print/model/app_model" aliyunsmsclient "github.com/KenmyZhang/aliyun-communicate" "go.uber.org/zap" ) @@ -14,8 +16,10 @@ var ( SMSClient *aliyunsmsclient.SmsClient - TibiotAPI *tibiotapi.API - TLpayAPI *tonglianpayapi.API //通联收银宝api + TibiotAPI *tibiotapi.API + TLpayAPI *tonglianpayapi.API //通联收银宝api + WeixinMiniAPI *weixinapi.API // 微信小程序 + ) func init() { @@ -26,4 +30,6 @@ func init() { TibiotAPI = tibiotapi.New("ruoxikeji", "Ruoxi@369") SMSClient = aliyunsmsclient.New("http://dysmsapi.aliyuncs.com/") TLpayAPI = tonglianpayapi.New("00183083", "18048531223", "56065105499TVAH") + WeixinMiniAPI = weixinapi.New(wx.WeChatAPPID, wx.WeChatAPPSecret) + } diff --git a/services/print_server/app_server/temp.go b/services/print_server/app_server/temp.go new file mode 100644 index 0000000..21bdfed --- /dev/null +++ b/services/print_server/app_server/temp.go @@ -0,0 +1,207 @@ +package app_server + +import ( + "encoding/json" + "errors" + "fmt" + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-print/dao" + tempModel "git.rosy.net.cn/jx-print/model/app_model" + "sort" + "time" +) + +type TempServer struct { +} + +// MakeSystemTempFontSmall 制作系统模板小字体 +func (t *TempServer) MakeSystemTempFontSmall(param map[string]interface{}) (string, error) { + if len(param) <= 0 { + return "", errors.New("参数不能为空") + } + orderPrint := &JXPrintData{} + if err := utils.Map2StructByJson(param, orderPrint, false); err != nil { + return "", errors.New("参数不能为空") + } + // 头部模板,订单 + var orderParams []interface{} + headTemp := tempBegin + orderParams = append(orderParams, orderPrint.EBailOrderNo, orderPrint.PayOrderTime, orderPrint.TrySendTime, orderPrint.OrderNo) + // 是否为预订单 + if orderPrint.BusinessType == "2" { + headTemp += tempBusiness + } + + // 订单来源信息 + pickupTemp := tempBegin2 + orderParams = append(orderParams, orderPrint.VendorName, orderPrint.VendorOrderNo, orderPrint.QRCOrder) + if orderPrint.VendorID == utils.Int2Str(model.VendorIDEBAI) { + getCode := fmt.Sprintf(tempEBail, orderPrint.VendorName, orderPrint.EBaiCode) + pickupTemp += getCode + } + + // 客户信息 + userInfo := tempBegin3 + orderParams = append(orderParams, orderPrint.ConsigneeName, orderPrint.ConsigneeMobile, orderPrint.ConsigneeAddress, orderPrint.BuyerComment) + + // 商品信息 + skuList := "" + for _, v := range orderPrint.SkuList { + sku := fmt.Sprintf(skuListTemp, v.SkuName, v.SkuCount, v.SalePrice, v.TotalCountPrice) + if v.Upc != "" { + sku += fmt.Sprintf(`