소스 검색

兽医人员库

wwh 1 주 전
부모
커밋
6f9c930588

+ 7 - 0
baqing-admin/src/main/java/com/ruoyi/web/modules/diagnosis/controller/BizMedicalResourceController.java

@@ -55,6 +55,13 @@ public class BizMedicalResourceController extends BaseController
55 55
         return getDataTable(list);
56 56
     }
57 57
 
58
+    @PreAuthorize("@ss.hasPermi('diseaseTreatment:medicalResource:list')")
59
+    @GetMapping("/townOptions")
60
+    public AjaxResult townOptions()
61
+    {
62
+        return success(bizMedicalResourceService.listTownOptions());
63
+    }
64
+
58 65
     @PreAuthorize("@ss.hasPermi('diseaseTreatment:medicalResource:query')")
59 66
     @GetMapping("/{id}")
60 67
     public AjaxResult getInfo(@PathVariable("id") Long id)

+ 26 - 0
baqing-admin/src/main/java/com/ruoyi/web/modules/diagnosis/domain/BizMedicalResource.java

@@ -31,6 +31,12 @@ public class BizMedicalResource extends BaseEntity
31 31
 
32 32
     private String affiliatedUnit;
33 33
 
34
+    /** 所属乡镇部门 ID(仅兽医人员,非必填) */
35
+    private Long townDeptId;
36
+
37
+    /** 所属乡镇名称冗余 */
38
+    private String townName;
39
+
34 40
     private String detailAddress;
35 41
 
36 42
     /** 库字段:逗号分隔 */
@@ -193,6 +199,26 @@ public class BizMedicalResource extends BaseEntity
193 199
         this.affiliatedUnit = affiliatedUnit;
194 200
     }
195 201
 
202
+    public Long getTownDeptId()
203
+    {
204
+        return townDeptId;
205
+    }
206
+
207
+    public void setTownDeptId(Long townDeptId)
208
+    {
209
+        this.townDeptId = townDeptId;
210
+    }
211
+
212
+    public String getTownName()
213
+    {
214
+        return townName;
215
+    }
216
+
217
+    public void setTownName(String townName)
218
+    {
219
+        this.townName = townName;
220
+    }
221
+
196 222
     public String getDetailAddress()
197 223
     {
198 224
         return detailAddress;

+ 4 - 0
baqing-admin/src/main/java/com/ruoyi/web/modules/diagnosis/service/IBizMedicalResourceService.java

@@ -1,6 +1,7 @@
1 1
 package com.ruoyi.web.modules.diagnosis.service;
2 2
 
3 3
 import java.util.List;
4
+import java.util.Map;
4 5
 import com.ruoyi.web.modules.diagnosis.domain.BizMedicalResource;
5 6
 
6 7
 /**
@@ -32,4 +33,7 @@ public interface IBizMedicalResourceService
32 33
 
33 34
     /** 批量分配账号;已分配账号的记录跳过,其余按单条规则处理 */
34 35
     int assignAccountByIds(Long[] ids, String operator);
36
+
37
+    /** 填报乡镇下拉(兽医人员所属乡镇) */
38
+    List<Map<String, Object>> listTownOptions();
35 39
 }

+ 48 - 2
baqing-admin/src/main/java/com/ruoyi/web/modules/diagnosis/service/impl/BizMedicalResourceServiceImpl.java

@@ -4,11 +4,13 @@ import java.io.File;
4 4
 import java.util.ArrayList;
5 5
 import java.util.Date;
6 6
 import java.util.List;
7
+import java.util.Map;
7 8
 import org.springframework.beans.factory.annotation.Autowired;
8 9
 import org.springframework.stereotype.Service;
9 10
 import org.springframework.transaction.annotation.Transactional;
10 11
 import com.ruoyi.common.config.RuoYiConfig;
11 12
 import com.ruoyi.common.constant.Constants;
