You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wkcrm/application/admin/logic/PrintingLogic.php

398 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
/**
* 打印设置逻辑类
*
* @author qifan
* @date 2020-12-03
*/
namespace app\admin\logic;
use app\admin\controller\ApiCommon;
use think\Db;
class PrintingLogic
{
/**
* 打印模板列表
*
* @param array $param : int $page 页码; int $limit 每页记录条数; string $type 打印模板类型
* @author fanqi
* @date 2021-03-26
* @return array
*/
public function index($param)
{
$page = !empty($param['page']) ? $param['page'] : 1;
$limit = !empty($param['limit']) ? $param['limit'] : 500;
$where = !empty($param['type']) ? ['type' => $param['type']] : [];
$result = [];
$type = [5 => '商机', 6 => '合同', 7 => '回款'];
$field = ['id', 'name', 'type', 'user_name', 'create_time', 'update_time'];
$count = Db::name('admin_printing')->where($where)->count();
$data = Db::name('admin_printing')
->field($field)
->where($where)
->order('id', 'desc')
->limit(($page - 1) * $limit, $limit)
->select();
foreach ($data AS $key => $value) {
$result[] = [
'id' => $value['id'],
'name' => $value['name'],
'type' => $value['type'],
'type_name' => !empty($type[$value['type']]) ? $type[$value['type']] : '',
'create_time' => date('Y-m-d H:i:s', $value['create_time']),
'user_name' => $value['user_name'],
'update_time' => date('Y-m-d H:i:s', $value['update_time'])
];
}
return ['count' => $count, 'list' => $result];
}
/**
* 创建打印模板
*
* @param $param
* @return int|string
*/
public function create($param)
{
$apiCommon = new ApiCommon();
$userId = $apiCommon->userInfo['id'];
$userName = Db::name('admin_user')->where('id', $userId)->value('realname');
$data = [
'user_id' => $userId,
'user_name' => $userName,
'name' => $param['name'],
'type' => $param['type'],
'content' => json_encode(['data' => $param['content']]),
// 'content' => htmlspecialchars($param['content']),
'create_time' => time(),
'update_time' => time()
];
return Db::name('admin_printing')->insert($data);
}
/**
* 获取模板详情
*
* @param $id
* @return array
*/
public function read($id)
{
$content = Db::name('admin_printing')->where('id', $id)->value('content');
$contentArray = json_decode($content, true);
return ['id' => $id, 'content' => $contentArray['data']];
}
/**
* 更新模板数据
*
* @param $param
* @return int|string
* @throws \think\Exception
* @throws \think\exception\PDOException
*/
public function update($param)
{
if (!empty($param['content'])) $param['content'] = json_encode(['data' => $param['content']]);
return Db::name('admin_printing')->update($param);
}
/**
* 删除模板数据
*
* @param $id
* @return int
* @throws \think\Exception
* @throws \think\exception\PDOException
*/
public function delete($id)
{
return Db::name('admin_printing')->where('id', $id)->delete();
}
/**
* 复制模板数据
*
* @param $id
* @return false|int|string
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function copy($id)
{
$apiCommon = new ApiCommon();
$info = Db::name('admin_printing')->where('id', $id)->find();
if (!empty($info['id'])) {
$userId = $apiCommon->userInfo['id'];
$userName = Db::name('admin_user')->where('id', $userId)->value('realname');
$data = [
'user_id' => $userId,
'user_name' => $userName,
'name' => strlen($info['name']) > 25 ? $info['name'] : $info['name'] . rand(111, 999),
'type' => $info['type'],
'content' => $info['content'],
'update_time' => time(),
'create_time' => time()
];
return Db::name('admin_printing')->insert($data);
}
return false;
}
/**
* 获取打印模板需要的字段
*
* @param $type 5商机6合同7回款
* @return array[]
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function getFields($type)
{
$result = [];
switch ($type) {
case 5:
$result['business'] = $this->getBusinessFields();
$result['customer'] = $this->getCustomerFields(5);
$result['product'] = $this->getProductFields(5);
break;
case 6:
$result['contract'] = $this->getContractFields(6);
$result['customer'] = $this->getCustomerFields(6);
$result['contacts'] = $this->getContactsFields();
$result['product'] = $this->getProductFields(6);
break;
case 7:
$result['receivables'] = $this->getReceivablesFields(7);
$result['contract'] = $this->getContractFields(7);
break;
default:
$result[] = [];
}
return $result;
}
/**
* 获取商机字段
*
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
private function getBusinessFields()
{
$result = [];
$businessList = Db::name('admin_field')->field(['name', 'field'])->where('types', 'crm_business')->select();
# 处理自定义字段
foreach ($businessList AS $key => $value) {
if ($value['field'] == 'customer_id') continue;
$result[] = [
'name' => $value['name'],
'field' => $value['field']
];
}
# 处理固定字段
$result[] = ['name' => '负责人', 'field' => 'owner_user_id'];
$result[] = ['name' => '创建人', 'field' => 'create_user_id'];
$result[] = ['name' => '创建日期', 'field' => 'create_time'];
$result[] = ['name' => '更新日期', 'field' => 'update_time'];
return $result;
}
/**
* 获取客户字段
*
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
private function getCustomerFields($type)
{
$result = [];
$customerList = Db::name('admin_field')->field(['name', 'field'])->where('types', 'crm_customer')->select();
# 处理自定义字段
foreach ($customerList AS $key => $value) {
if (in_array($value['field'], ['next_time'])) continue;
if (in_array($type, [5, 6]) && in_array($value['field'], ['deal_status'])) continue;
$result[] = [
'name' => $value['name'],
'field' => $value['field']
];
}
# 处理固定字段
if (in_array($type, [5, 6])) {
$result[] = ['name' => '详细地址', 'field' => 'address'];
$result[] = ['name' => '区域', 'field' => 'detail_address'];
}
return $result;
}
/**
* 获取产品字段
*
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
private function getProductFields($type)
{
$result = [];
$productList = Db::name('admin_field')->field(['name', 'field'])->where('types', 'crm_product')->select();
# 处理自定义字段
foreach ($productList AS $key => $value) {
if (in_array($value['field'], ['status'])) continue;
if (in_array($type, [5, 6]) && in_array($value['field'], ['description'])) continue;
$result[] = [
'name' => $value['name'],
'field' => $value['field']
];
}
# 处理固定字段
$result[] = ['name' => '售价', 'field' => 'sales_price'];
$result[] = ['name' => '数量', 'field' => 'count'];
$result[] = ['name' => '折扣', 'field' => 'discount'];
$result[] = ['name' => '整单折扣', 'field' => 'discount_rate'];
$result[] = ['name' => '合计', 'field' => 'subtotal'];
$result[] = ['name' => '产品总金额', 'field' => 'total_price'];
return $result;
}
/**
* 获取合同字段
*
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
private function getContractFields($type)
{
$result = [];
$contractList = Db::name('admin_field')->field(['name', 'field'])->where('types', 'crm_contract')->select();
# 处理自定义字段
foreach ($contractList AS $key => $value) {
if (in_array($type, [6, 7]) && in_array($value['field'], ['customer_id'])) continue;
if ($type == 7 && in_array($value['field'], ['business_id'])) continue;
$result[] = [
'name' => $value['name'],
'field' => $value['field']
];
}
if (!in_array($type, [7])) {
$result[] = ['name' => '负责人', 'field' => 'create_user_id'];
$result[] = ['name' => '创建人', 'field' => 'owner_user_id'];
$result[] = ['name' => '创建日期', 'field' => 'create_time'];
$result[] = ['name' => '更新日期', 'field' => 'update_time'];
$result[] = ['name' => '已收款金额', 'field' => 'done_money'];
$result[] = ['name' => '未收款金额', 'field' => 'uncollected_money'];
}
return $result;
}
/**
* 获取联系人字段
*
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
private function getContactsFields()
{
$result = [];
$contactsList = Db::name('admin_field')->field(['name', 'field'])->where('types', 'crm_contacts')->select();
# 处理自定义字段
foreach ($contactsList AS $key => $value) {
if ($value['field'] == 'next_time') continue;
$result[] = [
'name' => $value['name'],
'field' => $value['field']
];
}
return $result;
}
/**
* 获取回款字段
*
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
private function getReceivablesFields($type)
{
$result = [];
$receivablesList = Db::name('admin_field')->field(['name', 'field'])->where('types', 'crm_receivables')->select();
# 处理自定义字段
foreach ($receivablesList AS $key => $value) {
if (in_array($value['field'], ['contract_id'])) continue;
if (in_array($type, [7]) && in_array($value['field'], ['contract_id'])) continue;
$result[] = [
'name' => $value['name'],
'field' => $value['field']
];
}
# 处理固定字段
$result[] = ['name' => '负责人', 'field' => 'owner_user_id'];
$result[] = ['name' => '创建人', 'field' => 'create_user_id'];
$result[] = ['name' => '创建日期', 'field' => 'create_time'];
$result[] = ['name' => '更新日期', 'field' => 'update_time'];
return $result;
}
}