Commit da13f514 authored by 王晓旭's avatar 王晓旭
parents 0de22b3c 7342246d
......@@ -334,3 +334,22 @@ INSERT INTO `mortals_xhx_resource` VALUES (null, '收藏名片-菜单管理-维
-- ----------------------------
-- 收藏名片参数 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(
`updateTime` datetime COMMENT '更新时间',
PRIMARY KEY (`id`)
) 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({
...restBuilder('feedback', 'feedback'),//反馈信息
...restBuilder('staff', 'staff'),//员工基本信息
...restBuilder('bussinesscard', 'bussinesscard'),//名片基本信息
...restBuilder('staff/record', 'staff/record'),//客户访问记录信息
...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 :span="20" label="所属关联员工" prop="staffId" v-model="form.staffId" type="select" :enumData="dict.staffId" placeholder="请输入名片所属关联员工ID"/>
<Field :span="20" label="名片姓名" prop="name" v-model="form.name" placeholder="请输入名片姓名"/>
<Field :span="20" label="性别" prop="gender" v-model="form.gender" type="select" :enumData="dict.gender" placeholder="请选择性别"/>
<Field :span="20" label="出生日期" prop="birthday" v-model="form.birthday" type="date" />
<Field :span="20" label="照片" prop="photoPath" placeholder="请输入照片"><imageUpload v-model="form.photoPath" prePath="/file/preview"/> </Field>
<Field :span="20" label="邮件地址" prop="email" v-model="form.email" placeholder="请输入邮件地址"/>
<Field :span="20" label="联系电话" prop="phoneNumber" v-model="form.phoneNumber" placeholder="请输入联系电话"/>
<Field :span="20" label="身份证号码" prop="idCard" v-model="form.idCard" placeholder="请输入身份证号码"/>
<Field :span="20" label="所在公司" prop="companyId" v-model="form.companyId" type="select" :enumData="dict.companyId" placeholder="请输入记录名片持有者所在公司或组织的名称ID"/>
<Field :span="20" label="职位" prop="positionId" v-model="form.positionId" type="select" :enumData="dict.positionId" placeholder="请输入职位ID"/>
<Field :span="20" label="简介" prop="bio" v-model="form.bio" type="textarea" placeholder="请输入简介"/>
<Field :span="20" label="社交媒体链接" prop="socialMedia" v-model="form.socialMedia" type="textarea" placeholder="请输入社交媒体链接, 可以是一个包含社交媒体账号的JSON对象或单独的字段"/>
<Field :span="20" label="二维码图片" prop="qRCode" placeholder="请输入二维码图片"><imageUpload v-model="form.qRCode" prePath="/file/preview"/> </Field>
<Field :span="20" label="备注" prop="remark" v-model="form.remark" type="textarea" 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",
"staffId",
"companyId",
"positionId",
],
toDate:[
"birthday",
],
// 表单校验
rules: {
staffId: [
{required: true,message: "请选择员工", trigger: "blur" },
],
name: [
{required: true,message: "请输入名片姓名", trigger: "blur" },
{max: 64,message: "最多只能录入64个字符",trigger: "blur",},
],
companyId: [
{required: true,message: "请选择所在公司", trigger: "blur" },
],
positionId: [
{required: true,message: "请选择职位", 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",formatter: (row) => {
return row.photoPath != "" ? (
<el-image
style="width: 70px; height: 70px"
src={row.photoPath}
preview-src-list={[row.photoPath]}
></el-image>
) : (
"--"
);
},},
{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>
<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
......@@ -46,7 +46,8 @@
{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},
{
......
<template>
<div class="page">
<LayoutTable ref="layouttable" :data="tableData" :config="tableConfig" notDel notAdd>
<LayoutTable ref="layouttable" :data="tableData" :config="tableConfig" >
<!-- 热门0为非热门1为热门 -->
<div slot="table-search-left" class="onlyhot">
<el-checkbox
......
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 com.mortals.xhx.module.company.model.CompanyQuery;
import com.mortals.xhx.module.company.service.CompanyService;
import com.mortals.xhx.module.position.model.PositionQuery;
import com.mortals.xhx.module.position.service.PositionService;
import com.mortals.xhx.module.staff.model.StaffQuery;
import com.mortals.xhx.module.staff.service.StaffService;
import org.checkerframework.checker.units.qual.A;
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;
@Autowired
private StaffService staffService;
@Autowired
private CompanyService companyService;
@Autowired
private PositionService positionService;
public BussinesscardController() {
super.setModuleDesc("名片基本信息");
}
@Override
protected void init(Map<String, Object> model, Context context) {
this.addDict(model, "gender", paramService.getParamBySecondOrganize("Bussinesscard", "gender"));
this.addDict(model, "staffId", staffService.find(new StaffQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getName(), (o, n) -> n)));
this.addDict(model, "companyId", companyService.find(new CompanyQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getCompanyName(), (o, n) -> n)));
this.addDict(model, "positionId", positionService.find(new PositionQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getPositionName(), (o, n) -> n)));
super.init(model, context);
}
}
\ No newline at end of file
......@@ -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.service.UserService;
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.vo.HomeStatInfo;
import com.mortals.xhx.module.company.service.CompanyPatentService;
......@@ -59,6 +62,8 @@ public class CompanyServiceImpl extends AbstractCRUDServiceImpl<CompanyDao, Comp
private CompanyLabelsService companyLabelsService;
@Autowired
private CompanyPatentService companyPatentService;
@Autowired
private BussinesscardService bussinesscardService;
@Autowired
private CompanyService companyService;
......@@ -195,19 +200,25 @@ public class CompanyServiceImpl extends AbstractCRUDServiceImpl<CompanyDao, Comp
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 -> {
//归集公司发送卡片数量
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();
Integer nums = item.getValue();
List<String> split = StrUtil.split(key, ",");
if (split.contains(companyId.toString())) {
company.setBusinessCardNums(company.getBusinessCardNums() + nums);
}
});
});*/
});
homeStatInfo.setBusinessCardDistributionList(companyList);
......
......@@ -90,6 +90,16 @@ public class CompanyController extends BaseCRUDJsonBodyMappingController<Company
return super.editAfter(id, model, entity, context);
}
@Override
protected int viewAfter(Long id, Map<String, Object> model, CompanyEntity entity, Context context) throws AppException {
List<CompanyPatentEntity> companyPatentEntities = companyPatentService.find(new CompanyPatentQuery().companyId(entity.getId()));
entity.setCompanyPatentsList(companyPatentEntities);
return super.viewAfter(id, model, entity, context);
}
/**
* 首页统计
*/
......
......@@ -11,11 +11,11 @@ import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.favorites.model.vo.FavoritesBusinesscardVo;
import lombok.Data;
/**
* 收藏名片实体对象
*
* @author zxfei
* @date 2023-10-07
*/
* 收藏名片实体对象
*
* @author zxfei
* @date 2023-10-10
*/
@Data
public class FavoritesBusinesscardEntity extends FavoritesBusinesscardVo {
private static final long serialVersionUID = 1L;
......
......@@ -4,11 +4,11 @@ import java.util.Date;
import java.util.List;
import com.mortals.xhx.module.favorites.model.FavoritesBusinesscardEntity;
/**
* 收藏名片查询对象
*
* @author zxfei
* @date 2023-10-07
*/
* 收藏名片查询对象
*
* @author zxfei
* @date 2023-10-10
*/
public class FavoritesBusinesscardQuery extends FavoritesBusinesscardEntity {
/** 开始 序号,主键,自增长 */
private Long idStart;
......
......@@ -60,9 +60,7 @@ public class ProductServiceImpl extends AbstractCRUDCacheServiceImpl<ProductDao,
if (ObjectUtils.isEmpty(entity.getCategoryId()) && ObjectUtils.isEmpty(entity.getCompanyId())) {
return super.find(entity, pageInfo, context);
} else {
Integer hot = entity.getHot();
//针对不同查询返回不同结果集
if (!ObjectUtils.isEmpty(entity.getCategoryId()) && ObjectUtils.isEmpty(entity.getCompanyId())) {
Result<ProductCategoryEntity> productCategoryResult = productCategoryService.find(new ProductCategoryQuery().categoryId(Long.parseLong(entity.getCategoryId())), pageInfo, context);
......
package com.mortals.xhx.module.staff.model;
import java.util.List;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
......@@ -9,12 +10,13 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.staff.model.vo.StaffVo;
import com.mortals.xhx.module.bussinesscard.model.BussinesscardEntity;
import lombok.Data;
/**
* 员工基本信息实体对象
*
* @author zxfei
* @date 2023-09-28
* @date 2023-10-10
*/
@Data
public class StaffEntity extends StaffVo {
......@@ -112,6 +114,17 @@ public class StaffEntity extends StaffVo {
* 邮件地址
*/
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
public int hashCode() {
return this.getId().hashCode();
......@@ -136,7 +149,7 @@ public class StaffEntity extends StaffVo {
this.phoneNumber = "";
this.idCard = "";
this.workNum = "";
this.companyIds = null;
this.companyIds = "";
this.companyName = "";
this.positionId = null;
this.positionName = "";
......
package com.mortals.xhx.module.staff.model;
import java.util.List;
import java.util.Date;
import java.util.List;
import com.mortals.xhx.module.staff.model.StaffEntity;
......@@ -7,7 +8,7 @@ import com.mortals.xhx.module.staff.model.StaffEntity;
* 员工基本信息查询对象
*
* @author zxfei
* @date 2023-09-28
* @date 2023-10-10
*/
public class StaffQuery extends StaffEntity {
/** 开始 序号,主键,自增长 */
......
......@@ -72,7 +72,7 @@ public class StaffController extends BaseCRUDJsonBodyMappingController<StaffServ
this.addDict(model, "staffStatus", paramService.getParamBySecondOrganize("Staff", "staffStatus"));
this.addDict(model, "source", paramService.getParamBySecondOrganize("Staff", "source"));
this.addDict(model, "companyId", companyService.find(new CompanyQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getCompanyName(), (o, n) -> n)));
this.addDict(model, "companyIds", companyService.find(new CompanyQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getCompanyName(), (o, n) -> n)));
this.addDict(model, "positionId", positionService.find(new PositionQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getPositionName(), (o, n) -> n)));
this.addDict(model, "updateUserId", userService.find(new UserQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getRealName(), (o, n) -> n)));
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
"mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.module.favorites.dao.ibatis.FavoritesBusinesscardDaoImpl">
<!-- 字段和属性映射 -->
......
......@@ -33,7 +33,34 @@
<result property="updateUserId" column="updateUserId" />
<result property="updateTime" column="updateTime" />
<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>
......@@ -126,6 +153,12 @@
</if>
</trim>
</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 into mortals_xhx_staff
......@@ -572,6 +605,14 @@
</trim>
<include refid="_orderCols_"/>
</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