13
+import com.ruoyi.common.core.domain.entity.SysDept;
12 14
 import com.ruoyi.common.core.domain.entity.SysUser;
13 15
 import com.ruoyi.common.exception.ServiceException;
14 16
 import com.ruoyi.common.utils.StringUtils;
@@ -23,6 +25,7 @@ import com.ruoyi.web.modules.diagnosis.support.MedicalResourceReferenceChecker;
23 25
 import com.ruoyi.web.modules.diagnosis.support.MedicalResourceRules;
24 26
 import com.ruoyi.web.modules.diagnosis.support.MedicalResourceTypeValidator;
25 27
 import com.ruoyi.web.modules.diagnosis.support.MedicalResourceValidation;
28
+import com.ruoyi.web.modules.industryservice.support.TownDeptSupport;
26 29
 
27 30
 /**
28 31
  * 畜牧医疗资源服务实现。
@@ -42,6 +45,9 @@ public class BizMedicalResourceServiceImpl implements IBizMedicalResourceService
42 45
     @Autowired
43 46
     private MedicalResourceTypeValidator medicalResourceTypeValidator;
44 47
 
48
+    @Autowired
49
+    private TownDeptSupport townDeptSupport;
50
+
45 51
     @Override
46 52
     public BizMedicalResource selectBizMedicalResourceById(Long id)
47 53
     {
@@ -71,6 +77,7 @@ public class BizMedicalResourceServiceImpl implements IBizMedicalResourceService
71 77
     {
72 78
         medicalResourceTypeValidator.assertAllowed(row.getResourceType());
73 79
         MedicalResourceValidation.validateRowForSave(row);
80
+        applyTownDept(row);
74 81
         row.setPublishStatus(MedicalResourceRules.PUBLISH_STATUS_DRAFT);
75 82
         row.setPublishTime(null);
76 83
         row.setOfflineTime(null);
@@ -95,6 +102,7 @@ public class BizMedicalResourceServiceImpl implements IBizMedicalResourceService
95 102
         row.setResourceType(db.getResourceType());
96 103
         medicalResourceTypeValidator.assertAllowed(row.getResourceType());
97 104
         MedicalResourceValidation.validateRowForSave(row);
105
+        applyTownDept(row);
98 106
 
99 107
         String oldPhotoPath = db.getPhotoFilePath();
100 108
         row.setPublishStatus(db.getPublishStatus());
@@ -106,9 +114,13 @@ public class BizMedicalResourceServiceImpl implements IBizMedicalResourceService
106 114
         row.setDelFlag(db.getDelFlag());
107 115
 
108 116
         int n = bizMedicalResourceMapper.updateBizMedicalResource(row);
109
-        if (n > 0 && !StringUtils.equals(StringUtils.nvl(oldPhotoPath, ""), StringUtils.nvl(row.getPhotoFilePath(), "")))
117
+        if (n > 0)
110 118
         {
111
-            deleteDiskFile(oldPhotoPath);
119
+            accountAssigner.syncLinkedUserDept(row);
120
+            if (!StringUtils.equals(StringUtils.nvl(oldPhotoPath, ""), StringUtils.nvl(row.getPhotoFilePath(), "")))
121
+            {
122
+                deleteDiskFile(oldPhotoPath);
123
+            }
112 124
         }
113 125
         return n;
114 126
     }
@@ -272,6 +284,40 @@ public class BizMedicalResourceServiceImpl implements IBizMedicalResourceService
272 284
         return row;
273 285
     }
274 286
 
287
+    /**
288
+     * 兽医人员可选所属乡镇:校验部门并冗余乡镇名;非兽医清空。
289
+     */
290
+    private void applyTownDept(BizMedicalResource row)
291
+    {
292
+        if (row == null)
293
+        {
294
+            return;
295
+        }
296
+        if (!MedicalResourceRules.RESOURCE_TYPE_VET.equals(row.getResourceType()))
297
+        {
298
+            row.setTownDeptId(null);
299
+            row.setTownName(null);
300
+            return;
301
+        }
302
+        if (row.getTownDeptId() == null)
303
+        {
304
+            row.setTownName(null);
305
+            return;
306
+        }
307
+        SysDept town = townDeptSupport.requireReportTown(row.getTownDeptId());
308
+        if (town == null)
309
+        {
310
+            throw new ServiceException("所属乡镇无效");
311
+        }
312
+        row.setTownName(town.getDeptName());
313
+    }
314
+
315
+    @Override
316
+    public List<Map<String, Object>> listTownOptions()
317
+    {
318
+        return townDeptSupport.toOptionList();
319
+    }
320
+
275 321
     private static List<Long> cleanIds(Long[] ids)
