Commit 7ee844a6 authored by 赵啸非's avatar 赵啸非

修改添加名片相关处理

parent 5b881f95
...@@ -334,3 +334,22 @@ INSERT INTO `mortals_xhx_resource` VALUES (null, '收藏名片-菜单管理-维 ...@@ -334,3 +334,22 @@ INSERT INTO `mortals_xhx_resource` VALUES (null, '收藏名片-菜单管理-维
-- ---------------------------- -- ----------------------------
-- 收藏名片参数 SQL -- 收藏名片参数 SQL
-- ---------------------------- -- ----------------------------
-- ----------------------------
-- 名片基本信息菜单 SQL
-- ----------------------------
INSERT INTO `mortals_xhx_menu` VALUES (null, '名片基本信息', '/bussinesscard/list', 0,'', 1, 1, 0, 0,'',NULL, NULL, NULL, 0, 0, 1, NULL, NULL, NULL);
-- ----------------------------
-- 名片基本信息资源路径 SQL
-- ----------------------------
INSERT INTO `mortals_xhx_resource` VALUES (null, '名片基本信息-菜单管理-查看', '/bussinesscard/list,/bussinesscard/view,/bussinesscard/info,/bussinesscard/export,/bussinesscard/exportExcel,/bussinesscard/downloadTemplate,/bussinesscard/download', 3, 0, NULL, NULL, NULL, 0);
INSERT INTO `mortals_xhx_resource` VALUES (null, '名片基本信息-菜单管理-维护', '/bussinesscard/add,/bussinesscard/edit,/bussinesscard/delete,/bussinesscard/logicDelete,/bussinesscard/save,/bussinesscard/importData', 3, 0, NULL, NULL, NULL, 0);
-- ----------------------------
-- 名片基本信息参数 SQL
-- ----------------------------
INSERT INTO `mortals_xhx_param` VALUES (null, '性别', 'Bussinesscard', 'gender', '1', '男', 1, 4, 0, 'gender', NULL, NULL, NULL);
INSERT INTO `mortals_xhx_param` VALUES (null, '性别', 'Bussinesscard', 'gender', '2', '女', 1, 4, 0, 'gender', NULL, NULL, NULL);
...@@ -485,3 +485,38 @@ CREATE TABLE mortals_xhx_favorites_businesscard( ...@@ -485,3 +485,38 @@ CREATE TABLE mortals_xhx_favorites_businesscard(
`updateTime` datetime COMMENT '更新时间', `updateTime` datetime COMMENT '更新时间',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='收藏名片'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='收藏名片';
-- ----------------------------
-- 名片基本信息表
-- ----------------------------
DROP TABLE IF EXISTS `mortals_xhx_bussinesscard`;
CREATE TABLE mortals_xhx_bussinesscard
(
`id` bigint(20) AUTO_INCREMENT COMMENT '序号,主键,自增长',
`staffId` bigint(20) NOT NULL COMMENT '名片所属关联员工ID',
`staffName` varchar(64) COMMENT '名片所属关联员工姓名',
`name` varchar(64) NOT NULL COMMENT '名片姓名',
`gender` tinyint(2) DEFAULT '1' COMMENT '性别(1.男,2.女)',
`birthday` datetime COMMENT '出生日期',
`photoPath` varchar(255) COMMENT '照片',
`email` varchar(128) COMMENT '邮件地址',
`phoneNumber` varchar(128) COMMENT '联系电话',
`idCard` varchar(128) COMMENT '身份证号码',
`companyId` varchar(128) COMMENT '记录名片持有者所在公司或组织的名称ID',
`companyName` varchar(128) COMMENT '记录名片持有者所在公司或组织的名称',
`positionId` bigint(20) COMMENT '职位ID',
`positionName` varchar(128) COMMENT '职位名称',
`bio` varchar(512) COMMENT '简介',
`socialMedia` varchar(512) COMMENT '社交媒体链接, 可以是一个包含社交媒体账号的JSON对象或单独的字段',
`qRCode` varchar(512) COMMENT '二维码图片, 可以是一个图片链接或存储路径',
`remark` varchar(255) COMMENT '备注',
`sumViews` int(4) DEFAULT '0' COMMENT '累计查看次数',
`viewsByDay` int(4) DEFAULT '0' COMMENT '当日查看次数',
`createUserId` bigint(20) COMMENT '创建用户',
`createTime` datetime COMMENT '创建时间',
`updateUserId` bigint(20) COMMENT '更新用户',
`updateTime` datetime COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `name` (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='名片基本信息';
...@@ -52,6 +52,7 @@ const router = new Router({ ...@@ -52,6 +52,7 @@ const router = new Router({
...restBuilder('feedback', 'feedback'),//反馈信息 ...restBuilder('feedback', 'feedback'),//反馈信息
...restBuilder('staff', 'staff'),//员工基本信息 ...restBuilder('staff', 'staff'),//员工基本信息
...restBuilder('bussinesscard', 'bussinesscard'),//名片基本信息
...restBuilder('staff/record', 'staff/record'),//客户访问记录信息 ...restBuilder('staff/record', 'staff/record'),//客户访问记录信息
...restBuilder('news/category', 'news/category'),//新闻频道分类 ...restBuilder('news/category', 'news/category'),//新闻频道分类
......
<template>
<!-- 弹出框表单 -->
<el-drawer
:title="title"
:visible.sync="open"
:direction="direction"
:destroy-on-close="true"
size="50%">
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<Field label="名片所属关联员工ID" prop="staffId" v-model="form.staffId" placeholder="请输入名片所属关联员工ID"/>
<Field label="名片所属关联员工姓名" prop="staffName" v-model="form.staffName" placeholder="请输入名片所属关联员工姓名"/>
<Field label="名片姓名" prop="name" v-model="form.name" placeholder="请输入名片姓名"/>
<Field label="性别" prop="gender" v-model="form.gender" type="select" :enumData="dict.gender" placeholder="请选择性别"/>
<Field label="出生日期" prop="birthday" v-model="form.birthday" type="date" />
<Field label="照片" prop="photoPath" v-model="form.photoPath" type="textarea" placeholder="请输入照片"/>
<Field label="邮件地址" prop="email" v-model="form.email" placeholder="请输入邮件地址"/>
<Field label="联系电话" prop="phoneNumber" v-model="form.phoneNumber" placeholder="请输入联系电话"/>
<Field label="身份证号码" prop="idCard" v-model="form.idCard" placeholder="请输入身份证号码"/>
<Field label="记录名片持有者所在公司或组织的名称ID" prop="companyId" v-model="form.companyId" placeholder="请输入记录名片持有者所在公司或组织的名称ID"/>
<Field label="记录名片持有者所在公司或组织的名称" prop="companyName" v-model="form.companyName" placeholder="请输入记录名片持有者所在公司或组织的名称"/>
<Field label="职位ID" prop="positionId" v-model="form.positionId" placeholder="请输入职位ID"/>
<Field label="职位名称" prop="positionName" v-model="form.positionName" placeholder="请输入职位名称"/>
<Field label="简介" prop="bio" v-model="form.bio" type="textarea" placeholder="请输入简介"/>
<Field label="社交媒体链接, 可以是一个包含社交媒体账号的JSON对象或单独的字段" prop="socialMedia" v-model="form.socialMedia" type="textarea" placeholder="请输入社交媒体链接, 可以是一个包含社交媒体账号的JSON对象或单独的字段"/>
<Field label="二维码图片, 可以是一个图片链接或存储路径" prop="qRCode" v-model="form.qRCode" type="textarea" placeholder="请输入二维码图片, 可以是一个图片链接或存储路径"/>
<Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/>
<Field label="累计查看次数" prop="sumViews" v-model="form.sumViews" placeholder="请输入累计查看次数"/>
<Field label="当日查看次数" prop="viewsByDay" v-model="form.viewsByDay" placeholder="请输入当日查看次数"/>
</el-row>
<form-buttons @submit='submitForm' v-if="pageInfo.type!='view'" noCancelBtn />
</el-form>
</el-drawer>
</template>
<script>
import form from "@/assets/mixins/formdialog";
export default {
name: "BussinesscardDetail",
mixins: [form],
components: {
},
created() {
this.changePath("bussinesscard")
},
data() {
return {
// 遮罩层
loading: true,
// 弹出层标题
title: "名片基本信息",
// 是否显示弹出层
open: false,
direction:"rtl",
toString:[
"gender",
],
toDate:[
"birthday",
],
// 表单校验
rules: {
name: [
{required: true,message: "请输入名片姓名", trigger: "blur" },
{max: 64,message: "最多只能录入64个字符",trigger: "blur",},
],
}
};
},
methods: {
/** 编辑 */
edit(row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="bussinesscard/edit";
this.getData();
this.pageInfo.type="edit"
this.title = "修改名片基本信息";
},
/** 新增 */
add(row) {
this.reset()
this.urls.currUrl = "bussinesscard/add";
this.getData();
this.pageInfo.type="add"
this.title = "新增名片基本信息";
},
/** 查看*/
view(row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="bussinesscard/view";
this.getData();
this.pageInfo.type="view"
this.title = "名片基本信息详细";
},
/**取消按钮 */
cancel() {
this.open = false;
},
/**获取数据后弹框 */
afterRender(data) {
this.open = true;
},
afterSubmit(data) {
this.open = false;
this.$emit("ok");
},
// 表单重置
reset() {
this.form = {
staffId : null,
staffName : "",
name : "",
gender : 1,
birthday : null,
photoPath : "",
email : "",
phoneNumber : "",
idCard : "",
companyId : "",
companyName : "",
positionId : null,
positionName : "",
bio : "",
socialMedia : "",
qRCode : "",
remark : "",
sumViews : 0,
viewsByDay : 0,
};
this.resetForm("form");
},
resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
},
},
};
</script>
<template>
<div class="page">
<LayoutTable :data="tableData" :config="tableConfig">
</LayoutTable>
<drawer-show ref="drawerform" @ok="getData" />
</div>
</template>
<script>
/** 表单弹出框模式需引入 */
import drawerShow from "./drawershow";
import table from "@/assets/mixins/table";
export default {
name: "BussinesscardList",
components: {
drawerShow
},
mixins: [table],
created() {
},
methods: {
/** 重写新增方法 */
toAdd(row) {
this.$refs.drawerform.add(row);
},
/** 重写编辑方法 */
toEdit(row) {
this.$refs.drawerform.edit(row);
},
/** 重写查看方法 */
toView(row) {
this.$refs.drawerform.view(row);
},
},
data() {
return {
config: {
search: [
{
name: "name",
type: "text",
label: "名片姓名",
fuzzy: true
},
],
columns: [
{type: "selection", width: 60},
{type: "index",label: "序号",width: 50},
{label: "名片所属关联员工姓名", prop: "staffName"},
{label: "名片姓名", prop: "name"},
{label: "性别", prop: "gender",formatter: this.formatter},
{label: "照片", prop: "photoPath"},
{label: "邮件地址", prop: "email"},
{label: "联系电话", prop: "phoneNumber"},
{label: "职位名称", prop: "positionName"},
{
label: "操作",
width: 240,
formatter: row => {
return (
<table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
);
}
}
]
}
};
}
};
</script>
\ No newline at end of file
<template>
<layout-view>
<el-descriptions :title="title" :column="column" :size="size" :colon="false" border>
<template slot="title">
<i class="el-icon-tickets"></i>
基本详细信息
</template>
<template slot="extra">
<el-button type="primary" @click="$router.go(-1)" size="small">返回</el-button>
</template>
<el-descriptions-item label="名片所属关联员工ID" label-class-name="labelClass" content-class-name="contentClass">
{{form.staffId}}
</el-descriptions-item>
<el-descriptions-item label="名片所属关联员工姓名" label-class-name="labelClass" content-class-name="contentClass">
{{form.staffName}}
</el-descriptions-item>
<el-descriptions-item label="名片姓名" label-class-name="labelClass" content-class-name="contentClass">
{{form.name}}
</el-descriptions-item>
<el-descriptions-item label="性别" label-class-name="labelClass" content-class-name="contentClass">
{{ util_formatters("gender", form.gender) }}
</el-descriptions-item>
<el-descriptions-item label="出生日期" label-class-name="labelClass" content-class-name="contentClass">
{{ util_formatterDate(form.birthday)}}
</el-descriptions-item>
<el-descriptions-item label="照片" label-class-name="labelClass" content-class-name="contentClass">
{{form.photoPath}}
</el-descriptions-item>
<el-descriptions-item label="邮件地址" label-class-name="labelClass" content-class-name="contentClass">
{{form.email}}
</el-descriptions-item>
<el-descriptions-item label="联系电话" label-class-name="labelClass" content-class-name="contentClass">
{{form.phoneNumber}}
</el-descriptions-item>
<el-descriptions-item label="身份证号码" label-class-name="labelClass" content-class-name="contentClass">
{{form.idCard}}
</el-descriptions-item>
<el-descriptions-item label="记录名片持有者所在公司或组织的名称ID" label-class-name="labelClass" content-class-name="contentClass">
{{form.companyId}}
</el-descriptions-item>
<el-descriptions-item label="记录名片持有者所在公司或组织的名称" label-class-name="labelClass" content-class-name="contentClass">
{{form.companyName}}
</el-descriptions-item>
<el-descriptions-item label="职位ID" label-class-name="labelClass" content-class-name="contentClass">
{{form.positionId}}
</el-descriptions-item>
<el-descriptions-item label="职位名称" label-class-name="labelClass" content-class-name="contentClass">
{{form.positionName}}
</el-descriptions-item>
<el-descriptions-item label="简介" label-class-name="labelClass" content-class-name="contentClass">
{{form.bio}}
</el-descriptions-item>
<el-descriptions-item label="社交媒体链接, 可以是一个包含社交媒体账号的JSON对象或单独的字段" label-class-name="labelClass" content-class-name="contentClass">
{{form.socialMedia}}
</el-descriptions-item>
<el-descriptions-item label="二维码图片, 可以是一个图片链接或存储路径" label-class-name="labelClass" content-class-name="contentClass">
{{form.qRCode}}
</el-descriptions-item>
<el-descriptions-item label="备注" label-class-name="labelClass" content-class-name="contentClass">
{{form.remark}}
</el-descriptions-item>
<el-descriptions-item label="累计查看次数" label-class-name="labelClass" content-class-name="contentClass">
{{form.sumViews}}
</el-descriptions-item>
<el-descriptions-item label="当日查看次数" label-class-name="labelClass" content-class-name="contentClass">
{{form.viewsByDay}}
</el-descriptions-item>
</el-descriptions>
</layout-view>
</template>
<script>
import view from "@/assets/mixins/view";
export default {
mixins: [view],
components: {
},
methods: {
},
data() {
return {
size:"small",
column:2,
toString:[
"gender",
],
toArrays: [
],
toDate: [
]
}
}
}
</script>
<style lang="less">
.labelClass{
width: 200px;
}
.el-descriptions__body{
margin-left: 5px;
margin-right: 5px;
color: #606266;
background-color: #FFF;
}
.contentClass{
width: 600px;
}
</style>
\ No newline at end of file
...@@ -9,8 +9,8 @@ ...@@ -9,8 +9,8 @@
<el-form ref="form" :model="form" :rules="rules" label-width="120px"> <el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row> <el-row>
<Field label="用户ID," prop="userId" v-model="form.userId" placeholder="请输入用户ID,"/> <Field label="用户ID," prop="userId" v-model="form.userId" placeholder="请输入用户ID,"/>
<Field label="员工ID, 关联到员工表中的ID,表示这是哪个名片的收藏" prop="staffId" v-model="form.staffId" placeholder="请输入员工ID, 关联到员工表中的ID,表示这是哪个名片的收藏"/> <Field label="员工ID, 关联到员工表中的ID,表示这是哪个名片的收藏" prop="staffId" v-model="form.staffId" placeholder="请输入员工ID, 关联到员工表中的ID,表示这是哪个名片的收藏"/>
<Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/> <Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/>
<Field label="收藏时间" prop="favoriteTime" v-model="form.favoriteTime" type="date" /> <Field label="收藏时间" prop="favoriteTime" v-model="form.favoriteTime" type="date" />
</el-row> </el-row>
......
...@@ -46,7 +46,8 @@ ...@@ -46,7 +46,8 @@
{label: "用户", prop: "userId", formatter: this.formatter}, {label: "用户", prop: "userId", formatter: this.formatter},
{label: "员工", prop: "staffId", formatter: this.formatter},
{label: "员工ID, 关联到员工表中的ID,表示这是哪个名片的收藏", prop: "staffId", formatter: this.formatter},
{label: "创建用户", prop: "createUserId", formatter: this.formatter}, {label: "创建用户", prop: "createUserId", formatter: this.formatter},
{ {
......
...@@ -11,9 +11,9 @@ ...@@ -11,9 +11,9 @@
<el-descriptions-item label="用户ID," label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item label="用户ID," label-class-name="labelClass" content-class-name="contentClass">
{{form.userId}} {{form.userId}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="员工ID, 关联到员工表中的ID,表示这是哪个名片的收藏" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item label="员工ID, 关联到员工表中的ID,表示这是哪个名片的收藏" label-class-name="labelClass" content-class-name="contentClass">
{{form.staffId}} {{form.staffId}}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="备注" label-class-name="labelClass" content-class-name="contentClass"> <el-descriptions-item label="备注" label-class-name="labelClass" content-class-name="contentClass">
{{form.remark}} {{form.remark}}
</el-descriptions-item> </el-descriptions-item>
...@@ -63,4 +63,4 @@ ...@@ -63,4 +63,4 @@
.contentClass{ .contentClass{
width: 600px; width: 600px;
} }
</style> </style>
\ No newline at end of file
package com.mortals.xhx.module.bussinesscard.dao;
import com.mortals.framework.dao.ICRUDDao;
import com.mortals.xhx.module.bussinesscard.model.BussinesscardEntity;
import java.util.List;
/**
* 名片基本信息Dao
* 名片基本信息 DAO接口
*
* @author zxfei
* @date 2023-10-10
*/
public interface BussinesscardDao extends ICRUDDao<BussinesscardEntity,Long>{
}
package com.mortals.xhx.module.bussinesscard.dao.ibatis;
import org.springframework.stereotype.Repository;
import com.mortals.xhx.module.bussinesscard.dao.BussinesscardDao;
import com.mortals.xhx.module.bussinesscard.model.BussinesscardEntity;
import java.util.Date;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import java.util.List;
/**
* 名片基本信息DaoImpl DAO接口
*
* @author zxfei
* @date 2023-10-10
*/
@Repository("bussinesscardDao")
public class BussinesscardDaoImpl extends BaseCRUDDaoMybatis<BussinesscardEntity,Long> implements BussinesscardDao {
}
package com.mortals.xhx.module.bussinesscard.model;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import java.math.BigDecimal;
import cn.hutool.core.date.DateUtil;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.bussinesscard.model.vo.BussinesscardVo;
import lombok.Data;
/**
* 名片基本信息实体对象
*
* @author zxfei
* @date 2023-10-10
*/
@Data
public class BussinesscardEntity extends BussinesscardVo {
private static final long serialVersionUID = 1L;
/**
* 名片所属关联员工ID
*/
private Long staffId;
/**
* 名片所属关联员工姓名
*/
private String staffName;
/**
* 名片姓名
*/
private String name;
/**
* 性别(1.男,2.女)
*/
private Integer gender;
/**
* 出生日期
*/
private Date birthday;
/**
* 照片
*/
private String photoPath;
/**
* 邮件地址
*/
private String email;
/**
* 联系电话
*/
private String phoneNumber;
/**
* 身份证号码
*/
private String idCard;
/**
* 记录名片持有者所在公司或组织的名称ID
*/
private String companyId;
/**
* 记录名片持有者所在公司或组织的名称
*/
private String companyName;
/**
* 职位ID
*/
private Long positionId;
/**
* 职位名称
*/
private String positionName;
/**
* 简介
*/
private String bio;
/**
* 社交媒体链接, 可以是一个包含社交媒体账号的JSON对象或单独的字段
*/
private String socialMedia;
/**
* 二维码图片, 可以是一个图片链接或存储路径
*/
private String qRCode;
/**
* 备注
*/
private String remark;
/**
* 累计查看次数
*/
private Integer sumViews;
/**
* 当日查看次数
*/
private Integer viewsByDay;
/**
* 发送名片次数
*/
private Integer sendBusinessCardTimes;
@Override
public int hashCode() {
return this.getId().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null) return false;
if (obj instanceof BussinesscardEntity) {
BussinesscardEntity tmp = (BussinesscardEntity) obj;
if (this.getId() == tmp.getId()) {
return true;
}
}
return false;
}
public void initAttrValue(){
this.staffId = null;
this.staffName = "";
this.name = "";
this.gender = 1;
this.birthday = new Date();
this.photoPath = "";
this.email = "";
this.phoneNumber = "";
this.idCard = "";
this.companyId = "";
this.companyName = "";
this.positionId = null;
this.positionName = "";
this.bio = "";
this.socialMedia = "";
this.qRCode = "";
this.remark = "";
this.sumViews = 0;
this.viewsByDay = 0;
this.sendBusinessCardTimes = 0;
}
}
\ No newline at end of file
package com.mortals.xhx.module.bussinesscard.model.vo;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.bussinesscard.model.BussinesscardEntity;
import java.util.ArrayList;
import java.util.List;
import lombok.Data;
import com.mortals.framework.annotation.Excel;
import java.math.BigDecimal;
import java.util.Date;
/**
* 名片基本信息视图对象
*
* @author zxfei
* @date 2023-10-10
*/
@Data
public class BussinesscardVo extends BaseEntityLong {
/** 序号,主键,自增长列表 */
private List <Long> idList;
}
\ No newline at end of file
package com.mortals.xhx.module.bussinesscard.service;
import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.bussinesscard.model.BussinesscardEntity;
import com.mortals.xhx.module.bussinesscard.dao.BussinesscardDao;
/**
* BussinesscardService
*
* 名片基本信息 service接口
*
* @author zxfei
* @date 2023-10-10
*/
public interface BussinesscardService extends ICRUDService<BussinesscardEntity,Long>{
BussinesscardDao getDao();
}
\ No newline at end of file
package com.mortals.xhx.module.bussinesscard.service.impl;
import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.xhx.module.bussinesscard.dao.BussinesscardDao;
import com.mortals.xhx.module.bussinesscard.model.BussinesscardEntity;
import com.mortals.xhx.module.bussinesscard.service.BussinesscardService;
import lombok.extern.slf4j.Slf4j;
/**
* BussinesscardService
* 名片基本信息 service实现
*
* @author zxfei
* @date 2023-10-10
*/
@Service("bussinesscardService")
@Slf4j
public class BussinesscardServiceImpl extends AbstractCRUDServiceImpl<BussinesscardDao, BussinesscardEntity, Long> implements BussinesscardService {
}
\ No newline at end of file
package com.mortals.xhx.module.bussinesscard.web;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import com.mortals.framework.model.Context;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.module.bussinesscard.model.BussinesscardEntity;
import com.mortals.xhx.module.bussinesscard.service.BussinesscardService;
import org.apache.commons.lang3.ArrayUtils;
import com.mortals.framework.util.StringUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.alibaba.fastjson.JSONObject;
import java.util.Arrays;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import static com.mortals.framework.ap.SysConstains.*;
/**
*
* 名片基本信息
*
* @author zxfei
* @date 2023-10-10
*/
@RestController
@RequestMapping("bussinesscard")
public class BussinesscardController extends BaseCRUDJsonBodyMappingController<BussinesscardService,BussinesscardEntity,Long> {
@Autowired
private ParamService paramService;
public BussinesscardController(){
super.setModuleDesc( "名片基本信息");
}
@Override
protected void init(Map<String, Object> model, Context context) {
this.addDict(model, "gender", paramService.getParamBySecondOrganize("Bussinesscard","gender"));
super.init(model, context);
}
}
\ No newline at end of file
...@@ -8,6 +8,9 @@ import com.mortals.framework.model.PageInfo; ...@@ -8,6 +8,9 @@ import com.mortals.framework.model.PageInfo;
import com.mortals.xhx.base.system.user.model.UserQuery; import com.mortals.xhx.base.system.user.model.UserQuery;
import com.mortals.xhx.base.system.user.service.UserService; import com.mortals.xhx.base.system.user.service.UserService;
import com.mortals.xhx.common.code.SourceEnum; import com.mortals.xhx.common.code.SourceEnum;
import com.mortals.xhx.module.bussinesscard.model.BussinesscardEntity;
import com.mortals.xhx.module.bussinesscard.model.BussinesscardQuery;
import com.mortals.xhx.module.bussinesscard.service.BussinesscardService;
import com.mortals.xhx.module.company.model.*; import com.mortals.xhx.module.company.model.*;
import com.mortals.xhx.module.company.model.vo.HomeStatInfo; import com.mortals.xhx.module.company.model.vo.HomeStatInfo;
import com.mortals.xhx.module.company.service.CompanyPatentService; import com.mortals.xhx.module.company.service.CompanyPatentService;
...@@ -59,6 +62,8 @@ public class CompanyServiceImpl extends AbstractCRUDServiceImpl<CompanyDao, Comp ...@@ -59,6 +62,8 @@ public class CompanyServiceImpl extends AbstractCRUDServiceImpl<CompanyDao, Comp
private CompanyLabelsService companyLabelsService; private CompanyLabelsService companyLabelsService;
@Autowired @Autowired
private CompanyPatentService companyPatentService; private CompanyPatentService companyPatentService;
@Autowired
private BussinesscardService bussinesscardService;
@Autowired @Autowired
private CompanyService companyService; private CompanyService companyService;
...@@ -195,19 +200,25 @@ public class CompanyServiceImpl extends AbstractCRUDServiceImpl<CompanyDao, Comp ...@@ -195,19 +200,25 @@ public class CompanyServiceImpl extends AbstractCRUDServiceImpl<CompanyDao, Comp
homeStatInfo.setProductDistributionList(companyList); homeStatInfo.setProductDistributionList(companyList);
//发送名片分布 //发送名片分布
Map<String, Integer> collect = staffList.stream().collect(Collectors.groupingBy(x -> x.getCompanyIds(), Collectors.summingInt(StaffEntity::getSendBusinessCardTimes)));
List<BussinesscardEntity> bussinesscardList = bussinesscardService.find(new BussinesscardQuery());
Map<String, Integer> collect = bussinesscardList.stream().collect(Collectors.groupingBy(x -> x.getCompanyId(), Collectors.summingInt(BussinesscardEntity::getSendBusinessCardTimes)));
/* Map<String, Integer> collect = staffList.stream().collect(Collectors.groupingBy(x -> x.getCompanyIds(), Collectors.summingInt(StaffEntity::getSendBusinessCardTimes)));
*/
companyList.forEach(company -> { companyList.forEach(company -> {
//归集公司发送卡片数量 //归集公司发送卡片数量
Long companyId = company.getId(); Long companyId = company.getId();
collect.entrySet().stream().forEach(item -> { company.setBusinessCardNums(collect.getOrDefault(companyId.toString(),0));
/* collect.entrySet().stream().forEach(item -> {
String key = item.getKey(); String key = item.getKey();
Integer nums = item.getValue(); Integer nums = item.getValue();
List<String> split = StrUtil.split(key, ","); List<String> split = StrUtil.split(key, ",");
if (split.contains(companyId.toString())) { if (split.contains(companyId.toString())) {
company.setBusinessCardNums(company.getBusinessCardNums() + nums); company.setBusinessCardNums(company.getBusinessCardNums() + nums);
} }
}); });*/
}); });
homeStatInfo.setBusinessCardDistributionList(companyList); homeStatInfo.setBusinessCardDistributionList(companyList);
......
...@@ -11,34 +11,34 @@ import com.mortals.framework.model.BaseEntityLong; ...@@ -11,34 +11,34 @@ import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.favorites.model.vo.FavoritesBusinesscardVo; import com.mortals.xhx.module.favorites.model.vo.FavoritesBusinesscardVo;
import lombok.Data; import lombok.Data;
/** /**
* 收藏名片实体对象 * 收藏名片实体对象
* *
* @author zxfei * @author zxfei
* @date 2023-10-07 * @date 2023-10-10
*/ */
@Data @Data
public class FavoritesBusinesscardEntity extends FavoritesBusinesscardVo { public class FavoritesBusinesscardEntity extends FavoritesBusinesscardVo {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** /**
* 用户ID, * 用户ID,
*/ */
private Long userId; private Long userId;
/** /**
* 员工ID, 关联到员工表中的ID,表示这是哪个名片的收藏 * 员工ID, 关联到员工表中的ID,表示这是哪个名片的收藏
*/ */
private Long staffId; private Long staffId;
/** /**
* 备注 * 备注
*/ */
private String remark; private String remark;
/** /**
* 收藏时间 * 收藏时间
*/ */
private Date favoriteTime; private Date favoriteTime;
@Override @Override
public int hashCode() { public int hashCode() {
return this.getId().hashCode(); return this.getId().hashCode();
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
...@@ -46,16 +46,16 @@ public class FavoritesBusinesscardEntity extends FavoritesBusinesscardVo { ...@@ -46,16 +46,16 @@ public class FavoritesBusinesscardEntity extends FavoritesBusinesscardVo {
if (obj instanceof FavoritesBusinesscardEntity) { if (obj instanceof FavoritesBusinesscardEntity) {
FavoritesBusinesscardEntity tmp = (FavoritesBusinesscardEntity) obj; FavoritesBusinesscardEntity tmp = (FavoritesBusinesscardEntity) obj;
if (this.getId() == tmp.getId()) { if (this.getId() == tmp.getId()) {
return true; return true;
} }
} }
return false; return false;
} }
public void initAttrValue(){ public void initAttrValue(){
this.userId = null; this.userId = null;
this.staffId = null; this.staffId = null;
this.remark = ""; this.remark = "";
this.favoriteTime = new Date(); this.favoriteTime = new Date();
} }
} }
\ No newline at end of file
...@@ -60,9 +60,7 @@ public class ProductServiceImpl extends AbstractCRUDCacheServiceImpl<ProductDao, ...@@ -60,9 +60,7 @@ public class ProductServiceImpl extends AbstractCRUDCacheServiceImpl<ProductDao,
if (ObjectUtils.isEmpty(entity.getCategoryId()) && ObjectUtils.isEmpty(entity.getCompanyId())) { if (ObjectUtils.isEmpty(entity.getCategoryId()) && ObjectUtils.isEmpty(entity.getCompanyId())) {
return super.find(entity, pageInfo, context); return super.find(entity, pageInfo, context);
} else { } else {
Integer hot = entity.getHot(); Integer hot = entity.getHot();
//针对不同查询返回不同结果集 //针对不同查询返回不同结果集
if (!ObjectUtils.isEmpty(entity.getCategoryId()) && ObjectUtils.isEmpty(entity.getCompanyId())) { if (!ObjectUtils.isEmpty(entity.getCategoryId()) && ObjectUtils.isEmpty(entity.getCompanyId())) {
Result<ProductCategoryEntity> productCategoryResult = productCategoryService.find(new ProductCategoryQuery().categoryId(Long.parseLong(entity.getCategoryId())), pageInfo, context); Result<ProductCategoryEntity> productCategoryResult = productCategoryService.find(new ProductCategoryQuery().categoryId(Long.parseLong(entity.getCategoryId())), pageInfo, context);
......
package com.mortals.xhx.module.staff.model; package com.mortals.xhx.module.staff.model;
import java.util.List;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -9,12 +10,13 @@ import com.fasterxml.jackson.annotation.JsonFormat; ...@@ -9,12 +10,13 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.framework.annotation.Excel; import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong; import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.staff.model.vo.StaffVo; import com.mortals.xhx.module.staff.model.vo.StaffVo;
import com.mortals.xhx.module.bussinesscard.model.BussinesscardEntity;
import lombok.Data; import lombok.Data;
/** /**
* 员工基本信息实体对象 * 员工基本信息实体对象
* *
* @author zxfei * @author zxfei
* @date 2023-09-28 * @date 2023-10-10
*/ */
@Data @Data
public class StaffEntity extends StaffVo { public class StaffEntity extends StaffVo {
...@@ -112,6 +114,17 @@ public class StaffEntity extends StaffVo { ...@@ -112,6 +114,17 @@ public class StaffEntity extends StaffVo {
* 邮件地址 * 邮件地址
*/ */
private String email; private String email;
/**
* 名片基本信息信息
*/
private List<BussinesscardEntity> bussinesscardList=new ArrayList<>();;
public List<BussinesscardEntity> getBussinesscardList(){
return bussinesscardList;
}
public void setBussinesscardList(List<BussinesscardEntity> bussinesscardList){
this.bussinesscardList = bussinesscardList;
}
@Override @Override
public int hashCode() { public int hashCode() {
return this.getId().hashCode(); return this.getId().hashCode();
...@@ -136,7 +149,7 @@ public class StaffEntity extends StaffVo { ...@@ -136,7 +149,7 @@ public class StaffEntity extends StaffVo {
this.phoneNumber = ""; this.phoneNumber = "";
this.idCard = ""; this.idCard = "";
this.workNum = ""; this.workNum = "";
this.companyIds = null; this.companyIds = "";
this.companyName = ""; this.companyName = "";
this.positionId = null; this.positionId = null;
this.positionName = ""; this.positionName = "";
......
package com.mortals.xhx.module.staff.model; package com.mortals.xhx.module.staff.model;
import java.util.List;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import com.mortals.xhx.module.staff.model.StaffEntity; import com.mortals.xhx.module.staff.model.StaffEntity;
...@@ -7,7 +8,7 @@ import com.mortals.xhx.module.staff.model.StaffEntity; ...@@ -7,7 +8,7 @@ import com.mortals.xhx.module.staff.model.StaffEntity;
* 员工基本信息查询对象 * 员工基本信息查询对象
* *
* @author zxfei * @author zxfei
* @date 2023-09-28 * @date 2023-10-10
*/ */
public class StaffQuery extends StaffEntity { public class StaffQuery extends StaffEntity {
/** 开始 序号,主键,自增长 */ /** 开始 序号,主键,自增长 */
......
...@@ -33,7 +33,34 @@ ...@@ -33,7 +33,34 @@
<result property="updateUserId" column="updateUserId" /> <result property="updateUserId" column="updateUserId" />
<result property="updateTime" column="updateTime" /> <result property="updateTime" column="updateTime" />
<result property="email" column="email" /> <result property="email" column="email" />
<collection property="bussinesscardList" column="id" ofType="BussinesscardEntity" javaType="ArrayList" select="getBussinesscardByStaffId"></collection>
</resultMap>
<resultMap type="BussinesscardEntity" id="BussinesscardEntity-Map">
<result property="id" column="id" />
<result property="staffId" column="staffId" />
<result property="staffName" column="staffName" />
<result property="name" column="name" />
<result property="gender" column="gender" />
<result property="birthday" column="birthday" />
<result property="photoPath" column="photoPath" />
<result property="email" column="email" />
<result property="phoneNumber" column="phoneNumber" />
<result property="idCard" column="idCard" />
<result property="companyId" column="companyId" />
<result property="companyName" column="companyName" />
<result property="positionId" column="positionId" />
<result property="positionName" column="positionName" />
<result property="bio" column="bio" />
<result property="socialMedia" column="socialMedia" />
<result property="qRCode" column="qRCode" />
<result property="remark" column="remark" />
<result property="sumViews" column="sumViews" />
<result property="viewsByDay" column="viewsByDay" />
<result property="createUserId" column="createUserId" />
<result property="createTime" column="createTime" />
<result property="updateUserId" column="updateUserId" />
<result property="updateTime" column="updateTime" />
<result property="sendBusinessCardTimes" column="sendBusinessCardTimes" />
</resultMap> </resultMap>
...@@ -126,6 +153,12 @@ ...@@ -126,6 +153,12 @@
</if> </if>
</trim> </trim>
</sql> </sql>
<!-- 子表所有列 -->
<sql id="_columns_sub">
<trim suffixOverrides="," suffix="">
b.id,b.staffId,b.staffName,b.name,b.gender,b.birthday,b.photoPath,b.email,b.phoneNumber,b.idCard,b.companyId,b.companyName,b.positionId,b.positionName,b.bio,b.socialMedia,b.qRCode,b.remark,b.sumViews,b.viewsByDay,b.createUserId,b.createTime,b.updateUserId,b.updateTime,b.sendBusinessCardTimes,
</trim>
</sql>
<!-- 新增 区分主键自增加还是业务插入 --> <!-- 新增 区分主键自增加还是业务插入 -->
<insert id="insert" parameterType="StaffEntity" useGeneratedKeys="true" keyProperty="id"> <insert id="insert" parameterType="StaffEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_xhx_staff insert into mortals_xhx_staff
...@@ -572,6 +605,14 @@ ...@@ -572,6 +605,14 @@
</trim> </trim>
<include refid="_orderCols_"/> <include refid="_orderCols_"/>
</select> </select>
<!-- 获取子列表 -->
<select id="getBussinesscardByStaffId" parameterType="java.lang.Long" resultMap="BussinesscardEntity-Map">
select <include refid="_columns_sub"/>
from mortals_xhx_bussinesscard as b
<trim suffixOverrides="where" suffix="">
where b.staffId = #{id}
</trim>
</select>
......
###登录
POST {{baseUrl}}/login/login
Content-Type: application/json
{
"loginName":"admin",
"password":"admin",
"securityCode":"8888"
}
> {%
client.global.set("SmsSet_id", JSON.parse(response.body).data.id);
client.global.set("authToken", JSON.parse(response.body).data.token);
%}
###名片基本信息列表
POST {{baseUrl}}/bussinesscard/list
Content-Type: application/json
{
"name":"vnayhk",
"page":1,
"size":10
}
###名片基本信息更新与保存
POST {{baseUrl}}/bussinesscard/save
Authorization: {{authToken}}
Content-Type: application/json
{
"staffId":337,
"staffName":"c3wyon",
"name":"8vgaa5",
"gender":1,
"birthday":"1696867200000",
"photoPath":"61am9c",
"email":"g7vq3t",
"phoneNumber":"9cwg6l",
"idCard":"6vhk76",
"companyId":"v8ffsl",
"companyName":"y7mpfu",
"positionId":289,
"positionName":"0euhd1",
"bio":"yhqz2z",
"socialMedia":"8gn733",
"qRCode":"s8fol9",
"remark":"sm5979",
"sumViews":0,
"viewsByDay":0,
}
> {%
client.global.set("Bussinesscard_id", JSON.parse(response.body).data.id);
%}
###名片基本信息查看
GET {{baseUrl}}/bussinesscard/info?id={{Bussinesscard_id}}
Accept: application/json
###名片基本信息编辑
GET {{baseUrl}}/bussinesscard/edit?id={{Bussinesscard_id}}
Accept: application/json
###名片基本信息删除
GET {{baseUrl}}/bussinesscard/delete?id={{Bussinesscard_id}}
Authorization: {{authToken}}
Accept: application/json
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment