修改打印模板
This commit is contained in:
606
111.sql
Normal file
606
111.sql
Normal file
@@ -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 ='分享配置';
|
||||
|
||||
|
||||
|
||||
120
controllers/app/print_temp.go
Normal file
120
controllers/app/print_temp.go
Normal file
@@ -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
|
||||
})
|
||||
}
|
||||
85
controllers/app/wx_login.go
Normal file
85
controllers/app/wx_login.go
Normal file
@@ -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
|
||||
})
|
||||
}
|
||||
208
controllers/app/wx_print.go
Normal file
208
controllers/app/wx_print.go
Normal file
@@ -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
|
||||
})
|
||||
}
|
||||
@@ -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
|
||||
}) {
|
||||
|
||||
@@ -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{})
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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
|
||||
}) {
|
||||
|
||||
@@ -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
|
||||
}) {
|
||||
|
||||
@@ -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
|
||||
}) {
|
||||
|
||||
@@ -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
|
||||
}) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
80
dao/temp_dao.go
Normal file
80
dao/temp_dao.go
Normal file
@@ -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
|
||||
}
|
||||
@@ -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...)
|
||||
}
|
||||
|
||||
1
dao/wx_login.go
Normal file
1
dao/wx_login.go
Normal file
@@ -0,0 +1 @@
|
||||
package dao
|
||||
1
main.go
1
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"
|
||||
|
||||
46
model/app_model/app_print.go
Normal file
46
model/app_model/app_print.go
Normal file
@@ -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"`
|
||||
}
|
||||
35
model/app_model/app_user_login.go
Normal file
35
model/app_model/app_user_login.go
Normal file
@@ -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"` // 密码登录
|
||||
}
|
||||
1
model/app_model/print_temp.go
Normal file
1
model/app_model/print_temp.go
Normal file
@@ -0,0 +1 @@
|
||||
package app_model
|
||||
14
model/app_model/print_test.go
Normal file
14
model/app_model/print_test.go
Normal file
@@ -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)
|
||||
}
|
||||
53
model/app_model/system_temp.go
Normal file
53
model/app_model/system_temp.go
Normal file
@@ -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"` // 修改时传入
|
||||
}
|
||||
@@ -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"`
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
}
|
||||
@@ -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{}))
|
||||
|
||||
20
routers/v1_router.go
Normal file
20
routers/v1_router.go
Normal file
@@ -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)
|
||||
}
|
||||
39
routers/v2_router.go
Normal file
39
routers/v2_router.go
Normal file
@@ -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)
|
||||
}
|
||||
14
routers/v3_app_router.go
Normal file
14
routers/v3_app_router.go
Normal file
@@ -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) // 微信登录
|
||||
}
|
||||
28
routers/v4_app_router.go
Normal file
28
routers/v4_app_router.go
Normal file
@@ -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) // 切换模板打印模板
|
||||
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
}
|
||||
|
||||
207
services/print_server/app_server/temp.go
Normal file
207
services/print_server/app_server/temp.go
Normal file
@@ -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(`<center>upc码:%s</center><br>`, v.Upc)
|
||||
}
|
||||
skuList += sku
|
||||
}
|
||||
|
||||
// 统计信息
|
||||
statInfo := tempEnd
|
||||
orderParams = append(orderParams, orderPrint.AllSkuTypeCount, orderPrint.AllSkuCount, orderPrint.StoreName, orderPrint.StoreTel, orderPrint.OfficialName)
|
||||
// 语音模板
|
||||
soundTemp := fmt.Sprintf(soundTemp, "老板,你有新订单了")
|
||||
orderFmt := soundTemp + pickupTemp + userInfo + skuList + statInfo
|
||||
return fmt.Sprintf(orderFmt, orderParams), nil
|
||||
}
|
||||
|
||||
// MakeSystemTempFontBig 制作系统模板大字体
|
||||
func (t *TempServer) MakeSystemTempFontBig(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 := tempBeginBig
|
||||
orderParams = append(orderParams, orderPrint.EBailOrderNo, orderPrint.PayOrderTime, orderPrint.TrySendTime, orderPrint.OrderNo)
|
||||
// 是否为预订单
|
||||
if orderPrint.BusinessType == "2" {
|
||||
headTemp += tempBusinessBig
|
||||
}
|
||||
|
||||
// 订单来源信息
|
||||
pickupTemp := tempBegin2Big
|
||||
orderParams = append(orderParams, orderPrint.VendorName, orderPrint.VendorOrderNo, orderPrint.QRCOrder)
|
||||
if orderPrint.VendorID == utils.Int2Str(model.VendorIDEBAI) {
|
||||
getCode := fmt.Sprintf(tempEBailBig, orderPrint.VendorName, orderPrint.EBaiCode)
|
||||
pickupTemp += getCode
|
||||
}
|
||||
|
||||
// 客户信息
|
||||
userInfo := tempBegin3Big
|
||||
orderParams = append(orderParams, orderPrint.ConsigneeName, orderPrint.ConsigneeMobile, orderPrint.ConsigneeAddress, orderPrint.BuyerComment)
|
||||
|
||||
// 商品信息
|
||||
skuList := ""
|
||||
for _, v := range orderPrint.SkuList {
|
||||
sku := fmt.Sprintf(skuListTempBig, v.SkuName, v.SkuCount, v.SalePrice, v.TotalCountPrice)
|
||||
if v.Upc != "" {
|
||||
sku += fmt.Sprintf(`<center>upc码:%s</center><br>`, v.Upc)
|
||||
}
|
||||
skuList += sku
|
||||
}
|
||||
|
||||
// 统计信息
|
||||
statInfo := tempEndBig
|
||||
orderParams = append(orderParams, orderPrint.AllSkuTypeCount, orderPrint.AllSkuCount, orderPrint.StoreName, orderPrint.StoreTel, orderPrint.OfficialName)
|
||||
// 语音模板
|
||||
soundTemp := fmt.Sprintf(soundTemp, "老板,你有新订单了")
|
||||
orderFmt := soundTemp + pickupTemp + userInfo + skuList + statInfo
|
||||
return fmt.Sprintf(orderFmt, orderParams), nil
|
||||
}
|
||||
|
||||
// AddOrUpdateTemp 添加或者修改模板
|
||||
func (t *TempServer) AddOrUpdateTemp(param *tempModel.AddTemp) error {
|
||||
temp, err := dao.GetTempByName(param.UserId, param.TempName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(temp) > 0 {
|
||||
return errors.New("模板名称重复")
|
||||
}
|
||||
|
||||
// 解析模板
|
||||
var tempTagList []*tempModel.TempContext
|
||||
if err := json.Unmarshal([]byte(param.Temp), tempTagList); err != nil {
|
||||
return err
|
||||
}
|
||||
sort.Slice(tempTagList, func(i, j int) bool {
|
||||
if tempTagList[i].Rank > tempTagList[j].Rank {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
})
|
||||
|
||||
rankKey := ""
|
||||
contextStr := "{"
|
||||
for i := 0; i < len(tempTagList); i++ {
|
||||
if i != len(tempTagList)-1 {
|
||||
key := tempTagList[i].MatchContext + ","
|
||||
rankKey += key
|
||||
} else {
|
||||
rankKey += tempTagList[i].MatchContext
|
||||
}
|
||||
}
|
||||
for i := 0; i < len(tempTagList); i++ {
|
||||
if i != len(tempTagList)-1 {
|
||||
contextStr += tempTagList[i].MatchContext + ":" + tempTagList[i].MatchContext + ","
|
||||
} else {
|
||||
contextStr += tempTagList[i].MatchContext + ":" + tempTagList[i].MatchContext + "}"
|
||||
}
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
userTemp := &tempModel.SystemTemp{
|
||||
TempName: param.TempName,
|
||||
TempRank: rankKey,
|
||||
Temp: contextStr,
|
||||
UserId: param.UserId,
|
||||
TempType: param.TempType,
|
||||
TempSize: param.TempSize,
|
||||
LastOperator: param.UserId,
|
||||
DeletedAt: &utils.DefaultTimeValue,
|
||||
PrintSn: param.PrintSn,
|
||||
IsUse: param.IsUse,
|
||||
}
|
||||
|
||||
// 如果默认打印改模板,其他打印模板则改成不使用
|
||||
if param.IsUse == 1 {
|
||||
if err := dao.UpdateOtherTempStatus(param.UserId); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
// 新增
|
||||
if param.ID == 0 {
|
||||
userTemp.CreatedAt = &now
|
||||
userTemp.UpdatedAt = &now
|
||||
return dao.AddTemp(userTemp)
|
||||
}
|
||||
|
||||
// 修改
|
||||
userTemp.UpdatedAt = &now
|
||||
userTemp.ID = param.ID
|
||||
return dao.UpdateTemp(userTemp, []string{"id"})
|
||||
}
|
||||
|
||||
// DeleteTemp 删除模板
|
||||
func (t *TempServer) DeleteTemp(id int, userId string) error {
|
||||
return dao.DeleteTemp(id, userId)
|
||||
}
|
||||
|
||||
// QueryTempList 查询用户模板
|
||||
func (t *TempServer) QueryTempList(userId string) ([]*tempModel.SystemTemp, error) {
|
||||
return dao.SelectUserTemp(userId)
|
||||
}
|
||||
|
||||
// QuerySystemTemp 查询系统模板
|
||||
func (t *TempServer) QuerySystemTemp() ([]*tempModel.SystemTemp, error) {
|
||||
return dao.QuerySystemTemp()
|
||||
}
|
||||
|
||||
// SwitchTemp 切换使用模板
|
||||
func (t *TempServer) SwitchTemp(userId string, tempId int) error {
|
||||
return dao.SwitchTemp2User(tempId, userId)
|
||||
}
|
||||
440
services/print_server/app_server/temp_config.go
Normal file
440
services/print_server/app_server/temp_config.go
Normal file
@@ -0,0 +1,440 @@
|
||||
package app_server
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-print/dao"
|
||||
"git.rosy.net.cn/jx-print/globals"
|
||||
tempModel "git.rosy.net.cn/jx-print/model/app_model"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
var SystemTemp map[string]*tempModel.SystemTemp
|
||||
|
||||
func init() {
|
||||
var sysTemp = TempServer{}
|
||||
sysTempList, err := sysTemp.QuerySystemTemp()
|
||||
if err != nil {
|
||||
globals.SugarLogger.Debug("query system temp err :", err)
|
||||
return
|
||||
}
|
||||
temp := make(map[string]*tempModel.SystemTemp, 0)
|
||||
for _, v := range sysTempList {
|
||||
temp[v.TempSize] = v
|
||||
SystemTemp[v.TempSize] = v
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
param := &tempModel.SystemTemp{
|
||||
CreatedAt: &now,
|
||||
UpdatedAt: &now,
|
||||
LastOperator: "system",
|
||||
DeletedAt: &utils.DefaultTimeValue,
|
||||
TempName: "system",
|
||||
TempRank: SystemTempKey,
|
||||
Temp: "",
|
||||
UserId: "system_user",
|
||||
TempType: tempModel.TempTypeMerchant,
|
||||
TempSize: tempModel.SystemTempSizeBig,
|
||||
PrintSn: "system",
|
||||
IsUse: 1,
|
||||
}
|
||||
|
||||
// 初始化大字体模板
|
||||
if _, v := temp[tempModel.SystemTempSizeBig]; !v {
|
||||
param.TempName += tempModel.SystemTempSizeBig
|
||||
param.Temp = SystemTempValue
|
||||
if err := dao.AddTemp(param); err != nil {
|
||||
globals.SugarLogger.Debug("init system temp err :", err)
|
||||
}
|
||||
SystemTemp[tempModel.SystemTempSizeBig] = param
|
||||
}
|
||||
|
||||
// 初始化中字体模板
|
||||
if _, v := temp[tempModel.SystemTempSizeMedium]; !v {
|
||||
param.TempName += tempModel.SystemTempSizeMedium
|
||||
medium := strings.Replace(SystemTempValue, "<b>", "<hb>", -1)
|
||||
medium2 := strings.Replace(medium, "</b>", "</hb>", -1)
|
||||
param.Temp = medium2
|
||||
if err := dao.AddTemp(param); err != nil {
|
||||
globals.SugarLogger.Debug("init system temp err :", err)
|
||||
}
|
||||
if err := dao.AddTemp(param); err != nil {
|
||||
globals.SugarLogger.Debug("init system temp err :", err)
|
||||
}
|
||||
SystemTemp[tempModel.SystemTempSizeMedium] = param
|
||||
}
|
||||
|
||||
// 初始化小字体模板
|
||||
if _, v := temp[tempModel.SystemTempSizeSmall]; !v {
|
||||
param.TempName += tempModel.SystemTempSizeSmall
|
||||
medium := strings.Replace(SystemTempValue, "<b>", " ", -1)
|
||||
medium2 := strings.Replace(medium, "</b>", " ", -1)
|
||||
param.Temp = medium2
|
||||
if err := dao.AddTemp(param); err != nil {
|
||||
globals.SugarLogger.Debug("init system temp err :", err)
|
||||
}
|
||||
if err := dao.AddTemp(param); err != nil {
|
||||
globals.SugarLogger.Debug("init system temp err :", err)
|
||||
}
|
||||
SystemTemp[tempModel.SystemTempSizeSmall] = param
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// SystemTempKey 系统数据库模板排序
|
||||
const (
|
||||
//SystemTempKey 公共参数 EBaiOrderNo= vendorName EBaiVendorName = vendorOrderNo
|
||||
SystemTempKey = "sound,eBailOrderNo,payOrderTime,trySendTime,orderNo,businessType,vendorName,eBaiCode,qRCOrder,eBaiVendorName,eBaiOrderNo,consigneeName," +
|
||||
"consigneeMobile,consigneeAddress,buyerComment,skuName,skuNumber,skuPrice,skuAllPrice,allSkuTypeCount,allSkuCount,storeName,storeTel,officialName"
|
||||
SystemTempValue = "{" +
|
||||
"sound:" + Sound + "," +
|
||||
"eBailOrderNo:" + EBailOrderNo + "," +
|
||||
"payOrderTime:" + PayOrderTime + "," +
|
||||
"trySendTime:" + TrySendTime + "," +
|
||||
"orderNo:" + OrderNo + "," +
|
||||
"businessType:" + BusinessType + "," +
|
||||
"vendorName:" + VendorName + "," +
|
||||
"eBaiCode:" + EBaiCode + "," +
|
||||
"qRCOrder:" + QRCOrder + "," +
|
||||
"eBaiVendorName:" + EBaiVendorName + "," +
|
||||
"eBaiOrderNo:" + EBaiOrderNo + "," +
|
||||
"consigneeName:" + ConsigneeName + "," +
|
||||
"consigneeMobile:" + ConsigneeMobile + "," +
|
||||
"consigneeAddress:" + ConsigneeAddress + "," +
|
||||
"buyerComment:" + BuyerComment + "," +
|
||||
"skuName:" + SkuName + "," +
|
||||
"skuNumber:" + SkuNumber + "," +
|
||||
"skuPrice:" + SkuPrice + "," +
|
||||
"skuAllPrice:" + SkuAllPrice + "," +
|
||||
"allSkuTypeCount:" + AllSkuTypeCount + "," +
|
||||
"allSkuCount:" + AllSkuCount + "," +
|
||||
"storeName:" + StoreName + "," +
|
||||
"storeTel:" + StoreTel + "," +
|
||||
"officialName:" + OfficialName +
|
||||
"}"
|
||||
|
||||
Sound = `<br><sound>%s</sound><br>`
|
||||
|
||||
EBailOrderNo = `<center><b>%s</b></center><br><br>
|
||||
<center>手机买菜上京西</center><br>
|
||||
<center>极速到家送惊喜</center><br>
|
||||
--------------------------------<br>`
|
||||
PayOrderTime = ` <b>下单时间: %s</b><br>`
|
||||
TrySendTime = ` <b>预计送达: %s</b><br>`
|
||||
OrderNo = ` <b>订单编号: %s</b><br>`
|
||||
BusinessType = `<center><b>预订单</b></center><br>`
|
||||
|
||||
VendorName = `<br><b>%s`
|
||||
EBaiCode = `#%s</b><br>`
|
||||
|
||||
QRCOrder = `<qrc>%s</qrc><br>`
|
||||
EBaiVendorName = `<b>%s:`
|
||||
EBaiOrderNo = `%s</b><br><br>`
|
||||
ConsigneeName = ` <b>客户: %s<br>`
|
||||
ConsigneeMobile = ` <b>电话: %s<br>`
|
||||
ConsigneeAddress = ` <b>地址: %s<br><br>`
|
||||
|
||||
BuyerComment = ` <b>客户备注:</b><br><b>%s</b><br><br>
|
||||
商品明细:<br>
|
||||
品名 数量 单价 小计<br>
|
||||
--------------------------------<br>`
|
||||
SkuName = `<b>%s</b><br>`
|
||||
SkuNumber = `<b>x%s</b>`
|
||||
SkuPrice = ` <b>¥%s</b>`
|
||||
SkuAllPrice = ` <b>¥%s</b><br>`
|
||||
|
||||
AllSkuTypeCount = `<br><br><b>共%s种,`
|
||||
AllSkuCount = `%s件商品</b><br>--------------------------------<br>`
|
||||
|
||||
StoreName = `<center><b>商品质量问题请联系:</b></center><br>
|
||||
<center><b>%s:`
|
||||
StoreTel = `%s</b></center><br><br>
|
||||
更多信息请关注官方微信: `
|
||||
|
||||
OfficialName = `<b>%s</b><br><br><br>
|
||||
--------------------------------<br>
|
||||
--------------------------------<br><br>`
|
||||
)
|
||||
|
||||
// 小字体系统模板
|
||||
const (
|
||||
// 模板开始
|
||||
tempBegin = `
|
||||
<center><b>%s</b></center>
|
||||
<br>
|
||||
<br>
|
||||
<center>手机买菜上京西</center>
|
||||
<br>
|
||||
<center>极速到家送惊喜</center>
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
下单时间: %s
|
||||
<br>
|
||||
预计送达: %s
|
||||
<br>
|
||||
订单编号: %s
|
||||
<br>`
|
||||
// 是否为预订单
|
||||
tempBusiness = `<center><b>预订单</b></center><br>`
|
||||
tempBegin2 = `
|
||||
<br>
|
||||
<b>%s#%s</b>
|
||||
<br>
|
||||
<qrc>%s</qrc>
|
||||
<br>`
|
||||
tempEBail = `<b>饿百取货码%s:%s</b><br><br>`
|
||||
tempBegin3 = `
|
||||
<br>
|
||||
<br>
|
||||
客户: %s
|
||||
<br>
|
||||
电话: %s
|
||||
<br>
|
||||
地址: %s
|
||||
<br>
|
||||
<br>
|
||||
客户备注:
|
||||
<br>
|
||||
<b>%s</b>
|
||||
<br>
|
||||
<br>
|
||||
商品明细:
|
||||
<br>
|
||||
品名 数量 单价 小计
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
`
|
||||
// 模板结束
|
||||
tempEnd = `<br>
|
||||
<br>
|
||||
共%s种,%s件商品
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
<center><hb>商品质量问题请联系:</hb></center>
|
||||
<br>
|
||||
<center><hb>%s:%s</hb></center>
|
||||
<br>
|
||||
<br>
|
||||
更多信息请关注官方微信: %s
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
<br>
|
||||
`
|
||||
|
||||
// 模板商品
|
||||
skuListTemp = `%s
|
||||
<br>
|
||||
x%s ¥%s ¥%s
|
||||
<br>
|
||||
`
|
||||
soundTemp = `<br><sound>%s</sound>`
|
||||
)
|
||||
|
||||
// 中字体系统模板
|
||||
const (
|
||||
// 模板开始
|
||||
tempBeginMiddle = `
|
||||
<center><b>%s</b></center>
|
||||
<br>
|
||||
<br>
|
||||
<center>手机买菜上京西</center>
|
||||
<br>
|
||||
<center>极速到家送惊喜</center>
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
<wb>下单时间: %s</wb>
|
||||
<br>
|
||||
<wb>预计送达: %s</wb>
|
||||
<br>
|
||||
<wb>订单编号: %s</wb>
|
||||
<br>`
|
||||
// 是否为预订单
|
||||
tempBusinessMiddle = `<center><b>预订单</b></center><br>`
|
||||
tempBegin2Middle = `
|
||||
<br>
|
||||
<b>%s#%s</b>
|
||||
<br>
|
||||
<qrc>%s</qrc>
|
||||
<br>`
|
||||
tempEBailMiddle = `<b>%s:%s</b><br><br>`
|
||||
tempBegin3Middle = `
|
||||
<br>
|
||||
<br>
|
||||
<wb>客户: %s</wb>
|
||||
<br>
|
||||
<wb>电话: %s</wb>
|
||||
<br>
|
||||
<wb>地址: %s</wb>
|
||||
<br>
|
||||
<br>
|
||||
<wb>客户备注:</wb>
|
||||
<br>
|
||||
<b>%s</b>
|
||||
<br>
|
||||
<br>
|
||||
<wb>商品明细:</wb>
|
||||
<br>
|
||||
品名 数量 单价 小计
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
`
|
||||
// 模板结束
|
||||
tempEndMiddle = `<br>
|
||||
<br>
|
||||
<wb>共%s种,%s件商品</wb>
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
<center><hb>商品质量问题请联系:</hb></center>
|
||||
<br>
|
||||
<center><hb>%s:%s</hb></center>
|
||||
<br>
|
||||
<br>
|
||||
更多信息请关注官方微信: %s
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
<br>
|
||||
`
|
||||
|
||||
// 模板商品
|
||||
skuListTempMiddle = `<wb>%s</wb>
|
||||
<br>
|
||||
<wb>x%s</wb> <wb>¥%s</wb> <wb>¥%s</wb>
|
||||
<br>
|
||||
`
|
||||
)
|
||||
|
||||
// 大字体系统模板
|
||||
const (
|
||||
// 模板开始
|
||||
tempBeginBig = `
|
||||
<center><b>%s</b></center>
|
||||
<br>
|
||||
<br>
|
||||
<center>手机买菜上京西</center>
|
||||
<br>
|
||||
<center>极速到家送惊喜</center>
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
<b>下单时间: %s</b>
|
||||
<br>
|
||||
<b>预计送达: %s</b>
|
||||
<br>
|
||||
<b>订单编号: %s</b>
|
||||
<br>`
|
||||
// 是否为预订单
|
||||
tempBusinessBig = `<center><b>预订单</b></center><br>`
|
||||
tempBegin2Big = `
|
||||
<br>
|
||||
<b>%s#%s</b>
|
||||
<br>
|
||||
<qrc>%s</qrc>
|
||||
<br>`
|
||||
tempEBailBig = `<b>%s:%s</b><br><br>`
|
||||
tempBegin3Big = `
|
||||
<br>
|
||||
<br>
|
||||
<b>客户: %s</b>
|
||||
<br>
|
||||
<b>电话: %s</b>
|
||||
<br>
|
||||
<b>地址: %s</b>
|
||||
<br>
|
||||
<br>
|
||||
<b>客户备注:</b>
|
||||
<br>
|
||||
<b>%s</b>
|
||||
<br>
|
||||
<br>
|
||||
<b>商品明细:</b>
|
||||
<br>
|
||||
品名 数量 单价 小计
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
`
|
||||
// 模板结束
|
||||
tempEndBig = `<br>
|
||||
<br>
|
||||
<b>共%s种,%s件商品</b>
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
<center><b>商品质量问题请联系:</b></center>
|
||||
<br>
|
||||
<center><b>%s:%s</b></center>
|
||||
<br>
|
||||
<br>
|
||||
更多信息请关注官方微信: %s
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
--------------------------------
|
||||
<br>
|
||||
<br>
|
||||
`
|
||||
|
||||
// 模板商品
|
||||
skuListTempBig = `<b>%s</b>
|
||||
<br>
|
||||
<b>x%s</b> <b>¥%s</b> <b>¥%s</b>
|
||||
<br>
|
||||
`
|
||||
)
|
||||
|
||||
type SkuListPrintOrder struct {
|
||||
SkuName string `json:"skuName"` // 商品名称
|
||||
SkuCount string `json:"skuCount"` // 商品数量
|
||||
SalePrice string `json:"salePrice"` // 单价
|
||||
TotalCountPrice string `json:"totalCountPrice"` // 总价
|
||||
Upc string `json:"upc"` // 条形码
|
||||
}
|
||||
|
||||
type JXPrintData struct {
|
||||
EBailOrderNo string `json:"e_bail_order_no"` // 饿百取货码(品牌名称)
|
||||
BusinessType string `json:"business_type"` // 是否为预定单 2-是/1-否
|
||||
PayOrderTime string `json:"pay_order_time"` // 下单时间
|
||||
TrySendTime string `json:"try_send_time"` // 预计送达时间
|
||||
OrderNo string `json:"order_no"` // 订单编号
|
||||
VendorName string `json:"vendor_name"` // 订单来源平台名称
|
||||
VendorID string `json:"vendor_id"` // 订单来源平台Id
|
||||
VendorOrderNo string `json:"vendor_order_no"` // 订单序号
|
||||
EBaiCode string `json:"e_bai_code"` // 饿百取货码
|
||||
QRCOrder string `json:"qrc_order"` // 订单二维码单号,还是订单Id
|
||||
ConsigneeName string `json:"consignee_name"` // 客户名称
|
||||
ConsigneeMobile string `json:"consignee_mobile"` // 客户电话
|
||||
ConsigneeAddress string `json:"consignee_address"` // 客户地址
|
||||
BuyerComment string `json:"buyer_comment"` // 客户备注
|
||||
SkuList []*SkuListPrintOrder `json:"sku_list"` // 商品列表
|
||||
SkuName string `json:"sku_name"` // 商品名称
|
||||
SkuCount string `json:"sku_count"` // 商品件数
|
||||
SkuOnePrice string `json:"sku_one_price"` // 商品单价
|
||||
SkuAllPrice string `json:"sku_all_price"` // 商品总价 = 商品件数 x 商品件数
|
||||
AllSkuTypeCount string `json:"all_sku_type_count"` // 商品种类
|
||||
AllSkuCount string `json:"all_sku_count"` // 商品总数量
|
||||
UserPayMoney string `json:"user_pay_money"` // 用户支付
|
||||
StoreName string `json:"store_name"` // 门店名称
|
||||
StoreTel string `json:"store_tel"` // 门店电话
|
||||
OfficialName string `json:"official_name"` // 官方名称
|
||||
BigFont string `json:"big_font"` // 是否为大字体
|
||||
PrintNumber string `json:"print_number"` // 打印次数
|
||||
}
|
||||
163
services/print_server/app_server/wx_login.go
Normal file
163
services/print_server/app_server/wx_login.go
Normal file
@@ -0,0 +1,163 @@
|
||||
package app_server
|
||||
|
||||
import (
|
||||
"crypto/aes"
|
||||
"crypto/cipher"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-print/dao"
|
||||
"git.rosy.net.cn/jx-print/globals"
|
||||
"git.rosy.net.cn/jx-print/model"
|
||||
wxLogin "git.rosy.net.cn/jx-print/model/app_model"
|
||||
"git.rosy.net.cn/jx-print/services/api"
|
||||
"github.com/gin-gonic/gin"
|
||||
xaes "github.com/go-pay/gopay/pkg/aes"
|
||||
"github.com/go-pay/gopay/wechat"
|
||||
"reflect"
|
||||
"time"
|
||||
)
|
||||
|
||||
type UserLogin struct {
|
||||
}
|
||||
|
||||
// WxLogin 授权登录
|
||||
func (u *UserLogin) WxLogin(ctx *gin.Context, code, phone string) (*model.User, error) {
|
||||
// 生成openId
|
||||
openObj, err := wechat.GetOauth2AccessToken(ctx, wxLogin.WeChatAPPID, wxLogin.WeChatAPPSecret, code)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if openObj.Errcode != 0 {
|
||||
return nil, errors.New(openObj.Errmsg)
|
||||
}
|
||||
|
||||
// 检查用户是否存在
|
||||
users, err := dao.GetUsers(globals.GetDB(), "", "", phone, "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(users) > 1 {
|
||||
return nil, errors.New("数据异常,用户电话不唯一,联系管理员")
|
||||
}
|
||||
|
||||
// 获取用户信息,是否注册
|
||||
userInfo, err := wechat.GetOauth2UserInfo(ctx, openObj.AccessToken, openObj.Openid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var userObj *model.User
|
||||
timeNow := time.Now()
|
||||
switch len(users) {
|
||||
case 0:
|
||||
// 用户不存在,创建并返回用户
|
||||
userBase := &model.User{
|
||||
CreatedAt: &timeNow,
|
||||
UpdatedAt: &timeNow,
|
||||
LastOperator: "系统新增",
|
||||
DeletedAt: &utils.DefaultTimeValue,
|
||||
UserID: utils.GetUUID(),
|
||||
Password: "",
|
||||
Name: userInfo.Nickname,
|
||||
Mobile: phone,
|
||||
Email: "",
|
||||
Avatar: userInfo.Headimgurl,
|
||||
Status: 1,
|
||||
Type: 1,
|
||||
Company: "",
|
||||
CityCode: 0,
|
||||
DistrictCode: 0,
|
||||
Address: "",
|
||||
IDCardNo: "",
|
||||
Remark: "",
|
||||
LastLoginAt: &timeNow,
|
||||
LastLoginIP: ctx.ClientIP(),
|
||||
LastLoginType: model.OrderOriginWxMini,
|
||||
OpenId: userInfo.Openid,
|
||||
UnionId: userInfo.Unionid,
|
||||
}
|
||||
if err := dao.CreateUserWx(userBase); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
userObj = userBase
|
||||
case 1:
|
||||
// 用户使用电话号码登录,未使用微信登录
|
||||
if users[0].OpenId == "" {
|
||||
users[0].Name = userInfo.Nickname
|
||||
users[0].Avatar = userInfo.Headimgurl
|
||||
users[0].OpenId = userInfo.Openid
|
||||
users[0].UnionId = userInfo.Unionid
|
||||
}
|
||||
// 用户存在,判断用户
|
||||
users[0].UpdatedAt = &timeNow
|
||||
users[0].LastOperator = users[0].Name
|
||||
users[0].LastLoginIP = ctx.ClientIP()
|
||||
if err := dao.UpdateUserWx(users[0], []string{"updated_at", "last_operator", "last_login_ip", "name", "avatar", "open_id", "union_id"}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
userObj = users[0]
|
||||
}
|
||||
|
||||
return userObj, err
|
||||
}
|
||||
|
||||
// GetUserPhoneNum 解密用户手机号
|
||||
func (u *UserLogin) GetUserPhoneNum(param *wxLogin.WeChatPhoneNumberParam) (string, error) {
|
||||
sessionInfo, err := api.WeixinMiniAPI.SNSCode2Session(param.Code)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
weChatLogin := new(wechat.UserPhone)
|
||||
if err := DecryptOpenDataToStruct(param.EncryptedData, param.IV, sessionInfo.SessionKey, weChatLogin); err != nil {
|
||||
return "", err
|
||||
}
|
||||
return weChatLogin.PhoneNumber, nil
|
||||
}
|
||||
|
||||
// DecryptOpenDataToStruct 解密开放数据到结构体
|
||||
// encryptedData:包括敏感数据在内的完整用户信息的加密数据,小程序获取到
|
||||
// iv:加密算法的初始向量,小程序获取到
|
||||
// sessionKey:会话密钥,通过 gopay.Code2Session() 方法获取到
|
||||
// beanPtr:需要解析到的结构体指针,操作完后,声明的结构体会被赋值
|
||||
// 文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html
|
||||
func DecryptOpenDataToStruct(encryptedData, iv, sessionKey string, beanPtr interface{}) (err error) {
|
||||
if encryptedData == "" || iv == "" || sessionKey == "" {
|
||||
return errors.New("input params can not null")
|
||||
}
|
||||
var (
|
||||
cipherText, aesKey, ivKey, plainText []byte
|
||||
block cipher.Block
|
||||
blockMode cipher.BlockMode
|
||||
)
|
||||
beanValue := reflect.ValueOf(beanPtr)
|
||||
if beanValue.Kind() != reflect.Ptr {
|
||||
return errors.New("传入beanPtr类型必须是以指针形式")
|
||||
}
|
||||
if beanValue.Elem().Kind() != reflect.Struct {
|
||||
return errors.New("传入interface{}必须是结构体")
|
||||
}
|
||||
cipherText, _ = base64.StdEncoding.DecodeString(encryptedData)
|
||||
aesKey, _ = base64.StdEncoding.DecodeString(sessionKey)
|
||||
ivKey, _ = base64.StdEncoding.DecodeString(iv)
|
||||
if len(cipherText)%len(aesKey) != 0 {
|
||||
return errors.New("encryptedData is error")
|
||||
}
|
||||
if block, err = aes.NewCipher(aesKey); err != nil {
|
||||
return fmt.Errorf("aes.NewCipher:%w", err)
|
||||
}
|
||||
blockMode = cipher.NewCBCDecrypter(block, ivKey)
|
||||
plainText = make([]byte, len(cipherText))
|
||||
blockMode.CryptBlocks(plainText, cipherText)
|
||||
if len(plainText) > 0 {
|
||||
plainText = xaes.PKCS7UnPadding(plainText)
|
||||
}
|
||||
if err = json.Unmarshal(plainText, beanPtr); err != nil {
|
||||
return fmt.Errorf("json.Marshal(%s):%w", string(plainText), err)
|
||||
}
|
||||
return
|
||||
}
|
||||
240
services/print_server/app_server/wx_print.go
Normal file
240
services/print_server/app_server/wx_print.go
Normal file
@@ -0,0 +1,240 @@
|
||||
package app_server
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-print/dao"
|
||||
"git.rosy.net.cn/jx-print/globals"
|
||||
"git.rosy.net.cn/jx-print/model"
|
||||
"git.rosy.net.cn/jx-print/putils"
|
||||
"time"
|
||||
)
|
||||
|
||||
func AddPrinters(tokenInfo *model.TokenInfo, appID int, printInfo []*model.PrintInfo) (err error) {
|
||||
var (
|
||||
db = globals.GetDB()
|
||||
errs []error
|
||||
now = time.Now()
|
||||
)
|
||||
if len(printInfo) > 50 {
|
||||
return fmt.Errorf("每次最多添加50台!")
|
||||
}
|
||||
if apps, _ := dao.GetApps(db, appID, tokenInfo.User.UserID, ""); len(apps) == 0 {
|
||||
return fmt.Errorf("未查询到此应用!app_id:%d", appID)
|
||||
}
|
||||
for _, v := range printInfo {
|
||||
if v.PrintNo == "" {
|
||||
errs = append(errs, fmt.Errorf("请输入正确的打印机编号!print_no :%s 。", v.PrintNo))
|
||||
continue
|
||||
}
|
||||
printers, _ := dao.GetPrinters(db, appID, v.PrintNo, 0, 0, 0)
|
||||
if len(printers) > 0 {
|
||||
errs = append(errs, fmt.Errorf("此打印机已被其他应用绑定!print_no :%s 。", v.PrintNo))
|
||||
continue
|
||||
}
|
||||
printer := &model.Printer{
|
||||
CreatedAt: &now,
|
||||
UpdatedAt: &now,
|
||||
DeletedAt: &utils.DefaultTimeValue,
|
||||
LastOperator: tokenInfo.User.Name,
|
||||
AppID: appID,
|
||||
PrintNo: v.PrintNo,
|
||||
Name: v.Name,
|
||||
PrintKey: v.PrintKey,
|
||||
Status: model.PrinterStatusNormal,
|
||||
IsOnline: model.PrinterOffline,
|
||||
Sound: "sounda",
|
||||
Volume: 4,
|
||||
UserId: tokenInfo.User.UserID,
|
||||
}
|
||||
if err = dao.Insert(db, printer); err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
}
|
||||
if len(errs) > 0 {
|
||||
err = putils.BuildErr(errs)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func GetPrinters(appID int, printNo, name string, status, isOnline, offset, pageSize int, userId string) (page *model.PagedInfo, err error) {
|
||||
return dao.GetPrintersPage(globals.GetDB(), appID, printNo, name, status, isOnline, offset, pageSize, userId)
|
||||
}
|
||||
|
||||
func DelPrinters(appID int, tokenInfo *model.TokenInfo, printNos []string) (err error) {
|
||||
var (
|
||||
db = globals.GetDB()
|
||||
errs []error
|
||||
now = time.Now()
|
||||
)
|
||||
if len(printNos) > 50 {
|
||||
return fmt.Errorf("每次最多删除50台!")
|
||||
}
|
||||
if apps, _ := dao.GetApps(db, appID, tokenInfo.User.UserID, ""); len(apps) == 0 {
|
||||
return fmt.Errorf("未查询到此应用!app_id:%d", appID)
|
||||
}
|
||||
for _, v := range printNos {
|
||||
if v == "" {
|
||||
errs = append(errs, fmt.Errorf("请输入正确的打印机编号!print_no :%s 。", v))
|
||||
continue
|
||||
}
|
||||
printers, _ := dao.GetPrinters(db, appID, v, 0, 0, 0)
|
||||
if len(printers) == 0 {
|
||||
errs = append(errs, fmt.Errorf("未在该应用下查到此打印机!app_id: %d, print_no: %s", appID, v))
|
||||
continue
|
||||
}
|
||||
|
||||
if printers[0].UserId != tokenInfo.User.UserID {
|
||||
errs = append(errs, fmt.Errorf("该appId不在用户账号下!app_id: %d, print_no: %s", appID, v))
|
||||
continue
|
||||
}
|
||||
|
||||
printer := printers[0]
|
||||
printer.DeletedAt = &now
|
||||
printer.LastOperator = tokenInfo.User.Name
|
||||
if err = dao.Update(db, printer, model.FieldLastOperator, model.FieldDeletedAt); err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
}
|
||||
if len(errs) > 0 {
|
||||
err = putils.BuildErr(errs)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func UpdatePrinter(appID int, tokenInfo *model.TokenInfo, printNo, name, sound string, volume int) (err error) {
|
||||
var (
|
||||
db = globals.GetDB()
|
||||
now = time.Now()
|
||||
fields []string
|
||||
)
|
||||
if apps, _ := dao.GetApps(db, appID, tokenInfo.User.UserID, ""); len(apps) == 0 {
|
||||
return fmt.Errorf("未查询到此应用!app_id:%d", appID)
|
||||
}
|
||||
|
||||
printers, _ := dao.GetPrinters(db, appID, printNo, 0, 0, 0)
|
||||
if len(printers) == 0 {
|
||||
return fmt.Errorf("未在该应用下查到此打印机!app_id: %d, print_no: %s", appID, printNo)
|
||||
}
|
||||
if printers[0].UserId != tokenInfo.User.UserID {
|
||||
return fmt.Errorf("该appId不在用户账号下!app_id: %d, print_no: %s", appID, printers[0].PrintNo)
|
||||
}
|
||||
|
||||
printer := printers[0]
|
||||
printer.UpdatedAt = &now
|
||||
printer.LastOperator = tokenInfo.User.Name
|
||||
fields = append(fields, model.FieldUpdatedAt, model.FieldLastOperator)
|
||||
if name != printer.Name {
|
||||
printer.Name = name
|
||||
fields = append(fields, "name")
|
||||
}
|
||||
|
||||
if sound != printer.Sound {
|
||||
printer.Sound = sound
|
||||
fields = append(fields, "sound")
|
||||
}
|
||||
if volume != printer.Volume {
|
||||
printer.Volume = volume
|
||||
fields = append(fields, "volume")
|
||||
}
|
||||
if err = dao.Update(db, printer, fields...); err != nil {
|
||||
return err
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// TestPrint 测试打印
|
||||
func TestPrint(appID int, tokenInfo *model.TokenInfo, printNo string, orderNo string, content string) (msgID string, err error) {
|
||||
var (
|
||||
db = globals.GetDB()
|
||||
now = time.Now()
|
||||
)
|
||||
msgID = now.Format("20060102150405") + "_" + putils.RandStringBytesWithNumber(8)
|
||||
if apps, _ := dao.GetApps(db, appID, tokenInfo.User.UserID, ""); len(apps) == 0 {
|
||||
return "", fmt.Errorf("未查询到此应用!app_id:%d", appID)
|
||||
}
|
||||
printers, _ := dao.GetPrinters(db, appID, printNo, 0, 0, 0)
|
||||
if len(printers) == 0 {
|
||||
return "", fmt.Errorf("未在该应用下查到此打印机!app_id: %d, print_no: %s", appID, printNo)
|
||||
}
|
||||
if printers[0].UserId != tokenInfo.User.UserID {
|
||||
return "", fmt.Errorf("该appId不在用户账号下!app_id: %d, print_no: %s", appID, printers[0].PrintNo)
|
||||
}
|
||||
|
||||
printMsg := &model.PrintMsg{
|
||||
CreatedAt: &now,
|
||||
UpdatedAt: &now,
|
||||
LastOperator: tokenInfo.User.Name,
|
||||
DeletedAt: &utils.DefaultTimeValue,
|
||||
PrintNo: printNo,
|
||||
OrderNo: orderNo,
|
||||
Content: content,
|
||||
MsgID: msgID,
|
||||
}
|
||||
err = dao.Insert(db, printMsg)
|
||||
return msgID, err
|
||||
}
|
||||
|
||||
func GetPrintMessages(appID int, tokenInfo *model.TokenInfo, printNo, msgID string, beginAt, endAt string, offset, pageSize int) (page *model.PagedInfo, err error) {
|
||||
var (
|
||||
db = globals.GetDB()
|
||||
)
|
||||
if apps, _ := dao.GetApps(db, appID, tokenInfo.User.UserID, ""); len(apps) == 0 {
|
||||
return nil, fmt.Errorf("未查询到此应用!app_id:%d", appID)
|
||||
}
|
||||
printers, _ := dao.GetPrinters(db, appID, printNo, 0, 0, 0)
|
||||
if len(printers) == 0 {
|
||||
return nil, fmt.Errorf("未在该应用下查到此打印机!app_id: %d, print_no: %s", appID, printNo)
|
||||
}
|
||||
return dao.GetPrintMessagesPage(db, printNo, msgID, beginAt, endAt, offset, pageSize)
|
||||
}
|
||||
|
||||
type GetPrinterReportResult struct {
|
||||
WeekPrintCount int `json:"week_print_count"`
|
||||
DayPrintCount int `json:"day_print_count"`
|
||||
DayUnPrintCount int `json:"day_un_print_count"`
|
||||
OnlinePrinterCount int `json:"online_printer_count"`
|
||||
OfflinePrinterCount int `json:"offline_printer_count"`
|
||||
FlowPrinterCount int `json:"flow_printer_count"`
|
||||
PaperPrinterCount int `json:"paper_printer_count"`
|
||||
}
|
||||
|
||||
func GetPrinterReport(tokenInfo *model.TokenInfo) (getPrinterReportResult *GetPrinterReportResult, err error) {
|
||||
var (
|
||||
db = globals.GetDB()
|
||||
weekCount, DayCount, DayUnCount = 0, 0, 0
|
||||
onlineC, offlineC, flowC, paperC = 0, 0, 0, 0
|
||||
)
|
||||
getPrinterReportResult = &GetPrinterReportResult{}
|
||||
apps, _ := dao.GetApps(db, 0, tokenInfo.User.UserID, "")
|
||||
if len(apps) == 0 {
|
||||
return nil, err
|
||||
}
|
||||
for _, app := range apps {
|
||||
printers, _ := dao.GetPrinters(db, app.ID, "", 0, 0, 0)
|
||||
for _, printer := range printers {
|
||||
weeks, _ := dao.GetPrintMessages(db, printer.PrintNo, "", utils.Time2Str(time.Now().AddDate(0, 0, -7)), utils.Time2Str(time.Now()), 0)
|
||||
weekCount += len(weeks)
|
||||
days, _ := dao.GetPrintMessages(db, printer.PrintNo, "", utils.Time2Str(time.Now().AddDate(0, 0, -1)), utils.Time2Str(time.Now()), 0)
|
||||
DayCount += len(days)
|
||||
dayUns, _ := dao.GetPrintMessages(db, printer.PrintNo, "", utils.Time2Str(time.Now().AddDate(0, 0, -1)), utils.Time2Str(time.Now()), 1)
|
||||
DayUnCount += len(dayUns)
|
||||
}
|
||||
onlines, _ := dao.GetPrinters(db, app.ID, "", model.PrinterOnline, 0, 0)
|
||||
onlineC += len(onlines)
|
||||
offlines, _ := dao.GetPrinters(db, app.ID, "", model.PrinterOffline, 0, 0)
|
||||
offlineC += len(offlines)
|
||||
flows, _ := dao.GetPrinters(db, app.ID, "", 0, 0, 1)
|
||||
flowC += len(flows)
|
||||
papers, _ := dao.GetPrinters(db, app.ID, "", model.PrinterStatusWithouPaper, 0, 0)
|
||||
paperC += len(papers)
|
||||
}
|
||||
getPrinterReportResult.WeekPrintCount = weekCount
|
||||
getPrinterReportResult.DayPrintCount = DayCount
|
||||
getPrinterReportResult.DayUnPrintCount = DayUnCount
|
||||
getPrinterReportResult.OnlinePrinterCount = onlineC
|
||||
getPrinterReportResult.OfflinePrinterCount = offlineC
|
||||
getPrinterReportResult.FlowPrinterCount = flowC
|
||||
getPrinterReportResult.PaperPrinterCount = paperC
|
||||
return getPrinterReportResult, err
|
||||
}
|
||||
@@ -56,6 +56,7 @@ func AddPrinters(c *gin.Context, tokenInfo *model.TokenInfo, appID int, printInf
|
||||
IsOnline: model.PrinterOffline,
|
||||
Sound: sounda,
|
||||
Volume: 4,
|
||||
UserId: tokenInfo.User.UserID,
|
||||
}
|
||||
if err = dao.Insert(db, printer); err != nil {
|
||||
errs = append(errs, err)
|
||||
@@ -68,7 +69,7 @@ func AddPrinters(c *gin.Context, tokenInfo *model.TokenInfo, appID int, printInf
|
||||
}
|
||||
|
||||
func GetPrinters(c *gin.Context, appID int, printNo, name string, status, isOnline, offset, pageSize int) (page *model.PagedInfo, err error) {
|
||||
return dao.GetPrintersPage(globals.GetDB(), appID, printNo, name, status, isOnline, offset, pageSize)
|
||||
return dao.GetPrintersPage(globals.GetDB(), appID, printNo, name, status, isOnline, offset, pageSize, "")
|
||||
}
|
||||
|
||||
func DelPrinters(c *gin.Context, appID int, tokenInfo *model.TokenInfo, printNos []string) (err error) {
|
||||
@@ -146,7 +147,7 @@ func UpdatePrinter(c *gin.Context, appID int, tokenInfo *model.TokenInfo, printN
|
||||
return err
|
||||
}
|
||||
|
||||
func TestPrint(c *gin.Context, appID int, tokenInfo *model.TokenInfo, printNo string, orderNo int, content string) (msgID string, err error) {
|
||||
func TestPrint(c *gin.Context, appID int, tokenInfo *model.TokenInfo, printNo string, orderNo string, content string) (msgID string, err error) {
|
||||
var (
|
||||
db = globals.GetDB()
|
||||
now = time.Now()
|
||||
|
||||
@@ -5,22 +5,16 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-print/controllers/controller"
|
||||
"git.rosy.net.cn/jx-print/dao"
|
||||
"git.rosy.net.cn/jx-print/globals"
|
||||
"git.rosy.net.cn/jx-print/model"
|
||||
putils "git.rosy.net.cn/jx-print/putils"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/jmoiron/sqlx"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
TokenHeader = "TOKEN"
|
||||
TokenVer = "V2"
|
||||
TokenTypeSep = "."
|
||||
)
|
||||
|
||||
type UserService struct {
|
||||
C *gin.Context
|
||||
DB *sqlx.DB
|
||||
@@ -40,7 +34,7 @@ func InitHandler(handler UserServiceInterface) {
|
||||
}
|
||||
|
||||
func (c *UserService) GetUsers(name, mobile, userID string) (users []*model.User, err error) {
|
||||
return dao.GetUsers(globals.GetDB(), userID, name, mobile)
|
||||
return dao.GetUsers(globals.GetDB(), userID, name, mobile, "")
|
||||
}
|
||||
|
||||
func RegisterUser(c *gin.Context, name, password string) (err error) {
|
||||
@@ -49,7 +43,7 @@ func RegisterUser(c *gin.Context, name, password string) (err error) {
|
||||
user = &model.User{}
|
||||
now = time.Now()
|
||||
)
|
||||
if users, _ := dao.GetUsers(db, "", name, ""); len(users) > 0 {
|
||||
if users, _ := dao.GetUsers(db, "", name, "", ""); len(users) > 0 {
|
||||
return fmt.Errorf("用户名重复!")
|
||||
}
|
||||
user.UserID = utils.GetUUID()
|
||||
@@ -75,7 +69,7 @@ func Login(c *gin.Context, name, password string) (loginResult *LoginResult, err
|
||||
token string
|
||||
)
|
||||
loginResult = &LoginResult{}
|
||||
if users, _ := dao.GetUsers(db, "", name, ""); len(users) == 0 {
|
||||
if users, _ := dao.GetUsers(db, "", name, "", ""); len(users) == 0 {
|
||||
return loginResult, fmt.Errorf("用户名不存在!")
|
||||
}
|
||||
if users, err := dao.GetUserForLogin(db, name, fmt.Sprintf("%x", md5.Sum([]byte(model.RegisterKey+password)))); err != nil {
|
||||
@@ -87,7 +81,7 @@ func Login(c *gin.Context, name, password string) (loginResult *LoginResult, err
|
||||
}
|
||||
loginResult.User = *user
|
||||
//创建token
|
||||
token, err = setToken(user)
|
||||
token, err = controller.SetToken(user)
|
||||
loginResult.Token = token
|
||||
//更新登录时间和ip
|
||||
user.LastLoginAt = &now
|
||||
@@ -96,23 +90,6 @@ func Login(c *gin.Context, name, password string) (loginResult *LoginResult, err
|
||||
return loginResult, err
|
||||
}
|
||||
|
||||
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{
|
||||
TokenHeader,
|
||||
TokenVer,
|
||||
user.UserID,
|
||||
time.Now().Format("20060102-150405"),
|
||||
utils.GetUUID(),
|
||||
user.Name,
|
||||
}, TokenTypeSep)
|
||||
}
|
||||
|
||||
func Logout(c *gin.Context, token string) (err error) {
|
||||
return putils.DelKey(token)
|
||||
}
|
||||
@@ -129,7 +106,7 @@ func UpdateUser(c *gin.Context, payload string) (err error) {
|
||||
if userp.ID == 0 || userp.UserID == "" {
|
||||
return fmt.Errorf("id 和 user_id 必传!")
|
||||
}
|
||||
if users, err := dao.GetUsers(db, userp.UserID, "", ""); err != nil {
|
||||
if users, err := dao.GetUsers(db, userp.UserID, "", "", ""); err != nil {
|
||||
return err
|
||||
} else {
|
||||
user = users[0]
|
||||
|
||||
Reference in New Issue
Block a user