276 322
     {
277 323
         List<Long> cleaned = new ArrayList<>();

+ 22 - 0
baqing-admin/src/main/java/com/ruoyi/web/modules/diagnosis/support/MedicalResourceAccountAssigner.java

@@ -46,6 +46,10 @@ public class MedicalResourceAccountAssigner
46 46
         user.setUserName(loginName);
47 47
         user.setNickName(resource.getResourceName());
48 48
         user.setPhonenumber(resource.getContactPhone());
49
+        if (resource.getTownDeptId() != null)
50
+        {
51
+            user.setDeptId(resource.getTownDeptId());
52
+        }
49 53
         user.setPassword(SecurityUtils.encryptPassword(initPwd));
50 54
         user.setStatus("0");
51 55
         user.setCreateBy(operator);
@@ -58,6 +62,24 @@ public class MedicalResourceAccountAssigner
58 62
         return user;
59 63
     }
60 64
 
65
+    /**
66
+     * 已分配账号时,将所属乡镇同步到 sys_user.dept_id(可为空以清空)。
67
+     */
68
+    public void syncLinkedUserDept(BizMedicalResource resource)
69
+    {
70
+        if (resource == null
71
+                || resource.getAccountAssigned() == null
72
+                || resource.getAccountAssigned() != MedicalResourceRules.ACCOUNT_ASSIGNED_YES
73
+                || resource.getSysUserId() == null)
74
+        {
75
+            return;
76
+        }
77
+        SysUser user = new SysUser();
78
+        user.setUserId(resource.getSysUserId());
79
+        user.setDeptId(resource.getTownDeptId());
80
+        sysUserService.updateUserProfile(user);
81
+    }
82
+
61 83
     /**
62 84
      * 逻辑删除资源时,若已分配平台账号则一并删除(草稿 §10)。
63 85
      */

+ 9 - 0
baqing-admin/src/main/java/com/ruoyi/web/modules/diagnosis/support/MedicalResourceValidation.java

@@ -429,14 +429,17 @@ public final class MedicalResourceValidation
429 429
         }
430 430
         else if (MedicalResourceRules.RESOURCE_TYPE_TEAM.equals(type))
431 431
         {
432
+            clearTownFields(row);
432 433
             validateTeamFields(row);
433 434
         }
434 435
         else if (MedicalResourceRules.RESOURCE_TYPE_ORG.equals(type))
435 436
         {
437
+            clearTownFields(row);
436 438
             validateOrgFields(row);
437 439
         }
438 440
         else if (MedicalResourceRules.RESOURCE_TYPE_EQUIPMENT.equals(type))
439 441
         {
442
+            clearTownFields(row);
440 443
             validateEquipmentFields(row);
441 444
         }
442 445
         else
@@ -445,6 +448,12 @@ public final class MedicalResourceValidation
445 448
         }
446 449
     }
447 450
 
451
+    private static void clearTownFields(BizMedicalResource row)
452
+    {
453
+        row.setTownDeptId(null);
454
+        row.setTownName(null);
455
+    }
456
+
448 457
     private static void validateVetFields(BizMedicalResource row)
449 458
     {
450 459
         validateContactPhone(row.getContactPhone(), false);

+ 10 - 3
baqing-admin/src/main/resources/mapper/diagnosis/BizMedicalResourceMapper.xml

@@ -11,6 +11,8 @@
11 11
         <result property="introduction"          column="introduction"/>
12 12
         <result property="contactPhone"          column="contact_phone"/>
13 13
         <result property="affiliatedUnit"        column="affiliated_unit"/>
14
+        <result property="townDeptId"            column="town_dept_id"/>
15
+        <result property="townName"              column="town_name"/>
14 16
         <result property="detailAddress"         column="detail_address"/>
15 17
         <result property="consultModes"          column="consult_modes"/>
16 18
         <result property="serviceArea"           column="service_area"/>
@@ -43,7 +45,7 @@
43 45
 
44 46
     <sql id="selectVo">
45 47
         select id, resource_type, resource_name, photo_file_url, photo_file_path, introduction,
46
-               contact_phone, affiliated_unit, detail_address, consult_modes, service_area,
48
+               contact_phone, affiliated_unit, town_dept_id, town_name, detail_address, consult_modes, service_area,
47 49
                fee_standard, service_start_time, service_end_time, service_weekdays,
48 50
                max_daily_appointments, establish_date, team_size, team_members, person_in_charge,
49 51
                org_level, equipment_model, longitude, latitude,
@@ -98,6 +100,9 @@
98 100
             <if test="resourceName != null and resourceName != ''">
99 101
                 and resource_name like concat('%', #{resourceName}, '%')
100 102
             </if>
103
+            <if test="townDeptId != null">
104
+                and town_dept_id = #{townDeptId}
105
+            </if>
101 106
             <if test="queryPublishStatus != null and queryPublishStatus == 0">
102 107
                 and publish_status = 0 and offline_time is null
103 108
             </if>
@@ -114,7 +119,7 @@
114 119
     <insert id="insertBizMedicalResource" parameterType="com.ruoyi.web.modules.diagnosis.domain.BizMedicalResource" useGeneratedKeys="true" keyProperty="id">
115 120
         insert into biz_medical_resource (
116 121
             resource_type, resource_name, photo_file_url, photo_file_path, introduction,
117
-            contact_phone, affiliated_unit, detail_address, consult_modes, service_area,
122
+            contact_phone, affiliated_unit, town_dept_id, town_name, detail_address, consult_modes, service_area,
118 123
             fee_standard, service_start_time, service_end_time, service_weekdays,
119 124
             max_daily_appointments, establish_date, team_size, team_members, person_in_charge,
120 125
             org_level, equipment_model, longitude, latitude,
@@ -123,7 +128,7 @@
123 128
             create_by, create_time, remark
124 129
         ) values (
125 130
             #{resourceType}, #{resourceName}, #{photoFileUrl}, #{photoFilePath}, #{introduction},
126
-            #{contactPhone}, #{affiliatedUnit}, #{detailAddress}, #{consultModes}, #{serviceArea},
131
+            #{contactPhone}, #{affiliatedUnit}, #{townDeptId}, #{townName}, #{detailAddress}, #{consultModes}, #{serviceArea},
127 132
             #{feeStandard}, #{serviceStartTime}, #{serviceEndTime}, #{serviceWeekdays},
128 133
             #{maxDailyAppointments}, #{establishDate}, #{teamSize}, #{teamMembers}, #{personInCharge},
129 134
             #{orgLevel}, #{equipmentModel}, #{longitude}, #{latitude},
@@ -141,6 +146,8 @@
141 146
             introduction = #{introduction},
142 147
             contact_phone = #{contactPhone},
143 148
             affiliated_unit = #{affiliatedUnit},
149
+            town_dept_id = #{townDeptId},
150
+            town_name = #{townName},
144 151
             detail_address = #{detailAddress},
145 152
             consult_modes = #{consultModes},
146 153
             service_area = #{serviceArea},

+ 3 - 0
baqing-admin/src/test/java/com/ruoyi/web/modules/diagnosis/mapper/BizMedicalResourceMapperXmlTest.java

@@ -21,6 +21,7 @@ class BizMedicalResourceMapperXmlTest
21 21
         assertTrue(xml.contains("resource_type = '004001'"));
22 22
         assertTrue(xml.contains("resource_type = '004003'"));
23 23
         assertTrue(xml.contains("resource_name like concat('%', #{resourceName}, '%')"));
24
+        assertTrue(xml.contains("town_dept_id = #{townDeptId}"));
24 25
         assertTrue(xml.contains("offline_time is null"));
25 26
         assertTrue(xml.contains("offline_time is not null"));
26 27
         assertTrue(xml.contains("order by create_time desc, id desc"));
@@ -30,6 +31,8 @@ class BizMedicalResourceMapperXmlTest
30 31
         assertTrue(xml.contains("account_assigned = 1"));
31 32
         assertTrue(xml.contains("countBySysUserId"));
32 33
         assertTrue(xml.contains("from biz_medical_resource"));
34
+        assertTrue(xml.contains("town_dept_id"));
35
+        assertTrue(xml.contains("town_name"));
33 36
     }
34 37
 
35 38
     private static String readMapperXml()

+ 31 - 0
baqing-admin/src/test/java/com/ruoyi/web/modules/diagnosis/service/impl/BizMedicalResourceServiceImplTest.java

@@ -43,6 +43,9 @@ class BizMedicalResourceServiceImplTest
43 43
     @Mock
44 44
     private MedicalResourceTypeValidator medicalResourceTypeValidator;
45 45
 
46
+    @Mock
47
+    private com.ruoyi.web.modules.industryservice.support.TownDeptSupport townDeptSupport;
48
+
46 49
     @InjectMocks
47 50
     private BizMedicalResourceServiceImpl service;
48 51
 
@@ -167,6 +170,34 @@ class BizMedicalResourceServiceImplTest
167 170
         verify(mapper, times(2)).updateBizMedicalResource(any());
168 171
     }
169 172
 
173
+    @Test
174
+    @DisplayName("修改兽医且已分配账号时同步用户部门")
175
+    void updateSyncsLinkedUserDept()
176
+    {
177
+        BizMedicalResource db = MedicalResourceTestSamples.sampleVetDraft();
178
+        db.setId(1L);
179
+        db.setAccountAssigned(MedicalResourceRules.ACCOUNT_ASSIGNED_YES);
180
+        db.setSysUserId(88L);
181
+        db.setConsultModes("1,2,3");
182
+        when(mapper.selectBizMedicalResourceById(1L)).thenReturn(db);
183
+        when(mapper.updateBizMedicalResource(any())).thenReturn(1);
184
+        com.ruoyi.common.core.domain.entity.SysDept town = new com.ruoyi.common.core.domain.entity.SysDept();
185
+        town.setDeptId(201L);
186
+        town.setDeptName("雅安镇");
187
+        when(townDeptSupport.requireReportTown(201L)).thenReturn(town);
188
+        doNothing().when(accountAssigner).syncLinkedUserDept(any());
189
+
190
+        BizMedicalResource in = MedicalResourceTestSamples.sampleVetDraft();
191
+        in.setId(1L);
192
+        in.setTownDeptId(201L);
193
+        in.setConsultModesList(java.util.Arrays.asList(1, 2, 3));
194
+        assertEquals(1, service.updateBizMedicalResource(in));
195
+        verify(accountAssigner).syncLinkedUserDept(argThat(r ->
196
+                Long.valueOf(201L).equals(r.getTownDeptId())
197
+                        && "雅安镇".equals(r.getTownName())
198
+                        && Long.valueOf(88L).equals(r.getSysUserId())));
199
+    }
200
+
170 201
     @Test
171 202
     @DisplayName("分配账号")
172 203
     void assignAccount()

+ 40 - 0
baqing-admin/src/test/java/com/ruoyi/web/modules/diagnosis/support/MedicalResourceAccountAssignerTest.java

@@ -3,6 +3,7 @@ package com.ruoyi.web.modules.diagnosis.support;
3 3
 import static org.junit.jupiter.api.Assertions.assertEquals;
4 4
 import static org.junit.jupiter.api.Assertions.assertThrows;
5 5
 import static org.mockito.ArgumentMatchers.any;
6
+import static org.mockito.ArgumentMatchers.argThat;
6 7
 import static org.mockito.Mockito.verify;
7 8
 import static org.mockito.Mockito.when;
8 9
 
@@ -44,6 +45,7 @@ class MedicalResourceAccountAssignerTest
44 45
         BizMedicalResource resource = MedicalResourceTestSamples.sampleVetDraft();
45 46
         resource.setId(12L);
46 47
         resource.setResourceName("张兽医");
48
+        resource.setTownDeptId(201L);
47 49
         SysRole role = new SysRole();
48 50
         role.setRoleId(100L);
49 51
         when(sysRoleMapper.checkRoleKeyUnique(MedicalResourceRules.ROLE_KEY_VET)).thenReturn(role);
@@ -58,6 +60,44 @@ class MedicalResourceAccountAssignerTest
58 60
         SysUser user = assigner.createAccount(resource, "admin");
59 61
         assertEquals("zsy12", user.getUserName());
60 62
         verify(sysRoleMapper).checkRoleKeyUnique(MedicalResourceRules.ROLE_KEY_VET);
63
+        verify(sysUserService).insertUser(argThat(u -> Long.valueOf(201L).equals(u.getDeptId())));
64
+    }
65
+
66
+    @Test
67
+    @DisplayName("兽医无乡镇时不写 deptId")
68
+    void createAccountVetWithoutTown()
69
+    {
70
+        BizMedicalResource resource = MedicalResourceTestSamples.sampleVetDraft();
71
+        resource.setId(12L);
72
+        resource.setResourceName("张兽医");
73
+        resource.setTownDeptId(null);
74
+        SysRole role = new SysRole();
75
+        role.setRoleId(100L);
76
+        when(sysRoleMapper.checkRoleKeyUnique(MedicalResourceRules.ROLE_KEY_VET)).thenReturn(role);
77
+        when(sysUserService.checkUserNameUnique(any())).thenReturn(true);
78
+        when(configService.selectConfigByKey("sys.user.initPassword")).thenReturn("123456");
79
+        when(sysUserService.insertUser(any())).thenAnswer(inv -> {
80
+            SysUser u = inv.getArgument(0);
81
+            u.setUserId(1L);
82
+            return 1;
83
+        });
84
+
85
+        assigner.createAccount(resource, "admin");
86
+        verify(sysUserService).insertUser(argThat(u -> u.getDeptId() == null));
87
+    }
88
+
89
+    @Test
90
+    @DisplayName("已分配时同步更新用户部门")
91
+    void syncLinkedUserDept()
92
+    {
93
+        BizMedicalResource resource = MedicalResourceTestSamples.sampleVetDraft();
94
+        resource.setAccountAssigned(MedicalResourceRules.ACCOUNT_ASSIGNED_YES);
95
+        resource.setSysUserId(9L);
96
+        resource.setTownDeptId(202L);
97
+        when(sysUserService.updateUserProfile(any())).thenReturn(1);
98
+        assigner.syncLinkedUserDept(resource);
99
+        verify(sysUserService).updateUserProfile(argThat(u ->
100
+                Long.valueOf(9L).equals(u.getUserId()) && Long.valueOf(202L).equals(u.getDeptId())));
61 101
     }
62 102
 
63 103
     @Test

+ 2 - 0
doc/牧业疫病诊疗服务/畜牧医疗资源管理/畜牧医疗资源管理功能需求.md

@@ -206,6 +206,7 @@ flowchart TD
206 206
 | 兽医介绍 | **选填**;若有内容 **≤500** 字 |
207 207
 | 联系方式 | **选填**;若填写须为大陆手机号 |
208 208
 | 隶属单位 | **选填**;若有内容 **≤20** 字 |
209
+| 所属乡镇 | **选填**;下拉选择填报乡镇(`sys_dept`);有值时分配账号写入关联用户 `dept_id`,编辑保存时同步更新 |
209 210
 | 详细地址 | **选填**;若有内容 **≤100** 字 |
210 211
 | 接诊方式 | **必填**;**多选**至少一项:定点接诊、上门接诊、在线接诊 |
211 212
 | 服务区域 | **选填**;若有内容 **≤100** 字 |
@@ -309,6 +310,7 @@ flowchart TD
309 310
 | 次数 | **每条仅成功一次**;已分配则不可重复 |
310 311
 | 默认登录名 | **展示名称汉语拼音(全拼、无空格、小写)** + **该条资源唯一业务编号** |
311 312
 | 默认角色 | **兽医** → 预置兽医端角色(草稿:**编号 100**)。**机构** → 预置机构端角色(草稿:**编号 102**)。以系统角色配置为准 |
313
+| 部门同步 | **兽医**:若已填「所属乡镇」,创建用户时写入 `sys_user.dept_id`;编辑资源且已分配账号时同步更新 `dept_id` |
312 314
 | 与发布 | **默认未发布可分配**;**已发布不可新分配** |
313 315
 | 失败 | 明确原因;**不**记为已分配,可重试(仍仅一次成功) |
314 316
 

+ 2 - 0
doc/牧业疫病诊疗服务/畜牧医疗资源管理/畜牧医疗资源管理技术方案.md

@@ -50,6 +50,8 @@
50 50
 | `introduction` | `varchar(500)` | Y | — | 介绍,需求 1~500 字 |
51 51
 | `contact_phone` | `varchar(20)` | N | NULL | 联系电话;类型 1/2/3 由应用层必填 |
52 52
 | `affiliated_unit` | `varchar(64)` | N | NULL | 隶属单位 |
53
+| `town_dept_id` | `bigint(20)` | N | NULL | 所属乡镇部门 ID(**仅兽医人员**,选填);有值时分配账号写入 `sys_user.dept_id`,修改时同步 |
54
+| `town_name` | `varchar(64)` | N | NULL | 所属乡镇名称冗余 |
53 55
 | `detail_address` | `varchar(200)` | N | NULL | 详细地址(兽医、机构) |
54 56
 | `consult_modes` | `varchar(32)` | N | NULL | 接诊方式,逗号分隔 **1**定点 **2**上门 **3**在线 |
55 57
 | `service_area` | `varchar(200)` | N | NULL | 服务区域(兽医) |

+ 2 - 0
sql/biz_medical_resource.sql

@@ -10,6 +10,8 @@ CREATE TABLE IF NOT EXISTS `biz_medical_resource` (
10 10
   `introduction` varchar(500) DEFAULT NULL COMMENT '介绍',
11 11
   `contact_phone` varchar(20) DEFAULT NULL COMMENT '联系电话',
12 12
   `affiliated_unit` varchar(64) DEFAULT NULL COMMENT '隶属单位',
13
+  `town_dept_id` bigint(20) DEFAULT NULL COMMENT '所属乡镇部门ID(仅兽医人员,可选)',
14
+  `town_name` varchar(64) DEFAULT NULL COMMENT '所属乡镇名称冗余',
13 15
   `detail_address` varchar(200) DEFAULT NULL COMMENT '详细地址',
14 16
   `consult_modes` varchar(32) DEFAULT NULL COMMENT '接诊方式1,2,3',
15 17
   `service_area` varchar(200) DEFAULT NULL COMMENT '服务区域',